《轉載》使用CSS3 Flexbox布局

來源:互聯網
上載者:User

標籤:

Flexbox(中文版本可以點擊這裡)的布局是一個用於頁面配置的全新CSS3模組功能。它可以把列表放在同一個方向(從左至右或從上到下排列),並且讓這些列表能延伸到佔用可用的空間。較為複雜的布局可以通過嵌套一個伸縮容器(flex container)來輔助實現。

Flexbox可以簡單快速的建立一個具有彈性功能的布局,當在一個小螢幕上顯示的時候,Flexbox可以讓元素在容器(伸縮容器)中進行自由擴充和收縮,從而容易調整整個布局。它的目的是使用常見的配置模式,比如說三列布局,可以非常簡單的實現。

 

看看一些例子來瞭解Flexbox擅長哪種東西。

伸縮容器(flex containers)和伸縮項目(flex items)

一個Flexbox布局是由一個伸縮容器(flex containers)和在這個容器裡的伸縮項目(flex items)組成。

伸縮容器(flex containers)是一個HTML標籤元素,並且“display”屬性顯式的設定了“flex”屬性值。在伸縮容器中的所有子項目都會自動變成伸縮項目(flex items)。

這有一個三列布局的例子。外面的div容器是一個伸縮容器,而裡面的left、main和right三個div都是伸縮項目:

設定一個簡單的伸縮容器很容易,代碼如下:

<div class="container"></div>    .container {  display: flex;}    
伸縮方向與換行(flex-flow)

伸縮容器有一個CSS屬性“flex-flow”用來決定伸縮項目的布局方式。如果伸縮容器設定了“flex-flow”值為“row”,伸縮項目排列由左向右排列:

如果“flex-flow”值設定為“column”,伸縮項目排列由上至下排列:

這裡將展處樣設定伸縮容器,使用伸縮項目在一行中顯示:

.container {  display: flex;  flex-flow: row;}    

一個伸縮容器中的所有伸縮項目既可以排列在單行也可以多行排列。這個主要由“flex-flow”是否設定為“wrap”來決定。如果伸縮容器設定了“wrap”屬性值,當伸縮項目在伸縮容器中無法在一行中顯示的時候會另起一行排列。

這裡展示了如何將伸縮容器設定為“wrap”:

.container {  display: flex;  flex-flow: row wrap;}    
伸縮項目(flex items)

在伸縮容器中的所有子項目都將自動變成伸縮項目。沒有額外配置CSS的必要。你唯一需要的做的就是設定伸縮項目的尺寸。

如果伸縮容器把“flex-flow”設定為“row”後,伸縮項目將需要設定他們的寬度。伸縮項目的高度將會自動化佈建為伸縮容器的高度:

如果伸縮容器把“flex-flow”設定為“column”後,伸縮項目將需要設定他們的高度,伸縮項目的寬度將會自動化佈建為伸縮容器的寬度:

給伸縮項目設定“width”和“height”屬性來定義伸縮項目尺寸,而這個伸縮項目是獨立於其他伸縮項目。例如,如果我們給主內容(content)設定了一個600px的寬度,不管伸縮容器中有一個、兩個或者上百個伸縮項目,主內容的寬度都是600px。

如果你想伸縮項目根據伸縮容器剩餘的空間來決定伸縮項目的寬度,你可以使用“flex”屬性。例如,我們可以告訴瀏覽器,左側邊欄和右側邊欄佔用了伸縮容器減去主內容寬度的空間。

flex的值於對應的空間成正比。如果左側邊欄設定了值為“1”和右側邊欄設定了值為“2”,伸縮容器剩餘的空間將按比例分配給左側邊欄和右側邊欄,並且右側邊欄所佔的空間是左側邊欄的兩倍:

下面是樣本中運用在伸縮項目上的一些代碼,展示了獨立寬度和按比例計算的寬度:

.main {  width: 600px;}.left {  flex: 1;}.right {  flex: 2;}    
完整的執行個體

這是一個很簡單的執行個體,Flexbox建立了一個經典的三列布局。主內容寬度為60%,而側邊欄是使用“flex”屬性,按比例自動根據伸縮容器剩餘空間計算得到對應的寬度:

HTML結構
<div class="container">  <nav class="nav left">…</nav>   <section class="main">    …  </section>   <nav class="nav right">…</nav></div>    
CSS代碼
.container {  display: flex;  flex-flow: row;}.main {  width: 60%;}.left {  flex: 1;}.right {  flex: 2;}    
樣本效果

線上示範案例。

瀏覽器支援

在2012年寫作時,瀏覽器支援定案(最新版本)文法並不是很好。這個例子可以在Opera和webkit內容的Chrome下運行很好(webkit下需要添加首碼-webkit)。

在我的文章範例程式碼中沒有寫上瀏覽器的首碼,主要是讓大家更好的理解。在2013年03月前為了更廣泛的支援瀏覽器,你需要添加webkit核心和ie瀏覽器的首碼。你也可能需要考慮添加支援flexbox的老文法版本。我個人認為可以先學習flexbox的使用,在實際項目中延遲使用,直到最終的文法得到更多瀏覽器的支援。

 

原文連結:http://www.w3cplus.com/css3/css3-flexbox-layout.html

 

《轉載》使用CSS3 Flexbox布局

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.