02元素与属性

元素(Element)是内容的「容器」,属性(Attribute)是贴在开始标签上的「配置项」。 一个元素可以有多个属性,用空格隔开,写成 属性名="属性值"

约 14 分钟 5 个动手实验 打好地基

一、元素的解剖图

完整元素 = 开始标签 + 内容 + 结束标签。 属性永远写在开始标签里,值建议用双引号包住。

元素结构三件套:谁是谁
部件写法作用可省略吗
开始标签<a href="…">宣布开始,属性都贴在这里不能,元素必须有
内容菜鸟教程真正展示给用户的东西可以,空元素就没有
结束标签</a>宣布结束,前面加斜杠空元素没有;非空元素别漏
用颜色拆解一个元素:把 title 属性的提示文字改一改,再悬停下方链接看效果
口诀:属性住开始标签,值加引号,多个属性空格隔开。 HTML 不区分大小写,但约定俗成全小写。

二、空元素:没有内容的「自闭合」标签

有些元素天生没有内容、也不需要结束标签,称为空元素(void element), 常见的有 <br><hr><img><input><meta><link>

空元素速查:没有结束标签的「自闭合」标签
空元素作用常见写法
<br>强制换行<p>第一行<br>第二行</p>
<hr>水平分割线<hr>
<img>图片<img src="logo.png" alt="徽标">
<input>输入控件<input type="text">
<meta>元数据(编码、viewport)<meta charset="UTF-8">
<link>引入外部资源<link rel="stylesheet" href="style.css">
空元素渲染效果:把 <br> 删掉,两行文字会并到一行
HTML5 里写 <br><br /> 都合法, 但不要写成 <br></br>——空元素没有结束标签。

三、布尔属性:有则生效,无则忽略

一类特殊属性只要出现就生效,不需要值,称为布尔属性。 例如 disabled(禁用)、checked(勾选)、required(必填)、 readonly(只读)、autofocus(自动聚焦)。

布尔属性:写了就生效,不写就当没这回事
布尔属性作用是典型场景
disabled禁用控件条件未满足时不让点提交
checked默认勾选radio / checkbox 预选
required必填校验表单提交前的第一道闸
readonly只读展示不可改的固定值
autofocus自动聚焦页面加载即聚焦搜索框
disabled 从第一个 input 上摘掉,它立刻复活可变;checked 删掉则默认不勾

四、全局属性:任何元素都能用的属性

有一批属性是「通用通行证」,所有元素都可以使用:

全局属性速查:谁都能挂的「通用通行证」
全局属性作用常用程度
id唯一标识,页面内不能重复;JS/CSS 锚点定位用高频
class类名,可重复、可多个(空格分隔),CSS 样式的主力最高频
style行内样式,直接写 CSS(优先级高,尽量少用)
title悬停提示文字
hidden隐藏元素(布尔属性)
lang声明内容语言,如 lang="zh-CN"
dir文字方向:ltr 左到右 / rtl 右到左偶用
data-*自定义数据属性,存 JS 要用的数据,如 data-id="3"
contenteditable让内容可编辑(浏览器原生富文本)偶用
tabindex控制 Tab 键聚焦顺序偶用
draggable元素可拖拽偶用
title 悬停 1 秒出提示;contenteditable 点击文字可直接改——把下面的 contenteditable 删掉看它变回只读
data-* 是前端的「暗格」:页面显示「商品名」, 但 data-price 里还存着价格,JS 一取就能用,数据和视图两不误。

五、块级元素与行内元素

按默认「占据方式」分两大类:块级元素独占一行、能设宽高; 行内元素在一行内排队、宽高由内容决定。(本质是 display 的差异,CSS 章细讲。)

块级 vs 行内 vs 行内块:占据方式的三个阵营
分类代表元素特点
块级div p h1-h6 ul ol li table form header footer section独占一行;默认宽度撑满父级;可设宽高边距
行内span a strong em img input button label在一行内排列;宽高由内容决定;上下边距不生效
行内块img input button(默认表现)像文字一样排队,但又能设宽高
块级换行 vs 行内排队:把第三个 <span> 改成 <div>,看排队瞬间变独占

六、嵌套规则

  • 元素可以嵌套,但必须正确闭合:外层先开的后关。<p><b>加粗</b></p>
  • 块级里可以放块级和行内;行内里一般只放行内或文字。
  • <a> 里不能再放 <a><p> 里不能放 <div>(浏览器会自动拆开)。
  • 缩进只影响可读性,不影响渲染。
错误嵌套不会被报错,浏览器会静默纠错——结构和你写的不一样, 排查起来很痛苦。写的时候就要规范。

七、本章小结

  • 完整元素 = 开始标签 + 内容 + 结束标签;空元素没有结束标签(img、br、hr、input、meta)。
  • 属性只写在开始标签里:名="值",值用双引号包住;一个元素可同时挂多个属性。
  • 四类高频属性:id(全页唯一)、class(可复用、可多个)、style(内联样式)、title(悬停提示)。
  • 布尔属性出现即生效:disabled、checked、required、readonly。
  • data-* 自定义数据是 JS 的「暗格」,不影响显示、随取随用。
  • 块级独占一行可设宽高,行内在一行内排队;嵌套要正确闭合,别让浏览器静默纠错。
动手练习:写一张「商品卡片」——最外层 div 挂 class="card"data-price="99",里面放一张 img(src + alt + title), 一个 strong 写商品名,一个 a 链接挂 target="_blank", 最后用 id="price-tag" 标出价格。