梳理HTML知識:HTML5語義化
梳理HTML知識:HTML5語義化
來自專欄我愛學前端
一、啥是語義化。
維基百科是這麼說的:語義化是前端開發裡面的一個專用術語,其優點在於標籤語義化有助於構架良好的html結構,有利於搜索引擎的建立索引、抓取;另外,亦有利於頁面在不同的設備上顯示儘可能相同;此外,亦有利於構建清晰的機構,有利於團隊的開發、維護
總結起來就是,
對機器:有利於 SEO ,搜索引擎的爬蟲依賴於標籤來確定上下文和各個關鍵字的權重。
方便其他設備的解析(如屏幕閱讀器、盲人閱讀器等),利於無障礙閱讀,提高可訪問性。對人:便於團隊的開發和維護。在沒有載入 CSS 的情況下也能呈現較好的內容結構與代碼結構,易於閱讀。
最開始是由 PHP 後端寫 HTML,不會 CSS,於是就用 table 來布局。table 使用展示表格的。嚴重違反了 HTML 語義化。 後來有了專門的寫 CSS 的前端,他們會使用 DIV + CSS 布局,主要是用 float 和絕對定位布局。稍微符合了 HTML 語義化。 再後來,前端專業化,知道 HTML 的各個標籤的用法,於是會使用恰當的標籤來展示內容,而不是傻傻的全用 div,會盡量使用 h1、ul、p、main、header 等標籤
二、語義化標籤介紹
<article>
- 定義可以在任何上下文中存在的自包含內容塊。它可以有自己的頁眉,頁腳,部分......對於博客帖子列表很有用。
<article> <header> <h3> <a href="/my-blog-post">My blog post</a> </h3> </header> <section> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec viverra nec nulla vitae mollis.</p> </section> <footer> <small> Posted on <time datetime="2017-04-29T19:00">Apr 29</time> in <a href="/category/code">Code</a> </small> </footer></article>
<aside>
- 定義與主要內容相關的內容塊。通常顯示為側邊欄。
<main> <h1>My blog post</h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec viverra nec nulla vitae mollis.</p> <p>etc.</p></main><aside> <h3>About the author</h3> <p>Frontend Designer from Bordeaux, currently working for Improbable in sunny London.</p></aside>
<figure>
- 定義單個自包含元素,通常是圖像。
<figure> <img src="/images/html-reference-logo.png" alt="HTML Reference logo"></figure>
<figcaption>
- 定義<figure>的標題
<figure> <img src="/images/html-reference-logo.png" alt="HTML Reference logo"></figure>
<footer>
- 定義網頁或部分的頁腳。通常包含作者、版權信息或者相關鏈接等;
<footer> HTML Reference - A free reference to all HTML5 elements and attributes</footer>
<header>
- 定義文章的介紹信息:標題,logo,slogan;包裹目錄部分,搜索框,一個nav或者任何相關的logo;
- 一個頁面中<header>的個數沒有限制,可以為每個內容塊添加一個header;
<header> <h1>HTML Reference</h1> <nav> <a>Home</a> <a>About</a> <a>Contact</a> </nav></header>
<main>
- 定義文章的主要內容
- main標籤在一份文檔中是唯一的,其後代元素常常包括`<article>`;
<main> <h1>My blog post</h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec viverra nec nulla vitae mollis.</p> <p>etc.</p></main><aside> <h3>About the author</h3> <p>Frontend Designer from Bordeaux, currently working for Improbable in sunny London.</p></aside>
<mark>
- 定義突出顯示的文本。
We use HTML5 to write <mark>content</mark> on the Web.
<nav>
- 定義帶有導航鏈接的部分。
<nav> <a href="/">Home</a> <a href="/about">About</a> <a href="/contact">Contact</a> </nav>
<section>
- 定義網頁中的部分。比如章節。
<section> <h2>Section title</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec viverra nec nulla vitae mollis.</p></section>
time
- Defines atimeon a 24h clock.
The game starts at <time datetime="2017-04-29T19:00">19:00</time>.
<img>
- img元素最好附帶alt信息,即對圖片進行文本說明,當圖像無法查看時會顯示這段文本描述;
<table>
table元素現在有一系列語義化結構標籤
<caption>
: 表格的標題,跳脫於表格之外;
<thead>
:表格的表頭行,定義表格的表頭內容;
<tbody>
:表格的主體部分,表格的主體部分;
<tfoot>
:表格的腳註部分,tfoot要和thead,tbody結合起來使用;
<form>
<label>
標籤的用法:label標籤,為input元素定義標註,改進了表單控制項的可用性,當你點擊到label標籤時,會自動聚焦到對應控制項上,label標籤一般有兩種用法
1. label的for屬性與控制項的id相對應,比如:
<label for="username">請輸入用戶名: </label> <input type="text" id="username" name="username">
2. label中內嵌控制項,比如:
<label>請輸入用戶名<input type="text" id="username" name="username"></label>
此外,
- placeholder屬性,其值會在輸入欄位為空時顯示,並會在欄位獲得焦點時消失;
- 表單中的單選radio控制項和複選checkbox控制項以及下拉框select控制項,可以為radio, checkbox添加checked屬性以及為option添加selected屬性讓其默認選中
參考文章:初探 · HTML5語義化
https://htmlreference.io/semantic/
推薦閱讀: