細節決定成敗——無CSS時網頁的可讀性

weixin_34119545發表於2011-09-23

先上示例,攜程首頁酒店模組的效果圖如下:

程式碼結構如下:

  1. <dl> 
  2. <dt>酒店</dt> 
  3. <dd>北京</dd> 
  4. <dd>上海</dd> 
  5. </dl> 
  6. <ul> 
  7. <li>北京酒店列表</li> 
  8. <li>北京酒店列表</li> 
  9. <li>上海酒店列表</li> 
  10. <li>上海酒店列表</li> 
  11. </ul>  

這種結構在顯示上沒有任何問題,切換城市時下面的列表會相應改變。但當無法正常載入css時顯示效果就比較杯具了,截圖如下:

接下去是其它城市的列表,太長了圖片沒有截全。我們需要的至少是城市與所屬它的列表顯示在一起,在視覺上歸屬同一個模組,也就是說要在程式碼結構上把它們按照業務邏輯重現出來:

  1. <dl> 
  2. <dt>北京</dt> 
  3. <dd> 
  4.   <ul> 
  5.    <li>北京酒店列表</li> 
  6.    <li>北京酒店列表</li> 
  7.   </ul> 
  8. </dd> 
  9. </dl> 
  10. <dl> 
  11. <dt>上海</dt> 
  12. <dd> 
  13.   <ul> 
  14.    <li>上海酒店列表</li> 
  15.    <li>上海酒店列表</li> 
  16.   </ul> 
  17. </dd> 
  18. </dl>  

這樣當頁面出現no css的時候顯示效果就比較接近真實需求:

到這裡就離成功不遠了,接下來的問題是如何用現在的 dl, dt, dd 實現想要的視覺效果。

1. 先給所有 dl 的外層 div 加樣式:position: relative,再給 dd 設定 position: absolute,這樣列表就可以脫離 dl 的文字流了,切換列表時保證它們顯示在同一個位置;

2. 城市橫排顯示,這時設 dl 為浮動 float: left,再重新整理果然橫過去了。不過現在笑還早了點,不要忘了還有那萬惡的 IE6 要相容:給 dt 設定浮動並轉行內元素,否則會有多餘的空隙 float: left; display: inline; 再重新整理就OK了;

3. 補充一點為什麼要在 dd 中加 ul,這要視頁面結構而定,每一條除了標題還有價格,還有個需要轉化的人民幣符號 ¥,如果直接用 a 連結就需要大批量行內轉塊元素,比較耗效能。最初想用多個 dd,但因為有絕對定位的原因列表會重疊在一起,所以更換方案。

原文連結:http://ued.ctrip.com/blog/?p=1083 

相關文章