前端开发入门基础教程 - HTML核心语法与实战应用

前端入门学习笔记(Day01):HTML核心语法与实战应用

引入:

作为前端学习的第一天,我们将聚焦HTML(HyperText Markup Language,超文本标记语言)的核心知识——它是构建网页的"骨架",所有视觉内容和交互逻辑都依赖于HTML的基础结构。本文将从文档结构、文本标签、图片引用、表单设计四个维度,结合实战案例和注意事项,帮你夯实前端入门第一步。

一、HTML基础文档结构

HTML(超文本标记语言)是构建网页的基础,一个完整的HTML文档有着固定的结构,以下是最基本的框架:

```html

<html><!-- 网页的根元素,所有内容都包裹在其中 -->

    <head>

        <title>这是我的第一个网页</title><!-- 定义网页标题,显示在浏览器标签页 -->

    </head>

    <body>

        <!-- 网页的可见内容都写在这里 -->

    </body>

</html>

```

- `<html>`:整个HTML文档的根元素,是所有其他元素的容器

- `<head>`:用于包含文档的元数据,如标题、样式等,这些内容不会直接显示在网页主体中

- `<title>`:设置网页的标题,会显示在浏览器的标签页上,对SEO也有重要作用

- `<body>`:包含网页中所有可见的内容,如文本、图片、表单等

二、文本相关标签

HTML提供了一系列标签用于组织文本内容,核心是**语义化**——即标签不仅能改变样式,更能表达内容的逻辑含义(比如"这是标题"、"这是强调内容"),这对搜索引擎(SEO)和无障碍访问至关重要。

1. 标题标签(h1-h6)

标题标签共6级,从`h1`到`h6`字体逐渐变小、权重逐渐降低,用于表示内容的主次关系。

<h1>这是一个标签</h1>  <!-- 最大的标题,通常一个页面只使用一次 -->

<h2>这是一个标签</h2>

<h3>这是一个标签</h3>

<h4>这是一个标签</h4>

<h5>这是一个标签</h5>

<h6>这是一个标签</h6>  <!-- 最小的标题 -->

2. 段落与文本格式化标签

<p>:用于定义段落,会自动在段落前后添加空行

<strong>:使文本加粗,语义上表示重要内容

-<em>:使文本斜体,语义上表示强调内容

-<del>:为文本添加删除线,表示已删除的内容

示例代码:

<p><strong>猫咪</strong>以为<em>女主</em>死了!<del>下一秒</del>,把主人的肚子都笑疼了看一遍笑一遍</p>

三、图片标签(img)

`<img>`标签用于在页面中插入图片,是**自闭合标签**(无需写`</img>`),核心是正确设置图片路径和优化用户体验。

1. 基础语法与核心属性

```html

<!-- 完整示例:包含路径、尺寸、替代文本、加载失败处理 -->

<img

    src="images/scenery.jpg"  <!-- 图片路径(核心) -->

    width="400"               <!-- 宽度(单位:像素,建议只设一个维度,避免图片拉伸) -->

    alt="蓝色天空下的雪山湖泊,湖边有绿色草地"  <!-- 替代文本(核心:无障碍+SEO) -->

    title="新疆赛里木湖风景"  <!-- 鼠标悬停时显示的提示文本 -->

    οnerrοr="this.src='images/default.jpg'"  <!-- 图片加载失败时,显示默认图 -->

>

```

2. 三种图片路径详解(新手必掌握)

| 相对路径 (图片和代码在同一目录下)

<img src="a.jpg" width="200" height="200" alt="风景照">

| 绝对路径

 

<img src="D:\桌面\前端页面学习\day01\a.jpg" width="200" height="200" alt="风景照">

| 网络路径 

<img src="https://example.com/image.jpg" width="200" height="200" alt="风景照">

3. 优化技巧

1. **避免图片拉伸**:

只设置`width`或`height`其中一个属性,浏览器会自动按比例缩放图片(比如只设`width="400"`,高度会自动计算)。

2. **必须写`alt`属性**:

   - 图片加载失败时,用户能通过`alt`文本了解图片内容;

   - 屏幕阅读器(视障用户使用)会读取`alt`文本,提升无障碍性;

   - 搜索引擎通过`alt`识别图片内容,提升图片搜索排名。

3. **使用合适的图片格式**:

   - 照片/复杂图像:用`JPG`(体积小,支持压缩);

   - 图标/透明背景图:用`PNG`(支持透明,画质无损);

   - 动图:用`GIF`(仅支持256色,适合简单动画);

   - 现代优化格式:用`WebP`(体积比JPG小50%,兼容性需注意)。

四、表单相关标签

表单是网页与用户交互的核心组件(如登录、注册、搜索、问卷),用于收集用户输入并提交到服务器。一个完整的表单由`<form>`容器和内部的**表单控件**(输入框、按钮等)组成。

1. form标签:表单的"容器"

所有表单控件必须放在`<form>`标签内,它定义了表单数据的提交规则。

```html

<!-- 标准表单结构 -->

<form

    action="https://api.example.com/submit"  <!-- 数据提交的目标地址(后端接口) -->

    method="post"  <!-- 提交方式:get或post -->

    enctype="multipart/form-data"  <!-- 上传文件时必须设置,默认无需写 -->

>

    <!-- 表单控件(输入框、按钮等) -->

</form>

```

#### 核心属性解析

- **action**:指定表单数据提交到哪个URL(后端接口地址),如果暂时没有后端,可先写`#`(表示提交到当前页面,仅用于测试)。

- **method**:提交方式,二选一:

  | 提交方式 | 数据位置 | 数据大小限制 | 适用场景 | 安全性 |

  |----------|----------|--------------|----------|--------|

  | `get` | 拼接在URL后面(如`?username=zhangsan&password=123`) | 约2KB(不同浏览器略有差异) | 搜索、查询等无敏感数据的场景(如百度搜索) | 低(数据可见,易被拦截) |

  | `post` | 放在请求体中(URL不可见) | 无明确限制(由后端配置) | 登录、注册、提交表单等含敏感数据的场景 | 高(数据不可见,需配合HTTPS) |

- **enctype**:仅在上传文件(如`<input type="file">`)时需要设置为`multipart/form-data`,否则默认值`application/x-www-form-urlencoded`即可。

2. 常用表单控件:收集信息的"组件"

表单控件是用户直接操作的元素,核心是通过`name`属性标识数据(后端通过`name`获取用户输入的值)。

(1)输入框(input):最灵活的控件

`<input>`是表单中最常用的控件,通过`type`属性切换不同类型,支持文本、密码、数字等多种输入场景。

| type值 | 功能 | 示例代码 | 关键属性 |

|--------|------|----------|----------|

| `text` | 单行文本输入(如用户名) | `<input type="text" name="username" placeholder="请输入用户名" maxlength="20">` | - `placeholder`:输入提示(为空时显示)<br>- `maxlength`:最大输入长度(限制字符数)<br>- `value`:默认值(如`value="张三"`) |

| `password` | 密码输入(输入内容隐藏为圆点) | `<input type="password" name="password" placeholder="请输入6-16位密码" required>` | - `required`:必填项(提交时浏览器会校验,为空则提示) |

| `number` | 数字输入(仅允许输入数字、加减号、小数点) | `<input type="number" name="age" min="0" max="150" step="1">` | - `min`/`max`:最小/最大值<br>- `step`:步长(点击上下箭头时增减的幅度) |

| `tel` | 电话输入(移动端会弹出数字键盘) | `<input type="tel" name="phone" placeholder="请输入手机号" pattern="1[3-9]\d{9}">` | - `pattern`:正则表达式校验(如手机号格式) |

| `email` | 邮箱输入(浏览器会自动校验格式) | `<input type="email" name="email" placeholder="请输入邮箱" required>` | 无需写正则,浏览器会自动校验是否含`@`和域名 |

| `file` | 文件上传(如头像、附件) | `<input type="file" name="avatar" accept="image/*">` | - `accept`:限制上传文件类型(如`image/*`仅允许图片)<br>- 需配合`<form>`的`enctype="multipart/form-data"` |

| `submit` | 提交按钮(触发表单提交) | `<input type="submit" value="登录">` | - `value`:按钮上的文本(默认是"提交") |

| `reset` | 重置按钮(清空表单所有输入) | `<input type="reset" value="重新填写">` | 谨慎使用,避免误触导致用户输入丢失 |

(2)单选按钮(radio):二选一/多选一

用于从多个选项中选择**一个**,必须满足两个条件:

1. 同一组单选按钮的`name`属性值必须相同;

2. 每个选项必须设置`value`属性(后端获取的是`value`值,不是文本)。

```html

<div>

    <label>性别:</label>

    <input type="radio" name="gender" value="male" id="male">

    <label for="male">男</label> <!-- 点击"男"文字也能选中按钮,提升体验 -->

   

    <input type="radio" name="gender" value="female" id="female" checked>

    <label for="female">女</label> <!-- checked:默认选中该选项 -->

   

    <input type="radio" name="gender" value="other" id="other">

    <label for="other">其他</label>

</div>

```

(3)复选框(checkbox):多选多

用于从多个选项中选择**一个或多个**,规则与单选按钮类似,但`name`建议用复数形式(如`hobbies[]`,后端接收时会是数组)。

```html

<div>

    <label>爱好:</label>

    <input type="checkbox" name="hobbies[]" value="coding" id="coding" checked>

    <label for="coding">编程</label>

   

    <input type="checkbox" name="hobbies[]" value="reading" id="reading">

    <label for="reading">阅读</label>

   

    <input type="checkbox" name="hobbies[]" value="travel" id="travel">

    <label for="travel">旅行</label>

</div>

```

(4)下拉列表(select & option):选项较多时使用

选项较多(如省份、年份)时,下拉列表比单选按钮更节省页面空间,由`<select>`(容器)和`<option>`(选项)组成。

```html

<div>

    <label for="city">所在城市:</label>

    <select name="city" id="city" multiple> <!-- multiple:允许按住Ctrl多选 -->

        <option value="">请选择</option> <!-- 空选项,提示用户选择 -->

        <option value="beijing">北京</option>

        <option value="shanghai" selected>上海</option> <!-- selected:默认选中 -->

        <option value="guangzhou">广州</option>

        <option value="shenzhen">深圳</option>

    </select>

</div>

<!-- 分组下拉列表:选项较多时用<optgroup>分组,提升可读性 -->

<div>

    <label for="province">所在省份:</label>

    <select name="province" id="province">

        <optgroup label="华北地区"> <!-- label:分组名称,不可选中 -->

            <option value="beijing">北京</option>

            <option value="tianjin">天津</option>

            <option value="hebei">河北</option>

        </optgroup>

        <optgroup label="华东地区">

            <option value="shanghai">上海</option>

            <option value="jiangsu">江苏</option>

            <option value="zhejiang">浙江</option>

        </optgroup>

    </select>

</div>

```

(5)文本域(textarea):多行文本输入

用于输入长文本(如留言、备注、简介),支持多行输入和自动换行,与单行文本框`<input type="text">`的核心区别是**支持多行**。

```html

<div>

    <label for="remark">备注信息:</label><br>

    <textarea

        name="remark"

        id="remark"

        rows="5"  <!-- 初始显示的行数 -->

        cols="30" <!-- 初始显示的列数(字符数) -->

        placeholder="请输入备注(最多200字)"

        maxlength="200" <!-- 限制最大输入字符数 -->

    ></textarea>

</div>

```

#### 关键注意点

- 文本域的默认值需写在`<textarea>`标签内部(如`<textarea>默认内容</textarea>`),不能用`value`属性;

- 避免在标签内留多余空格(如`<textarea>  </textarea>`),否则会显示空白内容。

3. 表单分组与标签关联:提升可用性

当表单控件较多时,需要用`<fieldset>`和`<legend>`进行分组,同时用`<label>`关联标签与控件,核心目标是**提升用户体验和无障碍性**。

 (1)表单分组(fieldset & legend)

用于将逻辑相关的控件分组(如"个人信息"、"账户安全"),使表单结构更清晰,尤其适合长表单。

```html

<form action="#" method="post">

    <!-- 第一组:个人基本信息 -->

    <fieldset>

        <legend>个人基本信息</legend> <!-- 分组标题,显示在边框上方 -->

        <div>

            <label for="username">用户名:</label>

            <input type="text" name="username" id="username" required>

        </div>

        <div>

            <label for="phone">手机号:</label>

            <input type="tel" name="phone" id="phone" pattern="1[3-9]\d{9}" required>

        </div>

    </fieldset>

    <!-- 第二组:账户安全信息 -->

    <fieldset style="margin-top: 10px;"> <!-- 用style简单调整间距,后续用CSS优化 -->

        <legend>账户安全信息</legend>

        <div>

            <label for="password">密码:</label>

            <input type="password" name="password" id="password" required>

        </div>

        <div>

            <label for="confirm-pwd">确认密码:</label>

            <input type="password" name="confirm-pwd" id="confirm-pwd" required>

        </div>

    </fieldset>

    <div style="margin-top: 10px;">

        <input type="submit" value="注册">

        <input type="reset" value="重置">

    </div>

</form>

```

(2)标签关联(label for)

`<label>`的核心作用是**关联标签文本与控件**,点击标签文本时,对应的控件会自动聚焦(如点击"用户名"文字,光标会定位到用户名输入框),尤其适合单选按钮、复选框等小控件。

关联方式有两种:

1. **显式关联**(推荐):通过`for`属性绑定控件的`id`(需确保`for`值与`id`完全一致);

   ```html

   <label for="email">邮箱:</label>

   <input type="email" name="email" id="email"> <!-- id必须与label的for一致 -->

   ```

2. **隐式关联**:将控件嵌套在`<label>`内部(无需`for`和`id`);

   ```html

   <label>

       同意协议 <input type="checkbox" name="agree"> <!-- 点击"同意协议"也能选中复选框 -->

   </label>

   ```

五、HTML新手必避的10个坑

1. 标签不闭合:

比如`<p>这是一个段落`(缺少`</p>`),浏览器可能自动补全,但会导致页面结构错乱(尤其嵌套标签时)。

2. 标签嵌套错误:

比如`<p><h1>标题</h1></p>`(块级标签不能嵌套在段落内),正确嵌套规则:块级标签(如`<div>`、`<h1>`)可嵌套行内标签(如`<span>`、`<strong>`),行内标签不能嵌套块级标签。

3. 路径大小写错误:

比如`src="Images/Scenery.jpg"`与实际文件`images/scenery.jpg`大小写不一致,Windows系统不区分大小写,但Linux服务器区分,会导致图片加载失败。

4. 表单控件无name属性:

后端无法获取数据(后端通过`name`识别字段,如`username`对应的值),即使写了`id`也不行(`id`是用于前端关联标签,与后端无关)。

5. 单选按钮无相同name:

导致多个单选按钮可同时选中(失去"单选"功能),必须确保同一组单选按钮的`name`值相同。

6. 用<br/>代替<p>:

比如用多个`<br/><br/>`实现段落间距,语义混乱且不利于样式控制(后续用CSS调整间距更灵活)。

7. 滥用div标签:

所有内容都用`<div>`包裹(如`<div class="h1">标题</div>`),忽略语义化标签(如`<h1>`、`<p>`、`<nav>`),会影响SEO和无障碍。

8. 直接用HTML设置样式:

比如`<font color="red">红色文本</font>`(已废弃)、`<body bgcolor="white">`,正确做法是用CSS控制样式(HTML负责结构,CSS负责样式)。

9. 图片无alt属性:

图片加载失败时显示空白,视障用户无法获取图片信息,搜索引擎也无法识别图片内容。

10. 忽略移动端适配:

忘记在`<head>`中添加`<meta name="viewport" content="width=device-width, initial-scale=1.0">`,导致页面在手机上显示异常(如字体过小、页面横向滚动)。

六、实战练习:制作个人信息表单

通过一个完整案例,综合运用上述所有知识点,实现一个包含个人信息、爱好选择、备注的表单页面。

```html

<!DOCTYPE html>

<html lang="zh-CN">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>个人信息表单 | HTML实战</title>

    <meta name="description" content="HTML表单实战案例,包含输入框、单选按钮、复选框、下拉列表等控件">

</head>

<body>

    <h1>个人信息收集表</h1>

    <hr>

    <form action="#" method="post">

        <!-- 第一组:基本信息 -->

        <fieldset>

            <legend>1. 基本信息</legend>

            <div style="margin: 8px 0;">

                <label for="fullname" style="display: inline-block; width: 80px;">姓名:</label>

                <input type="text" name="fullname" id="fullname" placeholder="请输入真实姓名" required>

            </div>

            <div style="margin: 8px 0;">

                <label for="age" style="display: inline-block; width: 80px;">年龄:</label>

                <input type="number" name="age" id="age" min="0" max="120" placeholder="请输入年龄" required>

            </div>

            <div style="margin: 8px 0;">

                <label style="display: inline-block; width: 80px;">性别:</label>

                <input type="radio" name="gender" id="male" value="male" required>

                <label for="male">男</label>

                <input type="radio" name="gender" id="female" value="female">

                <label for="female">女</label>

            </div>

            <div style="margin: 8px 0;">

                <label for="city" style="display: inline-block; width: 80px;">城市:</label>

                <select name="city" id="city" required>

                    <option value="">请选择</option>

                    <option value="beijing">北京</option>

                    <option value="shanghai">上海</option>

                    <option value="guangzhou">广州</option>

                    <option value="shenzhen">深圳</option>

                    <option value="other">其他</option>

                </select>

            </div>

        </fieldset>

        <!-- 第二组:兴趣爱好 -->

        <fieldset style="margin: 15px 0;">

            <legend>2. 兴趣爱好</legend>

            <label style="display: inline-block; width: 80px;">爱好:</label>

            <input type="checkbox" name="hobbies[]" id="coding" value="coding">

            <label for="coding">编程</label>

            <input type="checkbox" name="hobbies[]" id="reading" value="reading">

            <label for="reading">阅读</label>

            <input type="checkbox" name="hobbies[]" id="travel" value="travel">

            <label for="travel">旅行</label>

            <input type="checkbox" name="hobbies[]" id="sports" value="sports">

            <label for="sports">运动</label>

        </fieldset>

        <!-- 第三组:备注信息 -->

        <fieldset>

            <legend>3. 备注信息</legend>

            <div>

                <label for="remark" style="display: block; margin-bottom: 5px;">个人简介:</label>

                <textarea name="remark" id="remark" rows="4" cols="50" placeholder="请简要介绍自己(最多300字)" maxlength="300"></textarea>

            </div>

        </fieldset>

        <!-- 提交与重置按钮 -->

        <div style="margin: 15px 0;">

            <input type="submit" value="提交信息">

            <input type="reset" value="重新填写" style="margin-left: 10px;">

        </div>

    </form>

</body>

</html>

```

### 练习目标

1. 理解表单的层级结构(`<form>`包含`<fieldset>`,`<fieldset>`包含控件);

2. 掌握不同控件的使用场景(何时用单选、何时用下拉列表);

3. 体会语义化标签的作用(如`<legend>`、`<label>`提升可用性)。

七、总结与下一步学习建议

1. Day01核心收获

- **HTML的本质**:不是编程语言,而是"标记语言",负责定义网页的**结构**(骨架),不负责样式和交互;

- **语义化优先**:优先使用有语义的标签(如`<h1>`、`<p>`、`<strong>`),而非单纯追求样式(如`<div>`、`<b>`);

- **路径与表单**:掌握相对路径的写法(避免绝对路径),理解表单控件的`name`属性和提交逻辑(后端交互的基础)。

2. 下一步学习方向

- **CSS基础**:学习如何用CSS美化HTML页面(如设置颜色、字体、间距、布局),实现"骨架"到"皮肤"的转变;

- **HTML5新标签**:学习语义化更强的标签(如`<header>`、`<nav>`、`<footer>`、`<article>`),优化页面结构;

- **表单进阶**:学习表单验证(如前端校验手机号格式)、下拉列表联动(如选择省份后加载对应城市)等交互功能。

建议每天花30分钟手写HTML代码(不要复制粘贴),通过实战巩固标签的使用场景,比如尝试制作"个人简历页面"、"商品列表页面"等,为后续学习CSS打下坚实基础。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值