以往傳統網頁設計都喜歡使用table(表格)來建構網頁,這樣的建構方式對於網頁整體排版來講並沒有太大的問題,可以完美相容於各個瀏覽器。但是時代在進步,還在用table排網頁感覺就有點過時了。會這樣說並不是想引起table和div之戰,而是想要說對於網頁的維護,table表格是比較麻煩一點的,再加上程式碼不太乾淨、過多的巢狀,對於搜尋引擎來講,也比較難發現其中重要的部分。
那如果用CSS+DIV進行網頁排版,就會比較好嗎?基本上是可以這樣講,但是大家又會遇到網頁校正的問題,一口氣要調整四、五種版本的瀏覽器,這樣很可能讓網頁設計者又跑回去用table表格排版。但其實在CSS中,已經有語法是支援表格的了,並不是對表格進行樣簡單的樣式定義,而是透過CSS的表格屬性,完美畫出表格,排除瀏覽器相容的問題,讓傳統的table排版的設計師,也可以快速轉換。
在香腸之前的imXD佈景版本中,就已經將分類文章改採清單的排版方式,目的主要是不讓搜尋引擎收錄過多的重複內容,另一方面也不希望大家找文章不好找,所以改用清單的方式。本來想說使用table來產生清單排版,免除瀏覽器校正問題,但礙於搜尋引擎對表格式的網頁不好解析其內容,所以還是使用DIV排版,並默默的校正一堆瀏覽器。
但是這回imXD5因為網頁HTML5化,因此所有的CSS與DIV幾乎是重構的狀態,所以在本來的分類文章清單中,樣式也順便進行重構,可是問題來了?「重構=花時間」,因為要用CSS+DIV模擬成table的樣式,如果一直使用float來排版,校正上其實很麻煩,當然在瀏覽器的校正上,更是頭大。後來找了一下發現有有不錯的好東西,在diplay的屬性上,有table相關的屬性值可以使用!
傳統的table構版的問題
一般來講,table打好語法就可以呈現效果了,而且語法很簡單,就單純的table、tr、td,這三個語法就可以畫出表格,在各個瀏覽器下也都可以正常的顯示。如果覺得排版不漂亮,就直接在語法內加上width、color等等的屬性值,效果很容易就達到了,可是這樣會讓程式碼雜亂。對於搜尋引擎來講,他們抓網站內容通常不會一次抓完,會先抓到一定的網頁大小,之後再來,如果你把樣式調整的程式碼都放進去,很快的,搜尋引擎可能光收錄你的表格樣式,還沒抓到重點就已經達到抓取額度了,重要的資料沒被收錄,倒是收錄了一些不重要的樣式設定。
使用CSS構版的優點
既然表格不推薦,那我們可以考慮改用CSS+DIV來構版。CSS+DIV構版的好處就是將網頁樣式設定和主要內容分離,透過style.css檔案來控制樣式,而且可以很方便的改,只要網站架構不變,可以隨你開心設計好幾個版本的樣式表,哪天心情好,換一下style.css的檔案,網頁就整個大不同。這也就是為什麼那一些BSP部落格(例如無名、痞客邦),會有這麼多不同的套版,他們網頁架構都相同,就只是CSS檔案的不同,透過CSS的變換,可以營造出不一樣的效果。
開始進行CSS+DIV畫表格
為了讓大家方便在DIV和table之間的轉換,所以在CSS的命名上主要就是使用「css_」作為開頭,方便做一個對照。首先,以前面的範例table範例語法:
<table> <tr> <td>標題</td> <td>回應</td> <td>日期</td> <tr> <tr> <td>如何停用WordPress內建搜尋功能?</td> <td>5</td> <td>2011-10-30</td> <tr> </table>
接著,我們將以上語法改成CSS+DIV的切板模式,如同前面所說,為了方便對照,所以CSS的定名開頭採用「css_」。
<div id="css_table"> <div class="css_tr"> <div class="css_td">標題</div> <div class="css_td">回應</div> <div class="css_td">日期</div> </div> <div class="css_tr"> <div class="css_td">如何停用WordPress內建搜尋功能?</div> <div class="css_td">5</div> <div class="css_td">2011-10-30</div> </div> </div>
接下來,我們套上CSS的語法,效果就會出現了!
#css_table { display:table; } .css_tr { display: table-row; } .css_td { display: table-cell; }
CSS語法與table比對
事實上,從上面的語法來看,要用table改成css的方式並不困難,所有的樣式定義需要全部透過CSS的id或是class全部獨立出來,其他部分寫起來是差不多的。上面的語法,並沒有對CSS畫出的表個做顏色、邊線、寬度作定義,可能看起來醜醜的,這部分就請大家自己摸索了。這篇文章主要是要告訴大家,利用CSS也是可以達到table的效果。下面列出一些display對應table的屬性:
- inline-table:顯示成前後沒有換行的表格
- table:對應<table>標籤,以表格方式顯示。
- table-row:對應<tr>標籤。
- table-row-group:對應<tbody>標籤。
- table-cell:對應<td>標籤。
- table-caption:對應<caption>標籤。
- table-column:對應<col>標籤
- table-column-group:對應<colgroup>標籤。
- table-header-group:對應<theader>標籤。
- table-footer-group:對應<tfooter>標籤。
IE7以下不相容
沒錯,這樣的CSS屬性很巧的,只有在IE8以上才有支援,如果是IE7以下的瀏覽器,必須做CSS的相容性校正了,這是小可惜的地方。但目前瀏覽器的使用量,IE7的比例也逐漸下降,因為大多XP使用者如果要升級瀏覽器,都會直接升級IE8。如果要校正,那就要善用幾個屬性:display:block、float:left,還有padding和margin進行校正了。
香腸大您好~
以前我有張過一款外掛,現在需要重裝,但是我忘記外掛的名字,且不管怎麼爬文就是找不到此功能的外掛,不知香腸大是否知道這個外掛的名稱,或者與此外掛同樣功能的外掛也可。
而外掛的功能就是可以將文章裡的圖文,像報章雜誌那樣分欄的方式去排版,如下圖的飯裡所展示的那樣。
這個我不知道耶@@
請問一下如果要合併左右的div儲存格~~該怎麼寫呢???
可以用傳統table的邏輯繪製出後,參照並用div取代,可以參考上方 「CSS語法與table比對」套用相應的CSS屬性。不過table通常我都做簡單,沒有弄太過於複雜XD
試不出來耶 = =”
如果無法,建議就是使用圖片看看了,一般網頁也不建議用太過於複雜的結構。
還有一個麻煩點, div不像table能自動讓內容垂直居中, 雖然可以用lin-hight去設定讓視覺上有居中的效果,可是如果是跑表單的話高度就不一定了~, 我個人的習慣是”填寫用的表單”用div,這樣子一勞永逸, 拋資料用的表格用table,可以屏除各欄位內容不同造成的困擾(table內的欄位如果寬度爆掉了也不會產生錯位、換行的窘況) ,table、div各有其優缺~ 我都支持:)
確實,CSS的table仍有其不足的地方,有些表格還是需要table來達成,但若是針對網站整體架構,則不建議再用table了。
大家開始不建議使用table…是google 提出來的(印象中) 最主要的原因是因為「table的performance很差」
因為使用table一次就要全部load完才可以開始使用… 比不上CSS的有效率
soga~
不過
我在銀行界資訊業的朋友
在刻網銀的交易頁面時
連排版都是用table而不是用div
因為就是不想要有load一半的狀況
要嘛一次load完,要嘛都load不出來
有些部分還是得使用table,例如後台的一些報表,那應該是最快的。
對於要給搜尋收錄的部分,建議使用DIV繪製。
若是cowspan和rowspan在div table要怎麼表示呢?
其他的就按照一般方式處理即可
我也是使用DIV+CSS來做網頁,可是您上頭提到說:"table表格比較麻煩?再加上程式碼不太乾淨、過多的巢狀"???…..個人覺得這個理由是被宣傳誇大出來的,且攻擊table過頭了!!
怎麼說呢?大家多少做過網頁吧? DIV+CSS同樣很麻煩呀!你必須在HTML及CSS當中來回穿梭對應,而且有些樣式並非所見即所得,必須反覆在瀏覽器上檢視,更不用說其他啥七雜八的非預期錯誤了,明明我在做網頁,為何搞得像寫程式似的呢?
另外所謂"程式碼不太乾淨、過多的巢狀", 這說法也很怪,使用DIV佈局也是半斤八兩吧! 隨便打開一個網頁用GOOGLE檢視原始碼就可發現,盡是一窩窩巢狀的DIV哇~它的"不太乾淨"並沒比table好多少唷~而且更糟的是光看這些DIV根本不知樣式為何,必須逐一找到對應的樣式,然後在腦海中建構出整體的樣子,這樣的技術讓我覺得很不便利。
所以使用DIV+CSS,其實唯一的理由就是方便搜尋引擎搜尋而已啦~
開始進行CS+DIVS畫表格?
應該是[開始進行CSS+DIV畫表格]才對
開始進行CS+DIVS畫表格
少個s
應該是開始進行CSS+DIVS畫表格
一直以來感謝你的文章
對我來說獲益良多 :)
在這篇文,發現了小小的錯誤
有關在最後的Code展示
#css_table的display拼錯了
寫網站最痛苦就是要配合IE了 Orz
偏偏客戶最愛用舊版IE
IE 6~7 MUST DIE