Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

我的HTML会说话——从实用出发,谈谈HTML的语义化 #3

Open
Array-Huang opened this issue Nov 15, 2019 · 0 comments
Open

Comments

@Array-Huang
Copy link
Owner

语义化HTML是什么?有什么意义?

所谓语义化HTML,就是从代码层次表达程序员的想法、思路,同时描绘出网站页面的结构:

  1. 与同为人类的程序员沟通,帮助程序员快速掌握当前代码。这一点其实是可以通过注释来实现的,不过用上语义化HTML多多少少可以省点注释,哈哈。
  2. 与同为代码构筑的系统(例如残疾人士阅读器以及搜索引擎爬虫等)沟通,帮助其快速、准确达到目的。由于这类系统与人类的智能相比起来实在有限,因此需要协定好通过什么样的方式来进行沟通,而W3C的决议就是语义化HTML的标准了。

最近在恶补前端基础时,碰到这一个知识点,发现市面上的资料大多杂乱,而且往往只能意会而不能言传,很难找到其中有什么实用的价值,因此特写此文,不妄求全面剖析,只求实用至上。

文档章节类HTML标签

文档章节类HTML标签能体现网页的结构,因此也拥有最多的语义化HTML标签。

<article> / <section>

这俩标签的语义比较相像,都是表示文档中的一个独立区域(独立单元),其中还可以从结构上拆分成<header> / <footer>等部分。
这俩标签比较起来的话,<article><section>要大一级:

  1. <article>中可以包含<section>,举个例子:一篇博客文章的下方或侧方一般会有“相关文章”的列表,那么,这一整块HTML就可以用<article>给包起来,而“相关文章”的那一小块HTML则可以用section来表示;再举个例子,比如说文章的“版权信息”,也可以用section来表示。
  2. <article>中可包含<article>,比如说:一篇文章以及这篇文章的用户评论,整块HTML可以用<article>来包起来,而用户评论从逻辑分析起来也是从属于这篇文章的,因此也可以用<article>包起来并归到文章的<article>之下。
  3. <section>之下不能再放<section>了,这从侧面表示这是最小一级的独立单元标签。
  4. <article>一般用于“详细内容”,因此一般一个页面只含有一个顶级的<article>。而相反,<section>的用途更广泛一些,除却“详细内容”外都可以用<section>来进行包裹,比如说:网站首页上,可以利用<section>来展示不同分类/栏目的文章列表。

<header> / <footer>

这俩标签性质比较类似,所以放到一起来比较:一个放头部,一个放底部。
乍一看,觉得这俩标签就是网页的页头(一般包含网站LOGO、BANNER、顶级导航等)和页尾(网站本身的信息,包括版权信息、联系方式等),但实际上这俩标签的应用范围远不止于此,完全可以作为其它独立单元(<article>/<section>/<aside>/<nav>等)中的一部分,比如说下面的这个文章栏目,红色框住的部分可以用<header>(可以考虑里面包含个<nav>),而蓝色框住的部分就可以用<footer>了。

image

又比如说一篇文章,文章的标题/作者/发布时间等信息可以使用<header>,而文章的版权信息、参考文章列表等则可以使用<footer>

<main>

既然提到<header> / <footer>,就不得不提<main>了。<main>望文生义,就是整个页面的主体部分。跟<header> / <footer>不一样,一个页面只能有一个<main>,不能放进其它独立单元里。
<main>仅包括一个页面最核心的内容,比如说一篇文章,其它旁枝末节,比如搜索栏、菜单等内容不应被包含其中。

<aside>

<aside>一般表示页面主体内容以外的侧边栏,比如上文提到的“相关文章”,又或者是“作者个人资料”,如果是这些情况的话,一般会被包含在<article>中。另外,<aside>也可以表示一些工具功能,比如说“分享文章”、“回到顶部”等功能。

<nav>

<nav>表示网站的导航,但不一定所有的导航都需要用<nav>来实现,建议仅用来实现比较重要的导航,例如网页页脚的链接列表,直接用<footer>即可。另外,每个页面可以有多个<nav>

<h1> - <h6>

<h1> - <h6>表示标题,共有6级,其中<h1>的权重最高,<h6>的权重最低,其它的则依次递减。一般来说,<h1>需要分配给网站名/LOGO,如果有设置二级域名,也可以分配给分站的网站名/LOGO。
对于搜索引擎来说,<h1> - <h3>是了解网页的重要途径,因此一定要恰当地分配,比如:给文章的标题用上<h2>,给文章中的各个小标题用上<h3>

文本级别语义HTML标签

文本级别语义HTML标签数量不少,但我认为有实用价值的不多。

<a>

<a>表示一个通向其它页面或当前页面其它位置的入口,这是一个历史悠久的语义化标签,同时也是搜索引擎的基础,想必大家都很熟悉了,因此这里不作详述。

<p>

<p>表示一个段落,这也是一个悠久的标签了。从语义上来说,我更倾向于使用<p>来表示一段纯文本,而不是利用<p>来呈现某个样式。

<em> / <strong>

这俩标签都是用来强调某个词/句,从语气上来说,<strong><em>的语气更重,也就起到更强的强调作用。
据说,这俩标签是用来在语义上取代<i><b>。那么,<em><i>,有什么不一样呢?答案是,<i>现在已经不用来表示“强调”,而仅仅只是把一些专有名词(比如人名、书名等)跟普通的字词区分开来。<b>的情况与<i>类似,也不再表示强调了,从某种程度上来说已经失去语义了,仅仅作为完成css样式的辅助标签。

<time>

<time>用来表示24小时制时间或者公历日期,若表示日期则也可包含时间和时区。对于<time>,尽量用机器能识别的时间格式,而不要用一些模糊的表达,比如说“一小时前”、“两天前”等。

组合型HTML标签

<figure>

<figure>表示一段富文本,可以是一个文章插图、一段代码、一个表格,通常搭配<figcaption>来表述这段富文本的描述/标题,当然,一个<figure>下只能有一个<figcaption>
我倒是想到了<figure>的一个典型运用,那就是瀑布流文块:

image

结构化数据

这一块在SEO领域相当重要,根据目前已经拟定好的一些规则,你可以明确地标明某页面主体的各个属性。
举个例子:一个商品的详细信息页,用普通的语义化来表示,大概只有商品的名称可以进搜索引擎的法眼;但自从有了结构化数据,可以通过某些标签及属性,指明商品的价格、供应商、实物图等内容;搜索引擎获取到该商品页的各个属性后,会在搜索结果页面直接呈现出来,另外在排名上也会有所偏重。
这方面的内容很多,建议还是参考各大搜索引擎的优化指南,毕竟各搜索引擎对这结构化数据的支持程度不一样。这里放出Google支持的结构化数据的官网:http://schema.org/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant