HTML 语义化的案例分析 - 实践记录 | 青训营

📝 HTML 语义化的案例分析

💡在本篇文章中,我们将讨论为什么以及何时使用语义 HTML 元素,所以我会为您提供几个范例。

但首先,

  • 为什么我们要使用语义标签而不是 div?
    • HTML 能更容易阅读和被扫描 (前提是它被语义标签正确构建)
    • 它对 SEO 更好 (这部分我稍后也会向您展示)
    • 無障礙網頁 (HTML accessibility)

它使 Google 等搜索引擎更容易访问您的网站,并正确索引所有内容。更有可能使您的网站在搜索引擎结果中排名更高,这样您就可以获得更多流量。

同时,这对屏幕阅读器或辅助技术也更好,它可以正确地知道当下发生的事件并进行分类和索引,对您的网站的可访问性也更好。

这就是我们需要使用语义化标签的三个主要原因。

✒️ 常用语义标签的演示

先看到这串代码,这是一个非常典型的 HTML <body> 样板示例,通常包含了 <header><main><footer>

html 复制代码
<body>

    <header>
    
    </header>
    
    <main>
    
    </main>
    
    <footer>
    
    </footer>

</body>

这些已经是语义标签了,因为您也可以使用 <div> 替换掉它们。

html 复制代码
<body>

    <div>
    
    </div>
    
    <div>
    
    </div>
    
    <div>
    
    </div>

</body>

基本上,这两种的效果在使用者眼里是一样的,但我还是推荐您修改掉坏习惯,好好学习关于语义标签的使用。

重新说回来,<header> 内通常用于介绍性内容,如:Logo 、导览链接等方便使用者快速了解页面的浏览功能;<main> 即界面呈现的内容主体,而一个页面也仅能有一个;<footer> 是页面的底部区域,通常包含作者、著作权信息、使用条款、联络方式等链接,这些内容对一般使用者来说甚至可以无视,但可以保障您身为创作者的权益。

🖥️ header 的部分

所以在您的 <header> 中,通常会在左侧有个 Logo 图片 <img>;而在右侧有个导航栏 <nav> ,里头会有个列表 <ul> 包着几个条目 <li> 又包着链接 <a>

html 复制代码
<header>
    <img sec="" alt="" />
    
    <nav>
        <ul>
            <li>
                <a href=""></a>
            </li>
            <li>
                <a href=""></a>
            </li>
        </ul>
    </nav>
</header>

🖥️ main 的部分

然后,在您的 <main> 中,通常会又分为很多小块,以往大家是用 <div>,但现在推荐您改用 <section>,这部分稍后在分析实际案例时会再提及并解释。

而里头可能会有一个标题 <h1><h2> 去方便用户识别每个区块,当然你还会在里面穿插一些文字叙述 <p>。您有时候可能还会看到其他如侧边栏 <aside> 之类的,作为辅助性质的页面导览或广告资讯,或是页面向下滑还有一篇文章之类的 <article>,这部分就由您在进行设计时自行决定布局,我这边仅用代码呈现一个范例。

html 复制代码
<main>
    <section>
        <h2>Benefits</h2>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    </section>
    
    <section>
        <h2>How it works?</h2>
        <p>Sed pharetra facilisis eleifend.</p>
    </section>
</main>

<footer> 的部分结构通常和 <header> 很像,您可以上下比对看看,基本上里头也是包着个列表 <ul> 又包着几个条目 <li> 又包着链接 <a>

但要注意一下,我们基本上不会在 <footer><nav>,那样看起来挺反人类的。除非像是有种设计是取消的 <header> 只保留了 <footer>,但它实际上是把导览列的功能移下来,而剔除了原有页尾关于作者资讯的那些功能。或是把那部分做成了导览列的一个功能块,点击后会额外跳转到一个单独的页面或弹窗呈现信息。这部分一样就看设计师的点子了。

html 复制代码
<footer>
    <ul>
        <li>
            <a href=""></a>
        </li>
        <li>
            <a href=""></a>
        </li>
    </ul>
</footer>

✒️ 实际网站分析 - stripe

在这我将向您展示一些更罕见的标签的示例,例如 <aside><article>

这个网站是 stripe,但说实话,我可以选择任何 Landing Page,因为它们布局概念都非常相似。

我们可以按下键盘上的 F12,可以看到他们如何编写 HTML。

而在顶部我们确实看到了一个标题,这里有一个 Logo、很多导航链接和一个登陆按钮。

它们在这里有很多 div,因为有时你可能还是需要使用 div 为了去调整页面风格之类的。我们稍后看看是否可以找到个好一点的例子。

下面这里我们有一个 <section>,这就是这个网页的 Hero Section

实际上,当你访问网站时最先看到的这个 <section>,就是所谓的 Hero Section 。网页上所有模块都是彼此关联的,它们彼此都与这个标题息息相关,这也是开门见山介绍他们公司或产品的一种方式。

您所看到的这个文本和这个图形,这一切都是具有相同的语义目的,这也就是为什么它应该是一个 <section> 而不仅仅是一个 div。所以倘若它们彼此间不相关,并且您只是需要某种元素用于布局目的,或出于风格目的,您才会选择使用 div

然后我们往下看,他们再次使用了一个 <section>。这实际上只是一堆图像,代表使用的公司类型。这就像他们的凭证,并且因为这里的每个图像都属于相同的语义目的,所以它们都应该位于 <section> 中而非 div

<section> 意味着其中的内容彼此相关,因此它具有相同的语义目的。

那有人可能会想问,为什么不在这里使用 <article>

<article> 意味着我应该能够将其从这里取出些什么,将其放置在其他地方。但我现在并不会想要把这些图像从这里拿出来,或把它放到不同网站的其他地方。它现在只是个图像集合,不具备其它意义。这两者含义不同,因此在这不应当使用 <article> 而是用 <section>

我们继续下去,看看下个 <section>,它与他们的产品概述有关。

再往下看,这是一个 <section>,下去又是另一个 <section>

这网页就是一个关于正确使用 <section><div> 的典型示例,您可以很容易的在这些 Landing Page 上识别它们。

✒️ 实际网站分析 - developer.mozilla.org

现在让我们看下一个 mdn 网站 - developer.mozilla.org

如果您访问他们的随便一篇文章,您可以看到这有个内容,在顶部有一些标题,然后还有这种侧边栏。

让我们看看他们是如何编写 HTML 的。

在这里我们可以看到这是 <main>。所以你的页面上只会有一个主标签,因为它是页面上最主要的内容。

而且他们在这个侧边栏上使用了 <aside>,所以您会了解到 <aside> 基本上不应该出现在 <main> 中,因为它并不是真正的主导内容的一部分。

然后,在 <main> 中我们看到一个 <article>。在这里他们选择了 <article> 而不是 <section>,证明了 <article> 实际上更像是还具有额外的要求。

<section> 只是意味着其中的所有内容都彼此相关,或者它具有相同的语义目的。但我现在需要能够把它从这里拿出来放在其他地方,且它仍然具有意义,这里的情况就是这样。

您可以在这里取出所有文本,可以把它放到其它地方,但它仍然保有相同的本质。

举另一个例子,如果他们在这里发布了某种职位征聘,他们可以将职位发布从这个网站上删除,可以把它放在其它地方,例如放在一个职位网站上,它仍然有意义。放在任何其他地方网站,文章标签是独立的,文章可以被诠释,您可以阅读它,您可以使用它,能清楚理解它的目的性是什么,它又代表什么。

但您未来在大多数项目中可能不会经常使用它,您还是会使用 <section> 和一堆 <div>

而后,他们在这里也有一个导航栏。

这挺有趣的,他们在这使用了 <aside>,还再次使用了 <nav>。这是正确的,也就是说您不仅会在 <header> 中看到导航栏,有时还会在标题之外看到导航栏。

✒️ 结语

大概就讲到这。

怎么说呢,有时候这篇文章打一打就会感觉词穷。因为有些资料是从国外网站整理的,边学边写,当我要用中文表达出来时就可能会卡住,不知道要怎么翻译,这就挺尴尬的。

大家应该还看得懂吧,感觉哪些怪怪的可以在下方评论,我看到后会尽快修正,也感谢各位读者的指教。

相关推荐
水银嘻嘻23 分钟前
12 web 自动化之基于关键字+数据驱动-反射自动化框架搭建
运维·前端·自动化
小嘟嚷ovo1 小时前
h5,原生html,echarts关系网实现
前端·html·echarts
十一吖i1 小时前
Vue3项目使用ElDrawer后select方法不生效
前端
只可远观1 小时前
Flutter目录结构介绍、入口、Widget、Center组件、Text组件、MaterialApp组件、Scaffold组件
前端·flutter
周胡杰1 小时前
组件导航 (HMRouter)+flutter项目搭建-混合开发+分栏效果
前端·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
敲代码的小吉米2 小时前
前端上传el-upload、原生input本地文件pdf格式(纯前端预览本地文件不走后端接口)
前端·javascript·pdf·状态模式
是千千千熠啊2 小时前
vue使用Fabric和pdfjs完成合同签章及批注
前端·vue.js
九月TTS2 小时前
TTS-Web-Vue系列:组件逻辑分离与模块化重构
前端·vue.js·重构
我是大头鸟3 小时前
SpringMVC 内容协商处理
前端
Humbunklung3 小时前
Visual Studio 2022 中添加“高级保存选项”及解决编码问题
前端·c++·webview·visual studio