今天就用 HTML5 的新語意標籤

Emily P. Lewis | 2010 年 11 月 17 日

 

HTML5,每個人都在談論它。像是我的朋友突然丟來動人的 <audio>drum kit,不然就是愛談八卦的行銷副總裁,不知在哪讀到 Flash 將亡,HTML 才是明日之星的消息。不過每個人都在談論它,不代表每個人都懂它。.

所以,讓我們先來面對它:什麼是 HTML5?

HTML5 簡史

從最基本來說,HTML5 就是最新的網頁語言。我們從 HTML 2.0 開始(沒聽錯,並沒有 1.0 的版本)然後 1999 年後就停在 HTML 4.01 這個穩定版本。之後語法更為嚴謹,立基於 XML 規則之上,XHTML 1.0 登場。

XHTML 2.0 出現過一段短短時間,但以 XML 為基礎的網頁,逐漸偏離了開發人員和設計師的實際工作。之後經過各方力量的混戰和騷動,終於制定出新規格,HTML5 於焉誕生。大概過程就是這樣…目前已經進入草案階段。不過在 2012 年之前,它還不會成為「候選建議版本」。

日期無關緊要

是的,2012 還有一年多。不過沒像聽起來那麼久,不是嗎?時間當然不能當作藉口,可以拿來逃避理解 HTML5 所能提供給你(以及你的網站和客戶)的東西…不論是現在或未來。

而且別忘了,瀏覽器廠商不會依賴標準機構。如果現在所有的瀏覽器都加入或增加 HTML5 支援的話,W3C 制訂官方規格實際日期其實也就無關緊要。也就是說,HTML5 應該列在你的守備範圍了。

混搭的語言

HTML5 比起前幾個版本更具雄心。它在發展時不只把設計師和開發人員考慮在內,甚至把瀏覽器廠商和其他導入方案都納入考量。

它不僅是內容的標記語言。它也是支援多媒體的語言,引入了新的元素像是 <canvas>、<audio> 和  <video> 等。它提供了強化互動性的 <form>,不需要 JavaScript 介入即可運作。它也提供應用程式的 Web 儲存機制。

在此同時,HTML5 擁抱過去。它的語法是相容於之前的 HTML 版本。想要程式鬆散、自由、不受拘束的標籤嵌套、屬性引號用法、和封閉的標籤?儘管去用。如果你像我一樣,偏好 XHTML 1.0 結構的語法,也沒有東西會擋住你。

然而,雖然 HTML5 沒有告訴你該如何寫你的標記,但它的確建議你仔細想想你正在想的是什麼樣的標記。HTML5 比起前版更具語意,對我們這些 POSH 愛好者,給了我們更龐大、精良的彈藥庫。

有些元素已經被視為過時,有些被重新定義,也有些新的語意元素被導入。所有這些都給標記作者們更有力量去描述內容,而且也不限於給人們使用,對那些搜尋引擎、瀏覽器、螢幕閱讀器和行動裝置也一樣適用。

我極愛 Molly Holzschlag 在 Twitter 上的形容

HTML5 是混搭語言。它匯集了最好的標記,充滿了前瞻思考的野心來構思未來的語意和互動性的網頁。此外,它具備靈活的方法,企圖同時滿足設計師、開發人員和實作語法的人今日所需,以及將來可能要做的事。

從結構開始

最好開始 HTML5 的方法(就我的意見來說,也是最簡單的)就是使用那些描述頁面內容結構的新語意元素:

  • <section> 用在可以依主題分組的內容。<section> 可以有一個 <header>,以及一個 <footer>。它的觀念是在 <section> 底下的內容都是相關的。
  • <header> 通常包含頁面的標題或是 <section> 分組的標題,雖然它也可以包含其他的補充資訊,像是 logo 和導覽輔助等。注意我提到頁面或 <section>,這意味著頁面中可以有多個 <header>。
  • <footer> 放置有關於頁面或 <section> 的資訊,像是作者是誰,連結到相關資訊和版權宣告等。此外,和 <header> 一樣,一個頁面可以有多個 <footer>。
  • <nav> 是用來放置頁面的主要導覽連結。它不是必要的,而 <nav> 通常置於 <header> 之中,以定義而言,用來放置導覽資訊。
  • <article> 用來放置內容本身,而且是頁面中能獨立運用的一部分,例如像部落格的文章本體。<article> 相似於 <section>,兩者都包含相關的內容。決定你的內容該使用哪個元素的最佳法則,就是這個內容是否適合提供訂閱。如果這個內容可以提供 Atom 或 RSS 來訂閱,那麼可能最適合的元素就是 <article> 。
  • <aside> 指的是頁面的部分區塊,依靠在內容旁邊,但和內容是分開的,像是邊欄或是拉出來的引言。決定是否適用 <aside> 的好方法,是檢查它對主要的內容是否為重要成份。如果可以移除而不影響到理解主要內容,那麼就適合使用 <aside> 。

Doctype 變簡單

在你可以使用這些新元素之前,你需要先宣告 HTML5 的 doctype:

<!DOCTYPE html>

沒開玩笑,真的就是這樣。

我不記得上一次我實際打出 DOCTYPE 是什麼時候。這工作總是用剪下、貼上完成。我永遠也記不起來。不過這將不再是問題,HTML5 的語法就是如此簡單。

更好的地方是:這個 doctype 能在所有你需要支援的瀏覽器上運作…是的,即使是 IE6。

簡單的結構

現在你知道了 doctype,讓我們看看那些新的語意元素。不過首先,讓我們來思考一下內容。記住,HTML5 語意元素(以及 POSH,一般而言)的重點是描述內容。為了讓這工作更具效率,在你動手寫標記之前,容我大膽地說,不僅要知道你的內容,更要理解它

內容

讓我們專注在一個虛擬律師網站的首頁。它將具備:

  • Logo
  • 律師名稱
  • 導覽列
  • 歡迎訊息
  • 服務特色
  • 法律資源列表
  • 版權和法律宣告

在 Web 瀏覽器上,這個首頁的結構會像這樣:

HTML5

既然 HTML5 針對內容要更加深思熟慮,在開始寫作標記之前,我喜歡加上一個額外的「規劃」階段。在這裡,我決定哪個 HTML5 的語意元素會對應到我的內容:

內容 相關的 HTML5 元素
Logo <header>
律師名稱 <header>
導覽列 <nav>
歡迎訊息 <section><article>
服務特色 <section><article>
法律資源列表 <aside>
版權和法律宣告 <footer>

這些大多數都會放在我的腦子裡,不過如果你想寫下來也無妨。重點是花時間想一下

另外,這個對應也不是最終的結果,不過它提供了我初步採用的初始元素。套用到圖1 的網頁外觀,你可以看到 HTML5 如何協助定義內容結構:

現在,讓我們寫下標記:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>The Law Office of Jimbob Smith</title>                   
</head> 
 
<body> 
    <header>
        <a href="http://jimboblegal.com">
            <h1>The Law Office of Jimbob Smith</h1> 
            <img src="logo.png" alt="Jimbob Legal">
        </a>
        
        <nav>
            <ul>  
                <li><a href="/News/">News</a></li> 
                <li><a href="/Services/">Services</a></li> 
                <li><a href="/Resources/">Resources</a></li> 
                <li><a href="/About/">About</a></li> 
            </ul>
        </nav>
    </header>
    
    <section>
        <article>
            <h2>Welcome</h2>
            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra non, semper suscipit, posuere a, pede.</p>
        </article>
        
        <article> 
            <h2>Services &amp; Expertise</h2>
            <p>Donec nec justo eget felis facilisis fermentum. Aliquam porttitor mauris sit amet orci. Aenean dignissim pellentesque felis.</p> 
        &lt;p&gt;Morbi in sem quis dui placerat ornare. Pellentesque odio nisi, euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consequat.&lt;/p&gt;
        
        &lt;p&gt;&lt;a href=&quot;/Services/&quot;&gt;Learn more&lt;/a&gt;&lt;/p&gt;
    &lt;/article&gt;
&lt;/section&gt;

&lt;aside&gt;
    &lt;h2&gt;Legal Links&lt;/h2&gt; 

    &lt;ul&gt; 
        &lt;li&gt;&lt;a href=&quot;http://dc.com&quot;&gt;District Courthouse&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://da.com&quot;&gt;District Attorney&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://la.com&quot;&gt;Legal Advocates&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    
    &lt;p&gt;&lt;a href=&quot;/Resources/&quot;&gt;See all&lt;/a&gt;&lt;/p&gt; 
&lt;/aside&gt;

&lt;footer&gt;
    &lt;p&gt;This is an attorney advertisement, not legal advice. Please do not share information, through this site or otherwise, that you wish to keep confidential.&lt;/p&gt; 
    &lt;p&gt;Copyright &amp;copy; 2010 Jimbob Legal. All rights reserved.&lt;/p&gt;
&lt;/footer&gt; 

</body> </html>

最後,記得作一下驗證:

<div> 仍有發揮空間

當你擁有這些嶄新的元素可以使用時,不代表非用它們不可。

專注在內容上。

假如你沒有合適的內容來使用 <footer>,就不要只是為了套用樣式而使用它。如果只為了展現效果而使用 <section> 或 <article>,就違背了使用這些語意元素的重點。你仍然可以(也應該)使用 <div> 來處理這些視覺展用途。我只會提醒你小心 div 狂熱

處理 IE9 以下版本

現在主流瀏覽器的目前版本都允許你使用(以及套用樣式)這些新的語意元素。Firefox、Chrome、Safari、Opera 和 IE 9。但是如果無法和早期版本的 IE 相容,就無法成為我們設計師和開發人員會想了解與喜歡的網頁。

幸運的是,由於有 html5shim 這個外掛就變得容易多了,它提供了向下相容較舊瀏覽器的功能。你所需要的只是將這個腳本程式放在 <head> 區塊,使用條件式註解來鎖定舊版 IE:

<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

至於那些痛恨 IE 的人,不要把這件事加到 IE 很爛的清單中。較舊的 Gecko 瀏覽器像是 Firefox 2 和 Camino 1,對於這些新的語意元素也有相同的識別問題。放下你的諷刺,使用這個外掛和解法,並且建議你的使用者和客戶升級,甚至升到IE 9。

此外,就像我說過,HTML5 的 doctype 可以在所有瀏覽器中正常運作,即使是沒有加上外掛的 IE6。

如你所願

現在,也許你還沒準備好完全擁抱這些的語意元素。也許你有許多 IE6 的使用者,而且不能仰賴 JavaScript 相助。也許你只是想要有更多的時間來測試。也許你有一個龐大的網站,不可能去重構標記。無論理由是什麼,你還是可以現在起就使用,無論是新站或是既存的網站。

還記得 HTML5 的向後相容性嗎?你只要簡單地修改 doctype,不用做別的事,就可以獲得好處。只要單單改變成 <!DOCTYPE html>,你的頁面就是 HTML5。

以既有網站來說,這個簡單的改變,可以確保你既有的標記仍然可以正常運作,同時你也可以在需要時加入 HTML5 元素。向 HTML5 前進並不需要翻修整個網站的標記。

另一個擁抱 HTML5 而無需採用新語意元素的方法,是調整你的 class/ID 命名規範來對應新元素。舉例來說,在虛擬律師網站中,取代 <section> 內容的作法,可以是:

<div id=”section>
    <div class=”article>
        <h2>Welcome</h2>
        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra non, semper suscipit, posuere a, pede.</p>
    </div>
        
    <div class=”article”> 
        <h2>Services &amp; Expertise</h2>
        <h3>Criminal Case Evaluation</h3> 
        <p>Donec nec justo eget felis facilisis fermentum. Aliquam porttitor mauris sit amet orci. Aenean dignissim pellentesque felis.</p> 
    &lt;h3&gt;Indigent Defense&lt;/h3&gt; 
    &lt;p&gt;Morbi in sem quis dui placerat ornare. Pellentesque odio nisi, euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consequat.&lt;/p&gt;
        
    &lt;p&gt;&lt;a href=&quot;/Services/&quot;&gt;Learn more&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

</div>

使用 HTML5 或不用 HTML5?

儘管它還在草案階段,並且在舊瀏覽器上有些問題,但是過去 6 個月以來,我經手的每一個專案,都已經使用 HTML5。

如果是我有完全自主的專案,我會導入 HTML5 語意標記(應用充當 ARIA 角色以及加上 <form> 的強化機制)。如果是一些較受限制的客戶專案,我會採用較消極的方法來使用 HTML5 的 doctype 和命運規範。

為什麼?因為我大推 HTML5 的方向。語意對我而言相當重要,尤其是語意的標記。而且我也欣賞它提供給作者在語法和相後相容的靈活性。

不過,還有另外一個理由…

強化的連結語法

在 HTML5,你可以將 區塊等級的元素用連結 (<a>) 包起來。在 HTML 4.01 或 XHMTL 1.0,你也許有這樣的語法:

<h1><a href="http://jimboblegal.com">The Law Office of Jimbob Smith</a></h1> 

<a href=”http://jimboblegal.com”><img src="logo.png" alt="Jimbob Legal"></a>

但是,就像前面的例子,在 HTML5 可以讓你將連結當成父元素運用:

<a href="http://jimboblegal.com">
<h1>The Law Office of Jimbob Smith</h1> 
    <img src="logo.png" alt="Jimbob Legal">
</a>

當然,這只是語法上的一個小變化,但是威力強大。而對我而言,這就構成立刻使用 HTML5 的 doctype 的理由。

不再有藉口

在這篇文章中我已完成我的工作,你沒有任何藉口不去試試 HTML5 … 或多或少應該讓你覺得比較容易接受。所以,去試試吧。我還要給你我最愛的一些資源,幫助你繼續前進:

CommentsRSS

About the Author

Emily Lewis is the author of Microformats Made Simple and an independent web designer. She has been working as a web professional since 1998, dabbling in project management and programming until she realized her true loves (HTML and CSS) and became a front-end developer.

Emily is a web geek of the "standardista" variety, and gets excited about things like usability, semantics, microformats, valid markup and CSS, and accessibility.

In addition to loving all things web, Emily is passionate about community building and knowledge sharing. She is the co-creator and co-manager of Webuquerque, the New Mexico Adobe User Group for web practitioners.

Emily also writes about web design (amongst a range of other topics) on A Blog Not Limited, as well as for industry publications including MIX Online and .net magazine.

Emily speaks about web standards, markup, CSS, accessibility and microformats for various groups and conferences, including the University of New Mexico, the New Mexico Technology Council, InterLab, Environments for Humans and Voices That Matter.

Find Emily on:

More from Emily:

 

Articles