Menu

HTML 标签:开始标签、结束标签、空元素与嵌套

HTML 标签用来标记内容,让浏览器知道每一部分是什么:标题、段落、链接、图片。学习标签和元素如何工作、哪些标签没有结束标签、嵌套的规则,以及你最常用的标签有哪些。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

HTML 标签是什么

HTML 标签是写在尖括号里的名称,用来标记一段内容。大多数标签成对出现:一个像 <p> 这样的开始标签,和一个带斜杠的、像 </p> 这样的结束标签。两者之间的一切都是内容,整个组合就是一个元素。

把 <h1> 改成 <h2>(开始标签和结束标签都要改),标题就会变小。正是标签名告诉了浏览器这段内容是什么。

结构解析:标签、属性与元素

<a href="/docs/html/links" class="nav">Links</a>
部分在示例中
开始标签<a href="/docs/html/links" class="nav">
标签名a
属性href="/docs/html/links" 和 class="nav"
内容Links
结束标签</a>
元素以上所有部分的整体

属性总是写在开始标签里,绝不写在结束标签里。属性页面有详细介绍。

标签名不区分大小写:<P> 和 <p> 是一样的。请用小写书写。

空元素:没有结束标签

有些元素不能包含任何内容,所以只有开始标签。它们被称为空元素(也有人叫自闭合标签):

完整列表:area、base、br、col、embed、hr、img、input、link、meta、source、track、wbr。

你可以把它们写成带斜杠的 <br />。这个斜杠在 HTML 中不起任何作用;允许它存在,是为了让 XHTML 风格的代码继续可用。普通标签上的斜杠,比如 <div />,同样会被忽略,也就是说这个 div 仍然处于打开状态。

标签嵌套

元素可以放在其他元素里面。规则是:按照与打开相反的顺序关闭标签。最后打开的,最先关闭。

<p>This is <strong>very <em>important</em></strong>.</p>   <!-- correct -->
<p>This is <strong>very <em>important</strong></em>.</p>   <!-- wrong -->

浏览器不会拒绝错误的嵌套,而是会修复它,但修复的结果不一定是你想要的。下面这个例子把两段嵌套错误的代码交给浏览器的解析器,并打印出它实际构建的结构:

这里发生了两处修复。相互交叉的 <b> 和 <i> 被拆成了多余的元素。另外,<p> 不能包含 <div>,所以浏览器在 div 之前就关闭了段落,并把多出来的 </p> 变成了一个新的空段落。当 CSS 或 JavaScript 表现异常时,错误的嵌套是最先要检查的地方之一。

块级元素与行内元素

大多数标签可以分为两种显示类型。块级元素(div、p、h1 到 h6、ul、section)从新的一行开始,占满整个宽度。行内元素(span、a、strong、em、code)位于一行文字之中,宽度只和内容一样。

蓝色的框横跨整个页面,琥珀色的框只包住自己的文字。CSS 可以用 display 属性改变这一点,但每个标签都有自己的默认值。两个通用容器请参见 div 和 span。

最常用的 HTML 标签

标签用途
<html>、<head>、<body>文档的骨架
<title>、<meta>、<link>head 中的页面信息
<h1> 到 <h6>标题
<p>段落
<a>链接
<img>图片
<ul>、<ol>、<li>列表
<strong>、<em>重要的文字和强调的文字
<br>、<hr>换行、主题分隔线
<div>、<span>通用的块级容器和行内容器
<table>、<tr>、<th>、<td>表格
<form>、<input>、<label>、<button>表单
<header>、<nav>、<main>、<footer>、<section>、<article>带有含义的页面结构

想要一份可以打印的单页列表,请查看 HTML 速查表。

不存在的标签

如果你输入了一个浏览器不认识的标签,它并不会出错。浏览器会创建一个未知元素,显示它的内容,并把它当作行内元素:

未知标签对搜索引擎和屏幕阅读器没有任何含义,所以请优先使用真正的标签。如果你在用 JavaScript 构建自己的组件,就给它起一个带连字符的名字(user-badge):带连字符的名称是专门留给自定义元素的,永远不会和未来的 HTML 标签冲突。

常见错误

  • 忘记写结束标签。少了 </a> 或 </strong>,页面的其余部分都会变成链接或粗体。浏览器会帮你关闭某些标签(</p>、</li>),但不包括这些。
  • 给空元素写结束标签。</br> 和 </img> 都是无效的。浏览器甚至会把 </br> 当作开始标签 <br> 来读,所以 <br></br> 会产生两个换行。
  • 标签相互交叉。按相反的顺序关闭:<b><i>x</i></b>,绝不能写成 <b><i>x</b></i>。
  • 在段落中放块级元素。<p> 中的 <div>、列表或标题会让段落提前结束。请用 <div> 作为外层容器。
  • 因为外观而选择标签。用 <h2> 是因为它是标题,而不是因为它字大。大小和粗细属于 CSS 的工作。

常见问题

HTML 标签和 HTML 元素有什么区别?

标签是你输入的标记,比如 <p> 或 </p>。元素是浏览器据此构建出的整体:开始标签、它的属性、内容和结束标签。<p>Hi</p> 是两个标签,组成一个 p 元素。

哪些 HTML 标签不需要结束标签?

空元素(void element)不能有内容,所以没有结束标签:<br>、<hr>、<img>、<input>、<meta>、<link>、<source>、<track>、<wbr>、<area>、<base>、<col> 和 <embed>。

应该写 <br> 还是 <br />?

两种都是有效的 HTML。空元素末尾允许加斜杠,浏览器会忽略它。在 <div /> 这样的非空元素标签上,斜杠同样会被忽略,所以这个 div 会一直保持打开,直到遇到 </div>。

HTML 标签区分大小写吗?

不区分。<P> 和 <p> 生成同一个元素,大小写任意混合也一样。小写是标准写法,大多数格式化工具输出的也是小写。

HTML 一共有多少个标签?

当前的 HTML 标准定义了 100 多个元素,但日常网页只用到其中大约 20 到 30 个:标题、段落、链接、图片、列表、div、span、表单,以及语义化布局标签。

如果使用一个不存在的标签会怎样?

浏览器仍然会为它创建一个元素,显示它的内容,并把它当作没有特殊含义的行内元素。如果名称中包含连字符,比如 <user-card>,就可以作为自定义元素使用。

Coddy 编程语言插图

和 Coddy 一起学编程

开始