譯者:西喬 來源:Smashing Magazine 作者:Jacob Gube
Module Tabs(也稱選項卡,后文中簡稱Tab,以便更符合中國設(shè)計師的日常叫法) 是一個常見的交互元素――將不同的內(nèi)容重疊放置在某一布局區(qū)塊內(nèi),重疊的內(nèi)容區(qū)里的每次只有其中一層是可見的。用戶通過鼠標(biāo)點擊或移到內(nèi)容區(qū)所對應(yīng)的標(biāo)簽上,來請求顯示該層內(nèi)容區(qū)。
(譯注:本文中指的是狹義的Tab,指在界面的某一版塊區(qū)域內(nèi)所應(yīng)用的Tab設(shè)計。實際上,絕大多數(shù)網(wǎng)站導(dǎo)航也是Tab的一種應(yīng)用。)
web界面的設(shè)計趨勢是縮短頁面屏長,降低信息的顯示密度,但同時又不能犧牲可視的信息量。在這種趨勢下,Tab 這種交互元素成為了一個越來越普遍的應(yīng)用。例如在Blog界面的設(shè)計中,人們在側(cè)邊欄使用Tab模式來顯示 ”最新更新|最熱更新“ 的文章列表以引導(dǎo)用戶快速跳轉(zhuǎn)到文章內(nèi)容頁,這種模式令頁面結(jié)構(gòu)緊湊同時在視覺上不那么喧賓奪主。
本文將討論基于web頁面或其它web應(yīng)用中如何設(shè)計Tab,同時分享一些產(chǎn)品設(shè)計原則、真實的應(yīng)用案例、教程以及一些能幫助你直接實現(xiàn)Tab應(yīng)用的免費腳本。
為了統(tǒng)一叫法以便于進(jìn)行討論,我們先花時間來認(rèn)識一下Tab元素的每個構(gòu)成部分。

當(dāng)交互設(shè)計師希望節(jié)省頁面空間;緊湊布局;且需要組合的幾種信息之間具有關(guān)聯(lián)性時,可以選擇Tab應(yīng)用。
構(gòu)成一個整體的每個元素之間都應(yīng)該具有邏輯上的關(guān)聯(lián)性。所以出現(xiàn)在同一個tab元素中的幾種信息自己應(yīng)該具有關(guān)聯(lián)特征,這樣用戶才能將整個Tab區(qū)域視為一個整體。例如在Blog中很常見的信息組合:“ 最新更新 | 最熱文章 | 評論最多 ” 。
下圖是網(wǎng)站Webdesigner Depot的側(cè)邊欄上的Tab元素:“全部文章 | 最受歡迎 | 最新更新”
Tab元素中,同一時刻,只能顯示一層內(nèi)容區(qū)。當(dāng)用戶需要對位于不同內(nèi)容區(qū)上的信息進(jìn)行對比,或者這幾種信息同時顯示會更便于用戶閱讀時,就不應(yīng)該使用Tab。否則會導(dǎo)致用戶為了比對所需的信息,而不停在標(biāo)簽之間進(jìn)行切換。
下面這個案例中,BGPatterns (一個在線制作背景圖案的網(wǎng)站)tab就用得不是地方。當(dāng)用戶想設(shè)計或修改他所制作的背景圖案時,必須反復(fù)在幾個標(biāo)簽之間進(jìn)行切換。Tab在這里妨礙了用戶的操作。如果在頁面上同時顯示這4個內(nèi)容區(qū)上的信息,可用性和友好度會更高。
另一個反面案例:網(wǎng)站 Best Web Gallery 在它側(cè)邊欄上所放置的Tab,標(biāo)簽分別是 ”特別推薦“(包含了一些網(wǎng)站所有者認(rèn)為值得注意的鏈接)和 “最新評論”。 這兩組信息之間并沒有邏輯聯(lián)系,用戶會很疑惑為什么這兩者要放在一起呢。所以這個Tab中的兩組信息最好分開放置。
Tab元素的標(biāo)簽區(qū)寬度是有限的,所以標(biāo)簽區(qū)的文字應(yīng)該簡潔扼要,具有代表性,長度控制在1~3個英文單詞。用精煉的方式展示信息,除了保持設(shè)計樣式不變形外,還可以讓用戶更快速地處理文字信息,用以預(yù)測隱藏區(qū)域上所包含的內(nèi)容。
Tab本意用于展現(xiàn)標(biāo)準(zhǔn)化和易于理解的信息。基于此,Tab應(yīng)該只用于顯示信息摘要和內(nèi)容要點,例如列表,數(shù)據(jù)圖表,或1~2段簡短的文字這種形式。
這一章節(jié) 我們將討論一些關(guān)于Tab的可用性設(shè)計原則,以及如何使這種交互元素變得更友好和有效。
選中狀態(tài)的標(biāo)簽應(yīng)該設(shè)計得顯眼,讓用戶容易區(qū)分當(dāng)前顯示的內(nèi)容區(qū)是對應(yīng)哪個標(biāo)簽。通用做法是 為未選中狀態(tài)使用統(tǒng)一的背景色,為出于選中狀態(tài)的標(biāo)簽上使用高亮的背景色。
Tab的標(biāo)簽通常是水平方向排列的(當(dāng)然如果你愿意,也可以設(shè)計成垂直方向排列的),標(biāo)簽如果分布在多行上會導(dǎo)致用戶在使用中產(chǎn)生疑惑。
這是由于在水平方向上多行分布標(biāo)簽,隱含一種等級關(guān)系,可能讓用戶誤以為第二行是第一行的子級。
標(biāo)簽需要分布在多行上時,也就意味著標(biāo)簽的數(shù)量過多或者標(biāo)簽上文字太長。而這些都是需要被精簡的。

使用Tab來控制內(nèi)容切換的特性之一是快速和互動。為此,應(yīng)該在html代碼里提前內(nèi)嵌所有內(nèi)容區(qū)的代碼,并通過CSS/Javascript來隱藏未被選中內(nèi)容區(qū),而不是等用戶切換到某個標(biāo)簽后再去遠(yuǎn)程請載入信息。
避免在標(biāo)簽切換的時候去載入頁面,使用AJAX從遠(yuǎn)程讀數(shù)據(jù)來生成動態(tài)菜單也是一個辦法,但這對使用語音閱讀器的用戶(譯注:Screen-Reader:為視力障礙的用戶準(zhǔn)備,可以語音讀出頁面上的信息。)是不友好的,因為語音閱讀器不支持DOM模型。
(譯注:有4種方法載入隱藏區(qū)的內(nèi)容代碼:
標(biāo)簽應(yīng)該設(shè)計得盡可能窄,以便在一行內(nèi)容納盡可能多的標(biāo)簽。
在標(biāo)簽區(qū)使用簡單的描述或內(nèi)容關(guān)鍵字,可以幫助用戶在掃描頁面時快速找到他們想要的內(nèi)容。所以使用概括準(zhǔn)確符合邏輯的文字來描述內(nèi)容區(qū)是非常重要的,選用這些文字應(yīng)該經(jīng)過深思熟慮。
下面這個在網(wǎng)站CBS.com上的案例,是一個難用的Tab。標(biāo)簽上沒有任何說明性文字,用戶無法預(yù)測未顯示的內(nèi)容區(qū)里到底有什么。
而在 Navigant Consulting 的網(wǎng)站上,使用數(shù)字來暗示數(shù)據(jù)是有序的。但仍然沒有表達(dá)出內(nèi)容區(qū)里包含什么。這種設(shè)計容易產(chǎn)生歧義導(dǎo)致用戶產(chǎn)生不必要的困惑。
在Tab的內(nèi)容區(qū)里使用滾動條會增加用戶負(fù)擔(dān):用戶在要查找信息在哪個內(nèi)容區(qū)里時,不僅需要切換標(biāo)簽,還需要加上移動滾動條的操作。
內(nèi)容區(qū)里容納的信息太多或設(shè)計Tab時設(shè)定的高度不夠,會導(dǎo)致滾動條出現(xiàn)。所以需要考慮精簡內(nèi)容、增加高度值,或把選中狀態(tài)的內(nèi)容區(qū)處理為的高度自適應(yīng)。
更復(fù)雜的交互行為的出現(xiàn),在不刷新頁面的狀態(tài)下異步更新內(nèi)容,以及如何滿足用戶使用不同訪問方式,包括那些很難確定的非典型狀況下的訪問需求,這些狀況令易用性成為當(dāng)前最熱門的話題。本章節(jié)中,我們將討論一些在設(shè)計Tab元素時你應(yīng)該知道的易用性原則。
為了讓視力上有障礙的用戶能分清哪些標(biāo)簽是已選中的,哪些是未選中的,應(yīng)該使用高對比的背景色來做出區(qū)分。
Yahoo! News 網(wǎng)站中的反面案例:選中和未選中狀態(tài)的標(biāo)簽 只有非常小的視覺上的差異,他們對視力好的用戶沒問題,但是會給視力不佳的用戶帶來麻煩。
此外,請務(wù)必保證標(biāo)簽的文字顏色(前景色)和標(biāo)簽背景色 有充分的對比。即使是未選中的標(biāo)簽,用戶也應(yīng)該能輕松閱讀上面的文字。為了讓未選擇的標(biāo)簽看起來不顯眼,而把它們都直接變灰 是不妥當(dāng)?shù)摹?/P>
基于可訪問性,Tab應(yīng)該使用技術(shù)將未選中狀態(tài)的內(nèi)容區(qū)隱藏起來,但是不能在DOM Tree中刪除他們。比如不能使用 display:none; 或者 visibility:none這樣的css參數(shù)去定義容器。這類參數(shù)導(dǎo)致語音閱讀器無法讀取被隱藏的內(nèi)容區(qū)中的信息。
(譯注:中國設(shè)計師可能不太重視語音閱讀器的可訪問性,但是在國外,有專門的法令條款規(guī)定,機(jī)構(gòu)網(wǎng)站不得歧視有障礙的用戶,包括視力缺陷,行動障礙、癲癇患者等,所以外國的產(chǎn)品或前端工程師會很重視這一點,不然會遭到投訴甚至起訴。這種差異去看看中國人是如何設(shè)計盲道的就明白了。)
詳情請見Roger Johansson’s 的文章 《利用css隱藏內(nèi)容:問題和對策》”Hiding with CSS: Problems and solutions“.
(譯注:Roger Johansson’s的文章中指出:許多CSS和JS教程建議使用display:none; visibility:none 來隱藏元素,但大多數(shù)狀況下這是一個會降低可訪問性的選擇,。
display:none的真正含義是表示這一元素并不存在,不需要顯示打印或被閱讀。大多數(shù)語音閱讀器會忽略任何使用display:none來隱藏鏈接,文字,導(dǎo)航和標(biāo)題等。作者建議使用的技術(shù)是使用絕對定位坐標(biāo),例如 .structural { position:absolute; left:-9999px; } 。
另一個需要注意的問題是,當(dāng)你決定使用JS去顯示一個元素時,也應(yīng)該用JS技術(shù)去隱藏它。因為考慮到客戶端是否支持js以及安全等級,如果客戶端的js沒起作用,可能交互或動態(tài)菜單沒效果,但起碼內(nèi)容是可訪問的。但如果你使用css去隱藏一個元素,但使用js技術(shù)去顯示它,在某些狀況下,這個元素會變得一直無法訪問。)
使用無序或有序列表(譯注:<ul> <li>這類標(biāo)簽)來構(gòu)造標(biāo)簽的html代碼,可以改善可訪問性。因為使用語音閱讀器的用戶可以基于此來識別出這是一組Tab標(biāo)簽。如果標(biāo)簽上使用了圖片來代替文字,別忘了添加ALT 或 title屬性來 描述圖片的含義。
鍵盤導(dǎo)航是為一些有行動障礙或不能使用常規(guī)輸入設(shè)備(如鼠標(biāo))的用戶準(zhǔn)備的。這種用戶會使用替換形式(比如鍵盤或語音)來控制導(dǎo)航菜單,確保他們能將控制焦點在標(biāo)簽間切換,并激活他們想要的部分。
一個簡單測試鍵盤導(dǎo)航的簡單方法是:使用鍵盤上的Tab鍵,看你是否能將控制焦點 集中在每個標(biāo)簽上?使用回車鍵,當(dāng)前的控制區(qū)域是否能被激活,使未選中狀態(tài)有效地切換為選中狀態(tài)。
當(dāng)客戶端無法支持某些技術(shù),比如當(dāng)瀏覽器關(guān)閉了JavaScript功能時,或者 當(dāng)用戶沒有安裝Flash插件時,Tab內(nèi)容區(qū)上的信息必須保證最基本的可訪問性,交互元素確保能被替換為最基本的html文本。
在提供了一些基本的可用性建議和原則后,我們還可以討論一些方法來進(jìn)一步提高Tab元素的可用性。
在標(biāo)簽上配合使用形象的icon,可以增強對內(nèi)容區(qū)信息的描述。
例如在網(wǎng)站 DrawIt 中,圖標(biāo)用于形象地補充說明所對應(yīng)的內(nèi)容區(qū)的功能。
在標(biāo)簽上使用icon,必須保證它們是形象的,切題的。使用不相關(guān)的icon會適得其反。
避免在標(biāo)簽上直接用icon來代替文字。
不同的人對一個圖像有不同的解讀,最安全的方法是使用加上文本來描述內(nèi)容區(qū)信息。
在內(nèi)容區(qū)切換的時候使用過渡轉(zhuǎn)場動畫是一個不錯的選擇,可以為用戶提供積極的視覺反饋――內(nèi)容區(qū)正在變化!
大家可以去網(wǎng)站 Coda ,從左到右點擊Tab標(biāo)簽,欣賞切換時的效果。
默認(rèn)情況下,當(dāng)用戶將鼠標(biāo)移到超鏈接或標(biāo)簽區(qū)域上時,鼠標(biāo)指針的樣式會發(fā)生改變,讓用戶知道標(biāo)簽區(qū)域是可點擊的。
除此之外,還可以利用背景色變化來響應(yīng)用戶的鼠標(biāo)操作。對于那些不熟悉Tab標(biāo)簽操作的網(wǎng)站新用戶而言,這是很有用的。
下圖中Vyniknite.sk 網(wǎng)站的案例里:當(dāng)用戶鼠標(biāo)劃過未選中狀態(tài)的標(biāo)簽,背景色會變成鮮明的紅色。
#p#副標(biāo)題#e#
現(xiàn)在為止,我們從細(xì)節(jié)上探討了Tab這種交互元素,是時候來看看真實案例了,在這一章節(jié),我們分析一些Tab元素的應(yīng)用,希望可以帶給大家靈感。
這個網(wǎng)站在首屏位置使用大量Tab元素 以展現(xiàn)數(shù)量龐大的信息。
雅虎在頭版位置使用Tab設(shè)計,對信息內(nèi)容的顯示進(jìn)行了壓縮和模塊化。
Igoogle在模塊中大量使用了Tab,不占用大量的屏幕空間,又令信息飽滿。
藍(lán)橡果網(wǎng)站 利用Tab來顯示網(wǎng)站的熱門文章: 電子商務(wù)和Magento(一個電商軟件平臺),內(nèi)容區(qū)上還放置著引導(dǎo)用戶瀏覽更多文章列表的按鈕。
在這個案例中,你可以看到利用圖標(biāo)強化標(biāo)簽文字描述的應(yīng)用。
WebNotes 網(wǎng)站的Tab元素,標(biāo)簽位于內(nèi)容區(qū)下方,令人耳目一新。內(nèi)容區(qū)切換時有淡入淡出的動畫。
WordCat.org 在搜索框中使用了Tab標(biāo)簽,讓用戶可以針對特定搜索需求縮小搜索范圍。(比如書籍、DVD、或者文章)
Martha Stewart 在網(wǎng)站的“推薦內(nèi)容”上應(yīng)用用了Tab設(shè)計,可以自動播放和帶有過渡動畫。
Krista’s Creations 利用字母表作為標(biāo)簽來控制圖片的分類顯示。
Clearspring 擁有響應(yīng)速度極快的Tab,這是一個非常好的古典樣式的Tab設(shè)計案例。
在網(wǎng)站Homewood中,它們也利用icon來輔助了標(biāo)簽上文字的表述。
蘋果網(wǎng)站里,垂直方向排列的Tab標(biāo)簽設(shè)計,非常漂亮。
網(wǎng)站 ExpressionEngine 把標(biāo)簽控制區(qū)放在Tab窗體的底部,在快速載入內(nèi)容區(qū)和快速響應(yīng)內(nèi)容區(qū)切換方面,它也是一個典型案例。
Viget Inspire 在“熱門文章”版塊使用了Tab,有淡入淡出的切換動畫,內(nèi)容區(qū)高度可根據(jù)內(nèi)容長度自適應(yīng)。
Komodo Media 的標(biāo)簽里,icon放在文字上方。
atebits presents 用Tab來展示產(chǎn)品介紹,它有效地在這么小的空間里展現(xiàn)了如此豐富的內(nèi)容。
Tumblon 把標(biāo)簽放置在內(nèi)容區(qū)下方,能快速響應(yīng)切換,但不好的是,標(biāo)簽的選中狀態(tài)和未選中狀態(tài)不是那么容易區(qū)分。
在 Kev Adamson的網(wǎng)站中,右邊欄里有好幾個Tab,網(wǎng)站使用了不同的ICON配圖,幫助用戶理解不同Tab的功能。
#p#副標(biāo)題#e#
有很多教程能告訴你在頁面上如何建立和實現(xiàn)一個Tab,下面,你可以通過一些頂尖教程來了解更多關(guān)于創(chuàng)建Tab的技巧。
Building Tabbed Content 《如何創(chuàng)建Tab》
通過閱讀這篇初級教程,你可以了解如何通過使用JS框架原型創(chuàng)建一個簡單的Tab元素,
Create A Tabbed Interface Using jQuery 《使用jQuery來創(chuàng)建Tab》
Dan Harper 提供給讀者關(guān)于如何使用jQuery庫(譯注:著名的js庫)來構(gòu)建Tab。
Accessible Image-Tab Rollovers 《圖片標(biāo)簽導(dǎo)航的快速切換》
學(xué)習(xí)如何實現(xiàn)用圖片來制作標(biāo)簽導(dǎo)航區(qū),并實現(xiàn)快速切換
Create a Slick Tabbed Content Area using CSS & jQuery 《使用CSS和jQuery來實現(xiàn)一個可平滑切換的Tab》
如果你真正查找能直接在你網(wǎng)站上應(yīng)用的Tab腳本代碼,這有一些免費的解決方案。
DomTab 是一個很受歡迎的腳本,能很容易創(chuàng)建一個Tab元素,把普通的鏈接列表改造為Tab元素。
這段由BarelyFitz 設(shè)計的即插即用 的 JavaScript代碼,能夠幫助你在個人網(wǎng)站上更快速實現(xiàn)Tab元素。
TabView 是yahoo用戶界面庫(YUI)里的一個元件,你可以利用這個元件來減化代碼量和圖片的使用。
Coda-Slider 是Coda 設(shè)計的Tab實現(xiàn)腳本,可以實現(xiàn)內(nèi)容區(qū)切換的轉(zhuǎn)場動畫效果,還可以設(shè)置將Tab標(biāo)簽處理為靠左對齊或靠右對齊。
idTabs 是 jQuery 的一個簡化插件,其強大的設(shè)置功能可以簡化原來控件中復(fù)雜的參數(shù)組合。
idTabs是一個JavaScript庫,也包含創(chuàng)建Tab工具,這有深入淺出的使用教程Step by Step pane。
動態(tài)和遠(yuǎn)程數(shù)據(jù),你可以使用AJAX這種動態(tài)驅(qū)動的方法,來異步更新內(nèi)容區(qū)里的信息。
這段Tab腳本簡單但有高度自定義的空間,支持動畫與自動播放。
Jacob Gube 是一個JS和PHP工程師、WEB設(shè)計師、作家,Six Revision的創(chuàng)始人及總編。Six Revision是一個在線共享專業(yè)的開發(fā)與設(shè)計資源及教程的平臺。這是他的Twitter:follow him on Twitter。
]]>