初探 · HTML5語義化
碎碎念
這兩天正好看到一個經典面試題『HTML語義化是什麼意思?』,心想正好在梳理HTML知識,為了不心虛,遂想寫一篇部落格來嘗試說清楚語義化。
隨著資料越看越多,最後終於翻牆看到W3C對標籤的定義,越發覺得人類的語言是一門藝術,HTML5推動下的標籤語義化也是在適應越來越多的具體使用場景,換句話說,標籤語義化協助下的內容語義化表達,會推動自然語言處理,AI智慧,進而提高機器處理分析WEB的能力。
上述純屬扯淡,以下的內容也均為學習過程中的個人理解,若有誤解,懇請指出,謝謝!
什麼是語義化
網路上關於語義化的定義和說明很長很雜,看過了很多答案後,我嘗試一句話說清什麼是語義化。。。
語義化,
指對文字內容的結構化(內容語義化),選擇合乎語義的標籤(程式碼語義化),便於開發者閱讀,維護和寫出更優雅的程式碼的同時,讓瀏覽器的爬蟲和輔助技術更好的解析。
為什麼要關注語義化
透過使用恰當語義的HTML標籤,讓頁面具有良好的結構與含義,可以有效提高:
可訪問性:幫助輔助技術更好的閱讀和轉譯你的網頁,利於無障礙閱讀;
可檢索性:有了良好的結構和語義,可以提高搜尋引擎的有效爬取,提高網站流量;
國際化:全球只有13%的人口是英語母語使用者,因此通用的語義化標籤可以讓各國開發者更容易弄懂你網頁的結構;
互用性:減少網頁間的差異性,幫助其他開發者瞭解你網頁的結構,方便後期開發和維護;
被濫用的語義化標籤
以下是一些廣泛被濫用的語義化標籤:
blockquote
:一些人透過使用
標籤使文字達到縮排的目的,因為引用預設會進行文字縮排。如果你僅僅是想使文字達到縮排目的,而文字自身並非引用,那麼就用
CSS margin
來代替;
p
:一些開發者用
 ;
來為標籤自檢增加額外的空白段落,這裡應該使用
CSS margin/padding
來實現;
ul
:一些開發者往
中新增文字來達到文字縮排的目的,這種做法即不符合語義化要求,同樣也是非法的HTML實踐。
標籤中只能有
標籤。
~
:該標籤可以使文字字型變大,變粗,但如果文字並非是標題,應該使用CSS font-weight font-size;
總結:其實上面四個例子都是為了說明一點,
用正確的標籤做正確的事
。
語義化標籤介紹
在HTML5出來之前,我們習慣於用`div
來表示頁面的章節或者不同模組,但是
`div`本身是沒有語義的。但是現在,HTML5中加入了一些語義化標籤,來更清晰的表達文件結構。
一個沒有用div標籤佈局的頁面
如上圖,這個頁面結構中摒棄了所有div元素,取而代之的是
HTML5語義化標籤
(用哪些標籤取決於你的設計目的)。
同樣,W3C制定了這些語義化標籤,不可能完全符合我們的設計目標。我們的目標是為了能夠讓開發者或是爬蟲讀懂各個模組的語義化內容,因此,div作為一個沒有任何語義,僅僅是用來構建結構的元素,是最適合做容器的標籤。
下面就讓我們把HTML5語義化標籤過一遍:
定義文章的介紹資訊:標題,logo,slogan;包裹目錄部分,搜尋框,一個nav或者任何相關的logo;
一個頁面中
的個數沒有限制,可以為每個內容塊新增一個header; 定義文章導航欄,連結等;
nav一般和u、li配合做導航欄;
定義文章的主要內容
main標籤在一份文件中是唯一的,其後代元素常常包括`
`; 定義文件中可以脫離其他部分,一份獨立的內容,通常帶有標題,當article內嵌article時,裡外層的內容應該是相關的,比如一篇微博和它的評論;
與article的差別在於,它是整體的一部分,或者是文章的一節,一般來說section也會帶有標題;
側邊欄(與article並列存在)或者嵌入內容(在article內),通常認為是獨立拆分出來而不受整體影響的一部分,作為主要內容的附屬資訊,如索引,詞條列表,或者頁面及站點的附屬資訊,如廣告,作者資料介紹等;
頁尾,通常包含作者、版權資訊或者相關連結等;
極易混淆的語義化標籤
下面這兩組元素,雖然樣式上極其相似,但是其在語義上各有側重,弄明白他們的區別,可以幫你摸清HTML5語義化的思路。。。
表示一段普通文字中,因為某種原因和正常文字不同,例如專業術語、外語短語或排版用的文字,其通常表現為斜體,他的出現不會改變語義;
根據W3C對i標籤的定義:
Terms in languages different from the main text should be annotated with
lang
attributes (or, in XML,
lang
attributes in the XML namespace)。
一段文字中如果有插入語言不同的專業術語,需要在
標籤中加上
屬性作為註解,例子如下:
There is a certain je ne sais quoi in the air。
是對
je ne sais quoi(習語,表達妙不可言的意思)
的註解,表示包含的術語語種為法語;
表達對文字內容的強調;
其強調位置的不同往往帶來語義的變化(可以理解為英語口語中針對一句話中不同位置的重度,影響聽話人的理解);
在視覺效果上也是斜體的效果;
注意:
The
em
element also isn’t intended to convey importance; for that purpose, the
strong
element is more appropriate。
不適用於需要傳達重要性的內容,傳達重要性的語義應該使用
;
The
em
element isn’t a generic “italics” element。 Sometimes, text is intended to stand out from the rest of the paragraph, as if it was in a different mood or voice。 For this, the
i
element is more appropriate。
標籤本質上並不是讓包含文字變為斜體字。有時,作者只是想讓部分文字在段落/句子中脫穎而出,或是在不同語氣或者語態上,這時要用
;
b表示樣式上的粗體;
其包含文字,不具備強調重要性的作用,也不影響語態和語氣,僅僅是從樣式上讓包含
文字特殊化
;
常用語關鍵字,文字驅動軟體中的可執行語句或者一篇文章的導語,說明書中的產品/功能名稱等;
strong表示
強調
帶有著重意味,意在傳達內容的
重要性(需要儘快被看到)、嚴重性或者緊急性
,;
總結:
適用於在一段文字中突出重點,強調位置的不同往往會影響語義,而如果僅僅在語態或者語氣上為了突出某個文字,應該使用
;
在使用
時,W3C鼓勵開發者最好檢查下是否有更合適的標籤可替代,例如,上述的
,來突出重點,或是
,用來定義一個術語;
如果為了突出文字的重要性,緊急性,嚴重性應該使用
;
W3C明確說明, 元素應當是在其他標籤都不合適的情況下最後一個考慮使用的標籤,言外之意,官方並不推薦使用b標籤,
文件中的一些嵌入式內容,比如引用的圖片,插圖,表格,程式碼段等,可以作為獨立的單元,當這部分轉移到附錄中或者其他頁面時不會影響到主體,這樣的元素都可以放在`
img元素最好附帶alt資訊,即對圖片進行文字說明,當影象無法檢視時會顯示這段文字描述;
table元素現在有一系列語義化結構標籤
: 表格的標題,跳脫於表格之外;
:表格的表頭行,定義表格的表頭內容;
:表格的主體部分,表格的主體部分;
:表格的腳註部分,tfoot要和thead,tbody結合起來使用;