5/13/2007

CSS 命名規則

最近在工作上討論到CSS命名規則, 目的是希望大家能對相同的資料區塊使用同一種名稱, 方便設計師彼此或工程師coding時辨認, 例如: 頁首就用<div class=”header”>.

開始用CSS做網頁設計以來, 所使用的命名規則並非一直固定著, 有時因為版型/佈局不同, 有時因為資料區塊不同, 有時因為網頁結構的寫法不同, 有時是因為想法不同, 認為先前的做法不好所做的改進.

其中又以"網頁結構寫法不同"而更改的原因比較多. 幾年前還是生手時, 做標題總是用: <div class=”title>網頁標題</div> 的方式寫, 所以CSS裡面會有一組: .title {…….}. 現在知道要用結構化的語法寫就改用 <h3>網頁標題</h3>, 當然CSS裡面也要跟著改成 h3 {…….}. (結構化語意請參考 支援各種平台的網站製作方式談Web標準 )

其次是佈局, 我喜歡簡潔的設計(不確定是否一直如此), 傾向極簡風格一派, 希望畫面看起來乾淨舒適又可以表達意涵. 所以比較容易以網頁結構本身的tag (如h, p, ul, li) 命名做設計, 頂多在資料區塊外加一組<div>, 例如:

<div class=”news”>
<h4>即時新聞標題</h4>
<p>即時新聞內文……</p>
<ul>
<li>相關新聞條列1. </li>
<li>相關新聞條列2. </li>
</ul>
</div>

CSS可以寫成:

.news {……}
.news h4 {……}
.news p {……}
.news ul {……}
.news li {……}

這種寫法可以省很多 <div>和<class>, 達到網頁結構簡潔的目的. 但多數設計師是喜歡屬於華麗風格的(也許害怕客戶抱怨沒認真在幫他們做設計), 通常會在資料區塊外圍加上有底圖的圓角邊框包起來, 或者在四周再加上插圖等裝飾圖片. 這樣設計的網頁結構自然也要複雜起來, html寫法可能會變成:

<div class=”news”>
<div class=”header”> </div> -- 這裡放圓角邊框上方底圖

<div class=”body”> --這裡放圓角邊框中間底圖
<h4 class=”title” >即時新聞標題</h4>
<p class=”text”>即時新聞內文……</p>
<ul>
<li class=”list_1”>相關新聞條列1. </li>
<li class=”list_2”>相關新聞條列2. </li>
</ul>
</div>

<div class=”footer”> </div>
-- 這裡放圓角邊框下方底圖
</div>

<div class=”pic><img src…… /></div>
-- 整個資料區塊下方再補個插圖

CSS可能寫成:

.news {……}
.news .header {……}
.news h4 {……}
.news .body {……}
.news p {……}
.news .title {……}
.news .text {……}
.news .list_1 {……}
.news .list_2 {……}
.news .footer {……}
.news .pic {……}

從上面例子可以看出, 比較難辨認的是Html的語法結構, CSS只要命名不是和內容完全沾不上邊的, 都還好辨認. 工程師coding時的困擾也應該是Html結構層面, 不全是CSS名稱的緣故. 如果頁面上類似的資料區塊多達3~5個的話, 這結構和CSS就真的複雜的可以了! 我經常看見有設計師即使是沒插圖的簡單資料區塊, 也要保留空的<div> tag (header, body, footer), 只為了將來也許會修改的可能性. 這種可能性其實微乎其微, 真的運氣不好也頂多到工程那兒請他加個tag, 幾分鐘就完成了. 如果工程師知道為了這些沒用到的tag讓他困惑許久的話, 也會希望不要保留比較好.

真的要訂規則的話, 應該要用比較客觀的方式命名, 並且考慮"網頁結構"和"版型佈局". 簡單設計和需要放很多插圖的網頁結構必定不同, 簡單設計可以只用少許<div>完成設計. 但是很多插圖的網頁就需要藉由一層又一層的<div>做為放置插圖的區塊. 例如兒童版的網頁就少不了要多放些可愛造型的風景或人物圖片, header. body, footer這些div會是需要存在的. 但如果統一以兒童版的結構訂定一組極大化標準規則的話, 對很多只需要簡單結構的網頁來說會太肥大, 頁面充滿不需要用到的tag. 如果以簡單結構的網頁訂定標準規則的話, 對兒童版的網頁來說又不夠用, 必需再行擴充. 所以不管怎麼訂都是"有欠周全", 而那一類型的網頁適用這樣的規則也應該是思考方向之一.

一位英國資深網頁設計師Andy Clarke做過相同的研究, 發表What's in a name (上) 和 What's in a name (pt2) (下) 二篇文章探討CSS命名規則. 他找了40位當今知名的CSS網頁設計師的網站, 分析他們對外框, 上, 下, 左, 中, 右欄位和導覽列的命名, 並歸納出最常被使用的名稱. 這份分析表請參考Naming Conventions Table.

從分析表可以看到有些欄位是空的, 因為不是每個欄位都有被使用到, 例如有的版型是二欄靠左, 就不會有右邊欄位; 最外框container則視版面的製作方式, 不一定要存在; 導覽列有的獨立在頁面上方, 有的和相關資訊一起放在左邊或右邊欄位.

Andy Clarke 第一篇文章What's in a name從分析表歸納出最常被使用的名稱如下:

‧外框: container (8/40)
‧頁首: header (18/40)
‧主導覽列: nav (4/40) 但是nav相關名稱(navigation, navber, topnav, navcontainer)也佔多數
‧左邊或右邊欄位: sidebar (7/40)
‧內容: content (16/40)
‧頁尾: footer (24/40)

以上的名稱相信也是很多人習慣使用的命名方式, 可以完全同意(雖然我習慣將導覽列命名為menu). 文中也提到命名應該描述區塊本身的意義而非外觀或位置, 因為外觀(顏色)位置(左右)是經常會變動修改的. 他也另外列出幾個常用名稱, 但不在這份分析表中, 所以僅供參考:

‧次導覽列: sub-nav
‧網站搜尋: search
‧搜尋結果: search-results
‧版權資訊: copyright

Andy Clarke 第二篇文章What's in a name (pt2) 又對比較細項的內容區塊命名, 但這些細項就缺少像第一篇那樣客觀的分析, 他也說了: 這些純粹是他個人的想法和建議. 這些建議和我看過優秀的CSS設計網頁的命名有很大差異(例如中間有"-"符號). 由於客觀性不足, 不具說服力, 在此並不推薦第二篇文章所寫的命名方式.

當Andy Clarke發表第一篇文章時就受到Eric Meyer (知名的Web標準和CSS大師級人物)的批評: 認為CSS命名規則是非必要之事, 它應該留給設計師做比較彈性的運用空間. Eric Meyer的看法請參考Elemental Nomenclature. (Eric Meyer也在那40人的名單當中) 但是Andy Clarke的第二篇文章隨即反駁Eric Meyer說法, 並且做出更細項的命名規則結論. Andy Clarke認為他是站在coding和公司的角度看這件事就有其必要性.

從設計師的角度看, 我贊同Eric Meyer 的看法, 因為從事設計或創意工作的人喜歡可以自由發揮創意的空間, 多少都會對"制式"的東西感到反感. 但如果非要制定規則的話, 也以資料區塊為命名單位, 制定符合意義並容易辨認的名稱, 例如: headline, newslist, bulletin, epaper, relatednews等 , 更細項的項目則保留彈性不需訂定. 因為不管做多細都會有如前面所說的"有欠周全"的地方.


附註:
有件事Andy Clarke並未探討, 那就是使用id或class? id通常在頁面中扮演定位或辨識的角色,例如: <div id=”header”>在同一個頁面允許使用一個, 不能出現第二次, class可以重複出現(請參考 id和class的差異 一文), 所以像header, content, footer是常見的以id定位成大區塊框架的做法, 但是都用class定位的也大有人在. 就看製作網頁時的功能設定為何? 有的id是要保留給程式下參數用的. 但是和程式配合得當的話, 也可以不用考慮這些. 因為寫程式的人也會自動避開已經被使用的名稱.

5/06/2007

談網頁"設計"標準

多了"設計"二個字就不是"Web標準", 這裡要談的是Jakob所說的網頁設計標準, 非W3C的Web標準.

Jakob也談標準, 但是他談的是網頁元素的配置, 屬於視覺呈現和使用者行為分析的部份. 以下是重點翻譯, 詳細內容請參看原文 The Need for Web Design Standards .

Jacob認為所有網際網路中的網站會形成一個整體, 使用者瀏覽眾多網站之後會產生一個整體印象, 之後再使用時就會有預期心理, 開始猜測現在正在瀏覽的頁面和先前造訪過的網站應該有相同的呈現方式. 所以, 脫離使用者預期的設計就是很難使用的設計了.

Jakob先定義三種標準化設計的層級, 再用兩種統計分析來比較網頁介面設計標準, 一個是他自己的研究—55個企業網站首頁上的24個元素, 一個是華盛頓大學碩士研究—75個商務網站上的33個元素. 以下列出二個研究統計的平均結果:

一. 標準用法的元素: 有80%或者更多的網站使用相同的表現方式. 當使用者瀏覽未曾造訪的網站時會篤定的預期某些元素是以特定方式呈現. 這些標準元素是
1. logo在頁面左上方
2. 首頁中有網站搜尋輸入區
3. 沒有跳出視窗的設計
4. 如果有路徑顯示, 以水平方向列示 (例如 首頁 > 路徑1 > 路徑2)

二. 習慣用法的元素: 有50-79%或者更多的網站使用相同的表現方式. 當使用者瀏覽一個未曾造訪的網站時會習慣性的預期某些元素的呈現方式. 這些習慣性元素是
1. 使用"sitemap"名稱表示網站導覽
2. 造訪過的連結要用不同顏色區別
3. 將購物車放到網頁右上方
4. 將類似的連結群組起來放到左邊欄位

三. 不特定用法的元素: 這些元素並沒有單一的呈現方式, 即使是比較受歡迎的也只有49%的網站使用, 所以當使用者瀏覽一個未曾造訪的網站時是無法對這些元素做預期的. 這些不特定元素呈現的方式有很多種, 包括
1. 導覽列的呈現有放置左手邊的, 橫跨上方的, 或像Yahoo一樣在中間等等
2. 網站搜尋的呈現有右上方的, 左上方的, 中間的和其他地方的
3. 網站登入的程序
4. Help的位置

以第一眼來說, 大約只有1/4的設計元素是不特定的, 對大部份的網頁設計決策而言, 標準或習慣性的建立意味著人們可以沿襲這些標準和習慣知道如何使用這個網站. 不確定的設計元素是使用者瀏覽網站時, 要熟悉應用這個網站比較大的挑戰, 因為每一頁都需要單獨再理解. 例如不確定導覽列會怎麼顯示, 網站搜尋不確定, 登入不確定, 甚至Help也不確定-這個最後可以求助的地方的使用性也很低.

為何標準的設計對使用者有幫助? 標準可確保使用者:

1. 可預期到頁面上會有什麼元素
2. 知道這些元素在介面上看起來會是怎樣
3. 知道在網站或頁面上, 那裡可以找到這些元素
4. 知道如何操作這些元素及達到目的
5. 不必思考某些未知元素的用義
6. 不會在快速瀏覽元素時錯過一些重要的東西
7. 某些事進行的不如預期時也不會得到令人討厭的驚奇

這些好處可以增加user應用網站的熟悉度, 增加達成目的的能力, 和提昇使用經驗的滿意度. 但為何應該和網頁設計標準趨於一致? 一個簡單的理由:

Jakob's Law of the Internet User Experience: users spend most of their time on other websites.
Jakob的"網際網路使用者經驗定律": 使用者花大部份的時間在別人的網站上.
(反喻使用者只用很少比例的時間在你的網站)

當瀏覽其他網站時, 人們習慣了普遍流行的習慣性設計, 因此當使用者造訪你的網站時, 他們也會假設你的站應該和別人的站一樣以相同方式操作.

Jakob 2004年的網站研究, 使用者在平均1分49秒後離開一個網站, 這也包括了不能完成他們需求的網站. 要在這麼短的時間內說服使用者你的站對他們具有價值的話, 就不應該讓他們浪費一丁點時間在你不好使用的介面上面掙扎.

但比起公眾網站, Intranet 設計標準的狀況會更好, 主要是Intranet擁有唯一的負責單位, 這個負責Intranet的團隊能夠定義標準並將之推廣到整個企業, 確保設計的一致性.

不管是Intranet或是Internet, 有件事情很清楚: 和習慣性設計越趨一致並提供使用者想要的, 網站就越成功. 區隔內容, 服務和產品當然重要, 但是在這兩者的介面上, 最好的策略是去遵循其他人的用法.

--------------------------------------------------------------------------------------------

以上是Jakob對網頁設計標準的定義和做法, 我們的”政府無障礙網頁設計”也有極為類似的網頁元素配置建議, 對象主要是政府機關或學校教育單位, 相關規定可參考 無障礙網路空間服務網 的規範和文件.

Jakob的論點是以使用性為出發點, 希望網站的設計符合使用者習慣, 要易學易用. 但是放眼網際網路的眾多網站, 製作炫麗特效的網站比比皆是, 如果這種網站真的這麼不堪使用, 有怎會有那麼多諸如此類的設計存在?

以製作經驗來看, 可能有兩種原因: 第ㄧ種是網站管理者的個人喜好, 他喜歡這種動態效果的設計, 認為只要加上炫麗的效果就能吸引更多人來看他們的網站. 我也經常收到友人轉寄的Flash特效網頁, 真的羨慕有人可以用Actionscript把Flash做的這麼好, 但也純粹是為了特效去看一兩次, 而這到底是什麼網站, 寫些什麼內容卻沒有太多工夫研究.

另一種原因是這網站屬於遊戲娛樂型的網站, 它的使用者本來就是上來打發時間的, 有足夠的精神和耐心來看這裡會有什麼新鮮事發生. 所以這種網站如果做的不夠炫, 還真不足以吸引這些人的目光.

所以, 該製作怎樣的網站就要歸結到網站製作的目的. 為什麼建立這個網站? 打算提供什麼服務(提供資訊內容或遊戲娛樂)? 目標使用者是誰(來找資料的或來打發時間的)?

以資訊服務為主的網站的使用者可能是上班族, 學生或是研究人員, 他們的時間有限, 網站的設計以能夠幫助他們迅速準確的找到資料為目的, 就請不要浪費他們的時間在你的網站重複看一遍又一遍的動畫, 非得要放不可的話請提供Skip功能.

娛樂型網站就無所謂了, 請儘量的炫吧! 不管是驚奇的還是神秘的, 它的使用者有的是時間去發掘和探險. 而Jakob的論點在這裡恐怕難以派上用場.

所以, 請考慮清楚網站建置目的, 不要浪費金錢和時間做不該做的, 放不該放的東西在上面.

5/01/2007

英國-湖區(Derwent Water & Ullswater) -下集

>> 承接 [上集]

在Ullswater北邊有個城鎮Penrith, 是進出湖區北部的主要出入口, 由於我們是從南邊的Windermere進湖區的, 結束湖區之旅後才會從這裡搭火車回去. 所以離開Keswick之後, 我們就到這個城鎮尋找住宿的B&B.

這次找到的B&B位在市中心, 從遠處就看到後方有個教堂, 這家B&B比我以往住過的要大得多, 樓梯很寬敞, 二, 三樓有好幾間房間, 進去時正在打掃中, 最前面靠馬路的那間剛好打掃完畢, 就先讓我們住進去. 這間房很大, 有二張雙人床, 照理說是四人房, 可能前一天是假日, 很多房客剛離開, 而我們又是那天早上第一個住進去的, 算是撿到的吧!

以一般的B&B來說, 這房間的佈置挺講究的, 門外樓梯轉角也有主人用心佈置的小桌子鏡子和花瓶等裝飾品. 由於沒有其他房客, 沒人住的房間並未關門, 我們就趁沒人的時候溜到我們那一層其他房間看看. 每間房的牆壁都有不同的顏色, 我們那間是鵝黃色的, 最後面那間單人房是綠色, 中間那兩間則是橘色和紫色的, 但是櫥櫃床單和窗簾都是差不多的樣子. 中間那間房我們就溜進去拍照, 然後到窗邊看看窗外的景色, 這間房緊靠著後面的教堂, 天哪! 這教堂的周圍竟然有上百座的墓碑矗立著, 一直延伸到這棟房子的牆角, 原來這每一間房間的窗外都緊鄰墓園, 只有我們靠前面馬路這間看不到. 外國教堂有墓園並不奇怪, 但是要靠這麼近睡就心理發毛了. 還好我們那間看不到, 那就… 只好... 眼不見為淨吧!

Ullswater是狹長型的湖, 南北約7公里, 北邊從Pooley Bridge可以搭船到南邊的Glenridding, 坐船單趟約1小時, 我們打算搭船南下, 再搭公車途經Aira Force瀑布回Penrith. Pooley Bridge是上船的碼頭, 沒有太多可以逛的景點. 這個湖人煙稀少, 四周的房子也不多, 很有世外桃源的靜謐感. 雖然同是位在湖區北邊, 這裡的山就都是綠色的, 不像Derwent Water一樣有三種顏色.

下了船就是Glenridding, 這兒是個小村莊, 沒幾條街道, 遊客是所繞過幾個湖中最少的, 所以就更顯出這裡的幽靜. 這是湖的尾端, 對岸是山, 我們沿著湖邊的草皮綠地散步, 這天的天氣陰涼, 很適合這樣緩慢的走著. 不久湖面出現幾餿藍色和粉紅色的小帆船, 他們看來像在排練隊形, 有時候會聚在一起圍成一個小圓, 有時後又散開排成一條直線, 這幾餿船挺有意思的, 我們就坐在湖邊的長椅欣賞他們的表演. 這些天除了搭船, 大部時間都是一直在不停的走路, 能像這樣坐下來欣賞湖景的機會不多.


停留好一會兒我們才離開, 然後搭公車前往一個名為Aira Force的瀑布. 這瀑布在Ullswater湖的左岸, 是Glenridding往Pooley Bridge方向的中段地帶, 要看到瀑布得在下車後爬上一段山路和階梯才能看見瀑布, 那幾天的天氣不錯, 所以只有潺潺水流. 從瀑布下可以望見上方有個橋, 為了爬上這座橋, 我們又費了不少勁兒攀爬這裡蜿蜒的石路走到瀑布頂端, 這裡能看見的就是山, 湖知道是在山的另一面, 只是看不見而已. 曾經有幾次在歐洲安排自助旅行, 每當走的很累時都會安慰自己幸好還年輕才能有這樣的玩法, 不然等年紀大時大概只能跟著人家上車下車, 或待在豪華飯店享受飯店設施.


離開瀑布, 我們又再搭車回Penrith, 沒想到半途巧遇一大群牛要從前方道路不遠處右手邊的牛舍遷移到我們停車位置旁左手邊的牛舍, 這好幾十頭牛緩緩從前方走來, 約一百多公尺遠的路, 這些牛的牛步走了將近半小時, 所有的車必須停下來等待, 看起來大家都很有耐心, 沒聽見有人亂按喇叭或出來責罵, 而這些牛對我們的公車也很好奇的樣子, 想不到途中可以遇見這樣有趣的景況.

回我們的B&B後發現隔壁二間房有其他人住進來了, 是可以比較放心睡了. 也希望他們住的安好.

隔天早上下去一樓吃早餐, 發覺這家的早餐很豐盛, 一般會有的是培根, 荷包蛋, Sausage (一種臘腸, 有各種口味), Bean (罐頭裝的黃豆子), 麵包果醬和咖啡牛奶果汁等飲料, 這家店還多了烤蕃茄, 米血和優格. 難得的早餐, 所以要拍照留念!

吃完早餐就到市區逛了, Penrith在古代是湖區的首府, 靠近火車站的附近有個古城堡的遺址, 由於幾經戰亂, 現在只能看到斷垣殘壁, 但是古堡的花園還在, 顯然已經成為休閒的公園綠地, 裡面還栽種許多不同顏色和品種的玫瑰花. 在花園待一會兒我們就走回市區. 市區有個Mall, 逛完了我們就在裡面喝咖啡聊天, 這是最後一天行程, 只安排繞市區, 所以每家店每個街道都可以很仔細的看仔細的走, 像手工藝店, 畫廊, 陶瓷玻璃, 服飾店等. 但是我們並沒有買什麼東西, 唯一在每個景點都會買的只有風景名信片. 頭幾回出國旅遊喜歡買些小玩藝兒, 但回來後都存放在櫥櫃中, 很少拿出來看, 之後就會比較自我克制, 少亂買東西了!


逛了四個湖, 可以發現每個湖各有不同的風貌. Celia有個同學說 來湖區參加Tour團, 一天之中就搭巴士繞完好幾個湖, 然後告訴她每個湖都長的差不多, 可以不用繞太多個. 我相信他說的是真的, 像這樣的繞法應該看不出什麼差異, 他可能沒去搭船, 沒有從山上眺望湖面, 沒有走一走森林步道, 沒嘗試從不同的角度觀賞這些湖, 難怪體驗不出有什麼不同. 在我看, Windermere熙來攘往, 水陸交通便利, 適合喜歡熱鬧的人; Grassmere的美藏在山谷之中, 需勇於發掘和探險; Derwent Water的山有變幻莫測的艷麗感, Ullswater則是安靜的世外桃源. 各有各的美法和特色, 差就差在你是用那一種方法在看了!