CSS多列布局


前面的話

   CSS新增了多列布局特性,可以讓瀏覽器確定何時結束一列和開始下一列,無需任何額外的標記。簡單來說,就是CSS3多列布局可以自動將內容按指定的列數排列,這種特性實現的布局效果和報紙、雜志類排版非常相似。本文將詳細介紹CSS多列布局的基本屬性和用法

 

列寬

  column-width主要用於給元素指定最優的列寬度,實際列寬可能會更寬或更窄。如果不設置高度,文字將自動撐滿整列,且最后一列的標點會溢出到容器外

  [注意]IE10+和chrome瀏覽器支持標准寫法,而firefox、safari瀏覽器及移動端android、IOS需要添加前綴

column-width

  值: auto | <length>

  初始值: auto

  應用於: block、inline-block、table-cell(firefox不支持為table-cell設置該屬性)

  繼承性: 無

  [注意]column-width不可為0和負值;當column-width的值為auto或column-width的值大於元素寬度width一半時,沒有分列效果(更准確地,由其他屬性來決定)

列數

  column-count主要用於給元素指定允許的最大列數

  [注意]IE10+和chrome瀏覽器支持標准寫法,而firefox、safari瀏覽器及移動端android、IOS需要添加前綴

column-count

  值: auto | <length>

  初始值: auto

  應用於: block、inline-block、table-cell(firefox不支持為table-cell設置該屬性)

  繼承性: 無

  [注意]column-count不可為0和負值;當column-count的值為auto時,默認沒有分列效果(更准確地,由其他屬性來決定)

列間距

  列間距column-gap用於定義相鄰兩列之間的空白間距

  [注意]IE10+和chrome瀏覽器支持標准寫法,而firefox、safari瀏覽器及移動端android、IOS需要添加前綴

column-gap

  值: normal | <length>

  初始值: normal

  應用於: block、inline-block、table-cell

  繼承性: 無

  [注意]column-gap的normal值默認情況下相當於1em。column-gap值不可為負值

列rule

  該屬性用於繪制位於列間距水平中心的線條。該樣式由column-rule-width、column-rule-style、column-rule-color這三條樣式組成

  [注意]IE10+和chrome瀏覽器支持標准寫法,而firefox、safari瀏覽器及移動端android、IOS需要添加前綴

column-rule

  值: <column-rule-width> || <column-rule-style> || <column-rule-color>

  標准中說column-rule類似於border,但實際更類似於outline,因為該樣式並不占據實際的物理尺寸。outline詳細情況移步至此

  [注意]如果column-rule-width的寬度大於column-gap的寬度,則可能會顯示在列框內容中

跨列

  column-span屬性用來定義子元素是否跨列

  [注意]firefox不支持該屬性,IE10+和chrome瀏覽器支持標准寫法,而safari瀏覽器及移動端android、IOS需要添加前綴

column-span

  值: none | all

  初始值: none

  應用於: block元素、table-cell元素(只有safari支持為table-cell設置該屬性)

  繼承性: 無

none: 默認不跨列
all: 跨越所有列

  [注意]當跨列元素被絕對定位(包括固定定位)或浮動后,跨列將不生效

  [注意]當跨列元素與column-rule的修飾線重疊時,在IE和safari中,跨列元素將覆蓋修飾線,而chrome瀏覽器存在bug,跨列元素的文本覆蓋修飾線,但跨列元素的背景可能會消失。

列填充

  在列布局中,有時由於內容不足,多列中的最后列往往沒有足夠內容填充,這時要實現所有列都具有相同高度的效果,需要使用列填充屬性column-fill

column-fill

  值: auto | balance

  初始值: auto

  應用於: block、inline-block

  繼承性: 無

auto: 默認各列高度隨內容變化而變化
balance: 各列高度根據內容最多的一列進行統一

  [注意]目前只有firefox支持帶前綴的column-fill屬性

多列

  一般地,我們只關心是否分列以及列寬多少,對列間距並不考慮。於是,column這個column-width和column-count的復合屬性就得到了比較廣泛的使用

columns: column-width || column-count

  [注意]由於column-width和column-count這兩個值的單位不同,所以順序無關

  要知道,多列布局主要由列寬、列間距、列數及元素寬度影響,其布局等式是

     元素寬度 = 列數 * 列寬 + (列數-1)*列間距 <=> 列數*(列寬+列間距) - 列間距 = 元素寬度
     或者, 列數 = (元素寬度+列間距)/(列寬+列間距) 或者, 列寬 = (元素寬度+列間距)/列數 - 列間距

  此等式中,列間距為定值,其他三個值為可變值,以下是各個值推算情況,其中N為實際列數,W為實際列寬

【1】如果元素寬度為auto,且列寬和列數都不是auto

  則 N = column-count W = column-width;

【2】如果列寬為auto,但列數不是auto,元素寬度不為auto

  則 N = column-count W = max(0,(元素寬度 - ((N-1)*列間距))/N)

【3】如果列寬不為auto,但列數是auto,元素寬度不為auto

  則 N = max(1,floor((元素寬度 + 列間距) / (列寬 + 列間距 )) W = ((元素寬度 + 列間距) / N) - 列間距

【4】如果列寬和列數都不是auto,元素寬度不為auto

  則 N = min(列寬 , floor((元素寬度 + 列間距) / (列寬 + 列間距))) W = ((元素寬度 + 列間距) / N) - 列間距

  [注意]若列數為小數,只保留整數部分

  [注意]所有的情況都是先推算出實際列數,再由實際列數推算實際列寬


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM