语义化 HTML


两个页面看起来可以完全一样,但内部的搭建方式却可能天差地别。一种用与内容名副其实的元素来搭建:头部就是头部,导航就是导航,主区域就是主区域。另一种把所有东西都塞进同样一个没有身份的容器里,靠类名来区分彼此。从屏幕上看你分不出区别,但除此之外,它们根本不是同一种页面。按元素的含义来选择元素,正是语义化 HTML 要讲的事。
语义指的是什么
语义(Semantic) 说的就是"和含义有关"。语义元素指的是,它的名字本身就说明了它装的是什么内容。段落放进 <p> 里,因为它就是一段文字。导航菜单放进 <nav> 里,因为它就是导航。标签名本身就在描述这个东西。
你几乎可以用一个万能盒子搭出任何页面,再靠样式让它看起来对。但这样一来,页面上就没有任何东西能说明自己是什么了。选择能命名内容的元素,就像搬家时给箱子贴标签一样:不贴标签,东西照样能装进箱子,但贴上标签,别人(或者浏览器)才能不用打开每个箱子就知道里面装的是什么。
<p>,菜单用 <nav>。你可以把所有东西都塞进普通盒子里,用样式做得看起来一样,但这样谁也说不清里面是什么。就把它想成是给搬家的箱子贴标签,谁都能一眼看出里面装的是啥。 地标元素
有几个元素专门用来划分页面上的大区域,也是你最先该用到的:
<header>是页面或某个区块的顶部:logo、标题、简介。<nav>是一组导航链接,比如主菜单。<main>是主要内容,也就是这个页面存在的原因。<section>是一组相关内容的集合,通常带有自己的标题。<article>是一段独立完整的内容,单拿出来看依然说得通,比如一篇博客文章或一条新闻。<aside>是旁侧的内容:相关链接、备注、广告。<footer>是页面或区块的底部:版权信息、联系方式、小字说明。
规则每次都一样:如果一个区域是导航,就放进 <nav>,不要放进 <div>。如果是页脚,就放进 <footer>。用和区域相匹配的元素来命名它。
<header>
<h1>Mara's Kitchen</h1>
<nav>
<a href="/recipes">Recipes</a>
<a href="/about">About</a>
</nav>
</header>
<main>
<h2>Weeknight dinners</h2>
<p>Quick meals you can make after work.</p>
</main>
<footer>
<p>Made in Lisbon.</p>
</footer><header>、<nav>、<main>、<section>、<article>、<aside>、<footer>。每一个都命名了页面的某一部分,你要选和你搭建的区域相匹配的那个。今天不用死记硬背,用得多了自然就记住了。 div 和 span:没有语义时的退路
页面上不是每个部分都值得起一个有含义的名字。有时候你只是需要一个盒子来把东西归到一起方便加样式,或者包住几个字改改颜色。为此有两个本身不带任何含义的普通元素。
<div> 是一个通用的块级容器:找不到更合适的元素时就用它当空容器。<span> 是同样的思路,用在一行文字里的一小段内容上。它们对自己的内容什么也不说,存在的唯一目的就是给样式和分组提供一个挂钩。
<p>Today's total is <span class="price">£42.00</span>.</p>
<div class="card">
<h2>Special offer</h2>
<p>Two for one on all pasta.</p>
</div>这里的 <span> 包住一个价格,方便给它上色。<div> 把一张卡片归到一起,方便给它加边框。只有当找不到更有含义的元素时才用这两个,因为它们对自己装的内容什么都没说明。
<div> 是一个普通盒子,<span> 是包住几个字的普通容器,两者本身都没有任何含义。当你只是需要归类或加样式、又找不到合适的有名字的元素时,就用它们。如果内容确实有含义,比如是个菜单或按钮,那就用对应的元素。 挑对正确的元素
不确定该用哪个元素时,问自己一个简单的问题:这东西是什么?不是它看起来像什么,而是它本质上是什么。答案通常就已经告诉你该用哪个元素了。顶部横排的一行链接是导航,那就是 <nav>。底部一块小字说明是页脚,那就是 <footer>。一个你想上色的价格本身没什么实质含义,那就是 <span>。
从含义出发,只有当真正的答案是"它只是个盒子"时,才退而用 <div> 或 <span>。早点养成这个习惯,你的页面就能自己说明自己是什么,等你或别人以后再来读这份标记时,这个习惯就会派上用场。
<nav>,小字说明就是 <footer>,一个你只想加样式的普通盒子就是 <div>。每次都从含义出发,你的页面最终就会自己说明自己是什么。 
