HTML – HTML Tags & Semantic HTML 语义化 HTML
前言
HTML tag 有 100 多个, 有些是功能形的, 非用不可, 有些是为了语义化对 screen reader 友好 (给眼睛有残缺的人也可以获取清晰的网站信息).
语义化是很重要的, 有些人写 HTML 满满都是 div, 出来的效果用眼睛看确实没有区别. 但是用 screen reader 读就完了, SEO 也 not friendly.
要记得, 网页设计和平面设计很大的不同是, 网页是需要被机器读的, 不然为什么要搞 HTML 结构 ? canvas 渲染这么快.
但也不是说要做到完美无瑕. 就类似 RWD 那样, mobile friendly, 只是 "friendly" 而已, 不是生死之交.
这篇会对它们进行分类, 巩固记忆. 我不会把 100 多个写到完, 只会写比较常用到或看到的.
资源:
参考:
W3Schools – HTML Element Reference
Stop using so many divs! An intro to semantic HTML
What is semantic HTML5? (must read)
Youtube – HTML5 Semantic Elements Tutorial
工具:
Semantic HTML5 markup inspector
W3C – Markup Validation Service 检查 HTML 结构正确. 比如 <a> 里面放 <button> 是不 valid 的.
最基本的 HTML 结构 Tag
<!DOCTYPE>
<html>
<head> = head
<meta>
<base>
<title>
<link>
<style>
<script>
<body>
介绍
!DOCTYPE > html > head + body 整体结构
<meta> 常用来写 description (SEO), og (social media), width=device-width (RWD)
<base> 是 base url
<title> 整个网站的主题 (SEO)
<link> 加载 CSS style
<style> inline CSS
<script> 加载或 inline JS
常见的 HTML Tag
<div>
<span>
<button>
<iframe>
<embed>
<template>
<noscript>
<pre>, <code>
<sup>
<hr>
介绍
<div>, <span> 是完全没有语义的, <div> 是 block element 的代表, <span> 是 inline element 的代表.
<iframe> 用来嵌套其它网站
<embed> 以前用来嵌套 flash, 插件等, 现在几乎废弃了, 改用 <iframe>, <video>, <audio>, <picture>.
<template> template 不会被渲染, 它是给 JS 调用, 做动态 append 用的.
<noscript> 是当 browser 不支持 / disabled JS 的时候会显示的.
<pre>, <code> 用来插入代码. 比如写技术的文章, 通常要 show 一些 code, 就会用到 <pre> 和 <code>. 参考: stackoverflow
<sup> 用来做小写的数字, 比如 cm² 的 "2" 就可以用 <sup>2</sup> 来实现.
<hr> 是画直线, 通常用在隔离段落, 有点像 Angular Material 的 divider.
Semantic HTML Tag (结构类)
<header>
<nav>
<main>
<section>
<acticle>
<aside>
<footer>
介绍
<header> 除了用在大 body, 也可以用在 section 里面, 通常 header 里面就包 <h1>...<h6>
<nav> 里面通常配搭 ul > li > a
<main> 一个 page 应该只有一个 main
<acticle> 是一个独立的内容, 比如 product, post, 可以用 section 作为 product list 然后里面多个 article
<aside> 可以放到 section, article, body 里, 表示和主题有关的其它内容, 比如 relate posts, products 等等.
Semantic HTML Tag (细节类)
<address>
<blockquote>
<q> = quote
<cite>
<details>
<summary>
<figure>
<figcaption>
<time>
<small>
介绍
<address> 它和 p 用法一样, 只是里面写的 should be 是个地址 (email address 也算地址), 它会自带斜体效果.
<blockquote>, <q>, <cite> 用于引用其它网页的某段内容
例子:
<blockquote cite="http://stackoverflow.com">
<p>Type HTML in the textarea above, <q>and it will magically
appear</q> in the frame below.</p>
</blockquote>
<p>
<cite><a href="http://stackoverflow.com">reference url</a></cite>
</p>
效果:
有点 p > span 的用法, <q> 会加上引号.
<details>, <summary> 用于隐藏细节, details > summary + p + ul > li, <summary> 的内容会显示, <p> + ul > li 的内容会隐藏, 只有通过点击它才会被 expand 显示出来.
效果:
如果不喜欢 default 的功能, 可以逐个关闭, 参考: stackoverflow – Disable details/summary
在 HTML details 添加 open attribute, 这样默认就会 expand.
<details open>
<summary>Lorem ipsum dolor sit amet.</summary>
<p>Lorem ipsum dolor sit amet.</p>
<ul>
<li>Lorem ipsum dolor sit amet.</li>
</ul>
<p>Lorem ipsum dolor sit amet.</p>
</details>
CSS Style, 把默认的 style 清除
details > summary:first-of-type {
display: block;
list-style: none;
counter-increment: none;
}
JS, 阻止默认点击时间
document.querySelectorAll('details')!.forEach(detail => {
detail.addEventListener('click', e => {
e.preventDefault();
});
});
<figure>, <figcaption> figure > img + figcaption 通常这样搭配来用, 针对 1 张图, 视频, 有一个显示标题, 这种结构就可以用 figure.
<time> 用来表示时间, 日期, 请参考 MDN 具体用法.
<small> small 通常会用在 footer 的 copywrite
Semantic HTML 一般用法
网页整体架构
header + main + footer 作为大框
nav 通常在 header 和 main 里头
article 作为这一页的主内容区
article 内又可以在细分多个 section 和 aside (这个 aside 是和主内容有强关联的)
aside 如果和这一页没有太多关联, 则排除在主内容 article 之外.
Breadcrumb 面包屑
参考:
Exploring Markup for Breadcrumbs
几个特点:
1. 没有 wrap nav, 视乎 breadcrumb != nav
2. 通常是用 ol, 但也有用 ul 的, 个人选择 ol
3. 最后一个不是 link
4. / 分割符是用 element 做的, 而不是 ::before, 从第二个开始有. 也有模板是用 ::before, 但个人倾向用 element 做.
Semantic HTML Tag 常见问题
1. div container vs section
做排版经常会有 container > row > col 概念, 不管是 Flex 还是 Grid. 是否用 div 还是把 style 写在 section or article ?
它的关键是你得分开看到 style 和 element (语义). 如果你想做一些排版 (比如 Figma 的 Frame), 那么你用 div 是 ok 的, 而不是为了要排版然后硬硬用一个 section.
但是如果它本来就是一个 section, 你用 section 是想分组, 在语义上做归类, 那么你用 section 加 style 是 ok 的.
当然有些人会统一把排版全部用 div 来做. 我个人觉得这也没有什么不好.
参考:
Stop using so many divs! An intro to semantic HTML section 的部分
What is semantic HTML5? HTML5 Semantic Tags Structure 的部分
2. sidebar vs aside
看这篇, sidebar != aside.
sidebar 是一个 design, aside 是一个表达. sidebar 里面可以有 nav + aside (for relate products/news).
3..section vs article
有时候傻傻分不清, 但不需要纠结太多, 它没有 100% 的答案. 语义上讲 section 比较抽象, 它就是一个部分一个部分,
article 是文章, 感觉比较是一个整体, 也就是它们说的 self-contained.
4. home page 许多内容是 section 还是 article ?
参考: Learn When to Use Section, Article, Nav & Aside in HTML5 Websites
因为 home page 大部分是 summary of 其它 page, 所以用 "部分" 来表达我觉得是对的. 用 article 也不是不能接受啦.
5. main 的范围
它的意思是这样:
6. heading 1 – 6 是否和 style 绑定?
有些网站会直接把 style apply 到 h1 – h6, 虽然理想情况下是逻辑的, 但是最好还是分开它们.
h1 仅仅用来表达权重, 让 SEO 它们知道, 设计上另外用 style 来做.
m3.material.io 就是一个例子.
一个 h1, 一个 h2, 但是 style 都是 display-xxl 64px.
再一个例子:
左右 size 一样大, 但左边明显不是 heading. 所以不可以因为要它的 style 就把它写成 heading. 这样就乱套了.
小结
如果怕错就用简单的结构就好了, 要不然就去看看 apple.com, microsoft.com, tesla.com 我一直觉得它们的 HTML 写的挺好的 (SEO friendly)
Text Tag
<h1>...<h6> = heading
<p> = paragraph
<br>
<a> = anchor
<b> = bold
<i> = italic
<strong>
<del> = delete
<mark>
<abbr> = abbreviation
<marquee>
介绍
<br> 是在 <p> 里面换行 new line
<a> 是链接
它里面不可以嵌套 button 哦. 参考: stackoverflow – Can I nest a <button> element inside an <a> using HTML5?
那可以嵌套什么呢?
<b> 是 text bold
<i> 是 italic 斜体
<strong> 是 important text
<del> 删除线 <-- 看到效果吗?
<mark> 高亮
<abbr> 表示缩写字, acronym 也是用这个
<marquee> 是跑马灯
List Tag
<ul> = unordered list
<li> = list item
<ol> = ordered list
<dl> = description list
<dt> = description term (key)
<dd> = description (value)
介绍
list 的内容一般上都是 text, 如果是 list of product, 有图片, 信息, add to cart button 这种通常不用 list, 而是用 section 配多个 article.
Table Tag
<table>
<thead> = table header
<th> = table heading
<tbody> = table body
<tr> = table row
<td> = table data
<tfoot> = table footer
<caption> = table title
特色
<th> 会自带 bold style 粗体
<thead> 和 <tfoot> 在打印的时候, 会有 sticky 的效果, 每一页会自动重复.
Media Tag
<img> = image
<map>
<area>
<picture>
<svg>
<i> = italic
<audio>
<video>
<source>
<canvas>
介绍
<map>, <area> 是放在 <img> 里面的, 让 img 内容某些部分可以被交互 (比如点击), 参考: W3schools – HTML <map> Tag
<picture> 是 <img> 的加强版本, 可以看这篇: Responsive Image 响应式图片 (完整版)
<canvas> 是用 JS 画画
<source> 用在 <picture>, <audio>, <video> 里
<svg> 通常 for icon
<i> 其实是 text italic 斜体, 但是 fontawesome 用 <i> 作为 icon, 参考 stackoverflow 大家的讨论. 只能说 i standard for icon 也不是不可以了解啦...
Form Tag
<form>
<fieldset>
<legend>
<label>
<input>
<textarea>
<select>
<optgroup> = option group
<option>
<progress>
<datalist>
<dialog>
介绍
<fieldset> + <legend> 用来在 form 里面对 input 分组, 长这样:
<progress> 用来显示 uploading 的进度条.
<datalist> 时用来做 input autocomplete 的
HTML5 不再支持的 Tag
这些可能看过, 但是不需要去理它了.
<tt> use CSS instead.
<strike> use <del> or <s> instead.
<noframes> -
<frameset> -
<frame> -
<font> use CSS instead.
<dir> use <ul> instead.
<center> use CSS instead.
<big> use CSS instead.
<basefont> use CSS instead.
<applet> use <embed> or <object> instead.
<acronym> use <abbr> instead.
我没有提到的 HTML Tag
<data>, <dialog>, <em>, <object>
<colgroup>, <col>, <track>
<sub>, <var>, <bdi>, <bdo>, <dfn>, <ins>, <kbd>, <meter>, <output>, <param>, <rp>, <rt>, <ruby>, <s>, <samp>, <u>, <wbr>
HTML – HTML Tags & Semantic HTML 语义化 HTML的更多相关文章
- Semantic UI 语义化设计的前端框架
UI是Web的灵魂!Semantic UI是一款语义化设计的前端框架,为攻城师而制作的可复用的开源前端框架. 特性 弃用有歧义的表述 Semantic是围绕自然交流语言而架构的,这使得开发更加直观(易 ...
- semantic versioning语义化版本号
语义化版本号 是由github创始人 Tom Preston-Werner 发起的一个关于软件版本号的命名规范,关于这个规范详细的说明可以在 官网 查看,也可访问其 GitHub项目页面 ,官网文档: ...
- Semver(语义化版本号)扫盲
最近Github 10周年在朋友圈里沸沸扬扬刷屏,小编在工作中却惊讶的发现不少同事对版本号中的beta和rc没有概念,使用 npm install package@next 时,也不清楚next代表的 ...
- Semantic UI – 完全语义化的前端界面开发框架
Semantic UI 是一个 UI 库,使前端开发更简单,更容易学习.Semantic UI 介绍了许多界面元素.在大多数情况下,只有你需要的元素建立一个自定义的构建可能是最好的. UI 组件分为四 ...
- Semantic Versioning Specification & 语义化版本
Semantic Versioning Specification & 语义化版本 Semantic Versioning Specification http://semver.org 16 ...
- [HTML知识体系]语义化标签概论
1.什么是语义化 语义化(Semantic)在HTML5中被大量提起,就是语义化标签向浏览器和开发者展示了它所包裹内容的类型与意思,可是至今我看了好多代码,HTML5新增的语义化标签的使用率还是挺低的 ...
- Html标签的语义化
为了使我们的网站更好的被搜索引擎抓取收录,更自然的获得更高的流量,网站标签的语义化就显得尤为重要.所谓标签语义化,就是指标签的含义. 为了更好的理解标签的语义化,先看下面这个例子: 1 <tab ...
- 语义化HTML:p、h1-6、q、blockquote、hr、address、code、pre、var、cite、dfn和samp
一.元素语义 p标签 W3C草案: The p element represents a paragraph.W3C specification 语义化的 <p>元素 表示:文章中的段落. ...
- AmazonOrder xml web语义化
XML Processing Modules — Python 3.7.1 documentation https://docs.python.org/3.7/library/xml.html#xml ...
- web语义化,从松散到实战
GitHub:http://liu12fei08fei.github.io/html/4semantic.html web语义化,从松散到实战 在这篇文章之前,我放弃了很多次,写关于语义化方面的文章: ...
随机推荐
- 女朋友问我 LB 是谁?
科普一下 LB(负载均衡)技术 我的编程导航网站:www.code-nav.cn 大家好,我是鱼皮. 周末在家写代码,无意中跟女朋友提了下 LB,还说 LB 好的呱呱叫. 她笑了笑,问我 LB 是谁? ...
- 写写java中的optional
当我们写代码的时候经常会碰见nullpointer,所以在很多情况下我们需要做各种非空的判断.JDK8中引入了optional,他是一个包装好的类,我们可以把对象传入optional对象中,接下来就可 ...
- stream流的概述以及idea与stream
前面自己学过一些流的概念,比如IO流,用于读写本地的数据. stream流主要是用于对集合/数组进行操作 idea现在已经很好的支持Stream流操作,在debug的时候可以很好的看到详细内容 下面以 ...
- [HTTP] HTTP 协议 Response Header 之 Content-Length、Transfer-Encoding与Content-Encoding
0 引言 在近期项目一场景中,一 Web API (响应内容:7MB - 40MB.数据项:5W-20W条)的网络传输耗时较大,短则 5s,长则高达25s,前端渲染又需要耗时 9s-60s. 在这个场 ...
- axios传递参数的使用
今天在学习elasticsearch时,遇到一个问题:项目中前端采用的是Vue2+axios,后端的接口采用Restful风格来接收: 关于Resultful风格: 1. GET(SELECT):从服 ...
- sql语句排序无效的问题
数据可视化时因为数据类型排序无效的问题:这是由于你要排序的类型是String类型的而ORDER BY 方法排序要求整数型. 这就需要在ORDER BY 后加 CAST(需要排序的字段 AS UNSIG ...
- 1、SpringMVC简介
1.1.MVC 概述 MVC:是一种软件架构的思想,将软件按照模型.视图.控制器来划分: M( Model ):模型层,指工程中的 JavaBean ,作用是处理数据: V( View ):视图层,指 ...
- 【H5】09 音频和视频
现在我们可以轻松的为一张 web 网页添加简单的图像,下一步是开始为 HTML 文档添加音频和视频的播放器. 在这篇文章当中,我们会学习到 <video> 和 <audio> ...
- 神州笔记本 win11 节能模式 供电不足 自动关机
刚刚买了一个神州笔记本没几天,用着用着就出现问题了. 本人使用电脑有个极为不好的习惯,那就是会一次性打开特别多的应用,然后不关,一直留着,这个习惯虽然不好但也是一直没有啥问题的,不过最近换了个新的笔记 ...
- 【转载】 MPP大规模并行处理架构详解
本文来自博客园,作者:五分钟学大数据 原文链接:https://www.cnblogs.com/itlz/p/14998858.html =============================== ...