jinmokai's blog logo

HTML标签语义

HTML标签语义化使用场景-摘录《HTML并不简单》张鑫旭著

前言:本书主要摘录《HTML并不简单》一书,本文博客主要通过自己实践加深印象并方便自己日后查询

HTML语义标签

页面布局相关标签使用

HTML语义使用标准是会随着时间的变化而改变,而不是一成不变的

例如 <a>标签里面包含 <div>这是不推荐的,现在这种方式却很常见,又例如<i>元素和<b>元素过去都是不推荐使用的,现在随着HTML5的推广,它有了自己独特的含义

header和footer标签

过去<header><footer>标签使用场景往往都是在页面的头部或底部,现在使用场景可以放在文章头部或底部,也可以是组件头部或底部,例如:

<div class="article">
    <header>
        <h1>文章标题</h1>
    </header>
    <div class="content">
        <p>文章内容</p>
    </div>
    <footer>
        <p>文章底部</p>
    </footer>
</div>

main和aside标签

<main>标签表示页面主要内容,<aside>标签表示与主要内容相关的内容,结构如下所示:

main
    aside

主要就是<main>表示主内容区,<aside>表示次要内容区,不是侧边栏就一定使用<aside>标签,而是要有一定的关联性

主要语义就是表示页面导航,通常包含一组链接,用于帮助用户在网站进行跳转,例如很多网站导航、标签菜单都是适合场景,例如:

<nav>
    <ul>
        <li><a href="#">首页</a></li>
        <li><a href="#">产品</a></li>
        <li><a href="#">关于</a></li>
    </ul>
</nav>

相反这不是多个导航链接场合都适合nav元素,例如网站底部的完全备案链接,都不适合<nav>元素

section元素

<section>标签表示文档中的一个独立部分,通常包含一个标题,可以这么说只要带有标签独立部分(即带有h1-h6),都适合<section>元素。

这种功能非常实用,只要是具有独立区域都可以使用,在很多非文档页面中也是非常常用的功能

终于不用写烦人的div标签了,在后台系统开发中中因为懒,常常使用 .xx > div 来解决样式问题🤯
这就会导致出现css渲染很慢的情况

文档结构信息标签使用

article标签

在文档结构信息对语义化要求非常高,例如,新闻,博客,咨询,论坛,社交网站信息流中,这些也是HTML语义化价值最大化的使用场景

比section元素更高一级的的article元素

article标签通常包裹整个信息块,结构如下:

article
    h1
    section
        h2
        p
    section
        h2
        p

如果出现article标签嵌套的情况,这是不符合语义的,内部的article请替换为section元素

总结一下基本结构就是

body
    main
        article
            h1
            section
                h2
                p
            section
                h2
                p

h1-h6标签

h1-h6标签表示标题,h1表示一级标题,h2表示二级标题,以此类推,h6表示六级标题,h1-h6标签通常用于文章标题,页面标题,组件标题等场景

其中,一个页面一定只有一个一级标签,即<h1>元素最多出现一次,且必须最先出现

对于工具类或应用网站,<h1>元素往往会用在logo上,同时设置网站的名称,以便增加网站seo识别权重;再某种程度上<h1>标签可以和<title>有的一拼所以要慎用,如果发现网站已经添加了一个<h1>标签,就不要觉得无所谓,又额外添加<h1>标签,这会影响到seo, 此时请使用<h2>标签或<div>添加role='heading'来保持标签语义

另外标签一定不能跳级,若标签是<h2>,则不能使用<h4>标签,只能使用<h3>标签,一定要一级一级的来

hrgroup元素

<hgroup>标签主要用来包裹标签和补充信息,而补充信息往往是一个或多个<p>元素。

<hgroup>
    <h1>文章标题</h1>
    <h2>副标题</h2>
</hgroup>

效果如下

文章标题

副标题

引用元素区别blockquote,q,cite区别

表示引用元素有这三种,区别就是

  • <blockquote>标签表示长篇引用,通常是一段话或某个章节
<blockquote>
    <p>这是一段引用内容</p>
    <p>这是一段引用内容</p>
</blockquote>

效果如下

这是一段引用内容

这是一段引用内容

  • <q>标签表示短篇引用,通常是一句话

q元素和blockquote元素语义本质一样,(q本质就是quote的缩写)

默认情况下blockquote是块级元素,同时在上下左右都会有默认margin距离。而q元素是行内元素,没有默认margin距离,但前后会增加引号

效果如下

这是一段引用内容

q标签还有一个属性叫cite,表示引用来源,此属性必须为url地址,例如:

景德镇浮梁有一个<q cite="https://www.sohu.com/a/297814384_120042177">金公祠</q>

金公祠

最后聊聊cite引用,虽然也是引用但是通常<cite>标签通常表示特殊特殊的名词,而不是言论引用

例如:

<cite>《HTML并不简单》</cite>是由张鑫旭编写

效果如下

《HTML并不简单》是由张鑫旭编写

默认cite标签会让字体斜体,因为英文字体不规则,体量小,所以专门设计倾斜字体样式很方便,特殊名称保持倾斜会很让人识别,不影响阅读,是很好的体验。 但是对于东南亚语言而言,这就不是很好的体验了,我们的中文斜体对于人力成本是巨大的,且中文字体倾斜都是采用算法强制倾斜,人力成本巨大,如果一定要使用的话,请采用font-style: normal来设置字体

倾斜字体i,b,em,strong

i和em使用区别就是,这两个都可以让文字倾斜,且都表示当前文本和周围有所不同,他们区别是什么呢?

那就是屏幕阅读器的语气感情色彩

例如:

我们都羡慕人人都嫁给爱情,但是我们更重要的是爱<em>自己</em>

效果如下:

我们都羡慕人人都嫁给爱情,但是我们更重要的是爱自己

养成习惯的time标签

<time>标签通常表示时间日期,如果涉及到时间相关的可以无脑使用

例如:


评论发表于<time>刚刚</time>

效果如下:

评论发表于

如果数据允许,精确时间值可以使用datetime属性标记,例如:

评论发表于<time datetime="2023-01-01T00:00:00+08:00">刚刚</time>

效果如下:

评论发表于

这里的datetime属性格式要求比较松散,只要是时间都可以,可以仅仅是年份,例如2024,也可以仅仅是小时和分钟,例如15:30,甚至可以是持续时间,例如PT4H18M3S

且使用time标签用css样式匹配也是非常安全

.desc time {
    color: red;
    ...
}

内联元素

超过一半的span可以用data来替换

在一些工具,偏应用类的web产品中,一定会有大量来自数据库中的数据字段,这些数据往往采用<span>元素呈现,现在,请使用<data>元素替代


<section>
    <div>
        <data value="2024">年份</data>
    </div> 
</section>

对于动态数据采用data标签,不仅对开发者友好,也对机器友好,其支持一个原生value的属性值,用来设置机器人识别信息;对于span元素,当我们需要挂在数据的时候需要在dom上挂载信息的时候 只能使用data-*自定义属性,例如:

<span data-id="2024">年份</span>

然后通过span.dataset.id来获取span上面的id数据,而使用data获取数据只需要data.value即可