(中級)用CSS3表元實現多欄-中欄流動佈局
本文節選自《CSS設計指南(第3版》。
第1章完全免費試讀,電子書線上熱賣中:http://www.ituring.com.cn/book/1111以下內容節選自第5章。
儘管利用HTML的<table>
標籤實現多欄佈局是難以接受的,但使用CSS讓佈局形如表格則是絕對可以接受的。這種方法不會導致固定不變的表格佈局,也不會出現難以重新應用樣式的問題(比如在手持裝置上表現為一欄)。說到建立佈局,表格的行為確實是非常符合要求的,下面我來解釋一下。
在最簡單的情況下,表格由三個元素構成。一個表格外包裝<table>
,包含著表格行<tr>
和表格資料<td>
,比如下面這個例子。
<table>
<tr> <td>Cell 1</td><td>Cell 2</td><td>Cell 3</td> </tr>
<tr> <td>Cell 1</td><td>Cell 2</td><td>Cell 3</td> </tr>
</table>
我們知道,CSS可以把一個HTML元素的display
屬性設定為table
、table-row
和table-cell
。通過這種方法可以模擬相應HTML元素的行為。而通過CSS把佈局中的欄設定為table-cell
有三個好處。
- 表元(table-cell)不需要浮動就可以並排顯示,而且直接為它們應用內邊距也不會破壞佈局。
- 預設情況下,一行中的所有表元高度相同,因而也不需要人造的等高欄效果了。
- 任何沒有明確設定寬度的欄都是流動的。
這三個好處解決了本章前面學習佈局時遇到的問題。然而,(這裡一定有蹊蹺,對吧?)CSS3表格行為在IE7及更低版本中並沒有得到支援,而且也沒有穩妥的補救措施。如果你(或者你的客戶)願意摒棄IE7,那麼它就是一個既簡單又可靠,而且還很徹底的解決方案。如果真是這樣,我絕對推薦你採用這個方案,前面所講的各種方案就當我沒說。
關鍵是,你甚至都不需要用div
外包裝來扮演table
和tr
元素,僅僅是把三欄的display
屬性設定為table-cell
就可以了。瀏覽器的排版引擎在碰到沒有錶行(tr
)的一組表元時,會自動為它們新增錶行,而在錶行沒有被table
元素包圍時,會自動為錶行新增table
。因此,你不需要多寫任何標記,只要把每一欄的display
屬性設定為table-cell
,剩下的事兒就可全部交給瀏覽器負責了。
因此,要實現一個三欄-流動中欄佈局,只需要以下標記
<nav><!-- 內容 --></nav>
<article><!-- 內容 --></article>
<aside><!-- 內容 --></aside>
和以下CSS
nav {display:table-cell; width:150px; padding:10px; background:#dcd9c0;} article {display:table-cell; padding:10px 20px; background:#ffed53;} aside {display:table-cell; width:210px; padding:10px; background:#3f7ccf;}
在圖5-5所示固定寬度佈局的HTML基礎上,我們去掉了內部div
。而在CSS中,把每一欄的float:left
替換成了display:table-cell
,同時去掉了中欄的寬度設定。好了,一箇中欄流動、各欄同高,而且能夠方便為內容新增內邊距和邊框的佈局就這麼出爐了(參見圖5-12)!
圖5-12 這個流動佈局使用了CSS3的display:table-cell
,讓每個欄形同表元一般
請注意,這個簡單、功能完備的佈局對IE7和IE6可沒有任何膩子指令碼,甚至連個退化的後備方案都沒有。在這些瀏覽器中,三欄會上下堆疊在一起。因此,除非你下定決心不再支援老版本的IE,否則就得使用本章前面講過的其他佈局技術。等吧,等到這些瀏覽器沒人用為止。
最後我們總結一下本節討論的佈局技術。這一節先講了使用內部div
的浮動固定寬度佈局技術,它是適合新舊瀏覽器的一種最安全的技術。當然,這種技術要求的工作量也最多。而使用boxsizing:border-box
宣告(再加上適用於IE7和IE6的膩子指令碼) 則能提供更直觀的盒模型,而且不用使用內部div
。最後,CSS3的display:table-cell
方案容易實現又功能完善(想流動就流動,想固定就固定,各欄同高,而且不需要內部div
)。然而,它只適合IE7以上版本的瀏覽器。
到目前為止,我們例子中的佈局都是在頁首和頁尾之間簡單地放著三個欄。本章最後,我們在前面三欄佈局的基礎上,再介紹一個稍微複雜一些的例子。
相關文章
- 如何實現兩欄佈局,右側自適應?三欄佈局中間自適應呢?
- CSS 兩欄佈局和三欄佈局CSS
- 常用兩欄佈局和三欄佈局
- (基礎)多欄佈局的三種基本實現方案
- 三欄佈局的n種實現
- 三欄佈局 五中解決方式
- 居中佈局、三欄佈局
- 實現三欄佈局的幾種方法
- 三種方法實現CSS三欄佈局CSS
- css多欄佈局程式碼例項CSS
- CSS佈局之三欄佈局CSS
- 三欄式佈局的幾種實現方式
- CSS:兩欄佈局CSS
- CSS-常見兩欄、三欄佈局(雙飛翼佈局、聖盃佈局)CSS
- 面試之CSS篇 - 實現三欄佈局的延伸面試CSS
- css實現左欄固定右欄自適應,高度自適應的佈局CSS
- 三欄佈局之自適應佈局
- 三欄佈局總結
- CSS實現可拉伸調整尺寸的分欄佈局CSS
- CSS3實現瀑布流佈局(display: flex/column-coCSSS3Flex
- css3實現的瀑布流佈局程式碼例項CSSS3
- css3實現動態圓形導航欄CSSS3
- CSS:三欄佈局之雙飛翼佈局CSS
- 負邊距、三欄佈局
- 面試官問:你有多少種方式實現三欄佈局?面試
- 在 Flutter 中實現一個浮動導航欄Flutter
- jQuery實現瀑布流佈局jQuery
- CSS3 column 瀑布流佈局CSSS3
- CSS 三欄佈局之聖盃佈局和雙飛翼佈局CSS
- 【CSS】三欄/兩欄寬高自適應佈局大全CSS
- CSS並不簡單:多欄佈局(Multi-Columns Layout)CSS
- UWP中實現自定義標題欄
- css實現三欄佈局的幾種方法及優缺點CSS
- SQL Server中根據某個欄位,ID欄位自動增長的實現SQLServer
- iOS導航欄佈局相關iOS
- 原生 js 實現瀑布流佈局、React 版本的瀑布流佈局元件JSReact元件
- 如何在水晶報表中動態新增欄位
- 聖盃佈局與雙飛翼佈局區別(左右兩欄固定,中間撐滿螢幕)