淺談CSS3多列布局
相信大家都看過報紙,報紙上的內容大多數都是分欄顯示的,如下圖所示:
現在,強大的CSS3為我們提供了“multi-column”,讓我們可以很輕松的實現這樣的分列布局。
先來看看與多列布局(multi-column)相關的css屬性有哪些:
列數和列寬:column-count、column-width、columns
列的間距和分列樣式:column-gap、column-rule-color、column-rule-style、column-rule-width、column-rule
跨越列:column-span
填充列:column-fill
分欄符:column-break-before、column-break-after、column-break-inside
整體看一下這些屬性對應的位置:
1、列數和列寬
1.1 列數(column-count)
column-count:用來指定一個多列元素的列數。
語法:
column-count: auto || number
auto是column-count的默認值,當設置為auto時,元素分欄由其他屬性決定,比如后面要講的column-width;它還可以是任何正整數數字,不能帶單位,用來表示多列布局的列數。
需要注意的是,在Firefox和Webkit下還是需要各自的私有屬性:-moz和-webkit
實例:
css.columns3{
-moz-column-count: 3;
-webkit-column-count: 3;
column-count: 3;
}
.columns4{
-moz-column-count: 4;
-webkit-column-count: 4;
column-count: 4;
}
效果圖:
1.2 列寬(column-width)
column-width:用來設置多列布局的列寬。
語法:
column-width: auto || length;
默認值為auto,如果設置為auto或沒有顯式的設置此值時,列寬由其他屬性來決定,比如:由column-count來決定;此值還可以用固定值來設置列寬,單位可以是px或em,但不能是負值。
實例:
/*左圖*/
.columnsWidth1{
-moz-column-width: 100px;
-webkit-column-width: 100px;
column-width: 100px;
}
/*右圖*/
.columnsWidth2{
-moz-column-width: 75px;
-webkit-column-width: 75px;
column-width: 75px;
}
效果圖:
2、列的間距和分列樣式
2.1 列的間距(column-gap)
column-gap:用來設置列與列之間的距離。
語法:
column-gap: normal || length;
默認值為normal,W3C建議1em值。此值還可以是任何非負整數值,單位可以是px、em、vw等。
兼容性:兼容性
實例:
.gap{
-moz-column-gap: 40px;
-webkit-column-gap: 40px;
column-gap:40px;
}
效果圖:
注意:column-gap設置的值只作用于列與列之間。
2.2 分列樣式(column-rule)
column-rule:用來設置列與列之間的邊框寬度、樣式和顏色。
語法:
column-rule: || || ;
參數說明:
column-rule-width
column-rule-width:用來設置column-rule的樣式,默認值為“none”,類似于border-width屬性。
column-rule-style
column-rule-style:用來設置column-rule的樣式,默認為none,此屬性的樣式和border-style的樣式一樣:
column-rule-style: none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset;
column-rule-color
column-rule-color:用來設置column-rule的顏色,類似border-color屬性,如果不想顯示顏色,可設置為transparent(透明色)。
column-rule還可以拆分開來:
column-rule-width: length;
column-rule-style: style;
column-rule-color: color;
兼容性:兼容性
實例:
.rule1{
-moz-column-rule-width: 5px;
-webkit-column-rule-width: 5px;
column-rule-width: 5px;
-moz-column-rule-style:dotted;
-webkit-column-rule-style:dotted;
column-rule-style:dotted;
-moz-column-rule-color:blue;
-webkit-column-rule-color:blue;
column-rule-color:blue;
}
.rule2{
-moz-column-rule: 5px double red;
-webkit-column-rule: 5px double red;
column-rule: 5px double red;
}
效果圖:
注意:column-rule并不會占據空間位置,看下面的例子:
.rule3{
-moz-column-rule: 50px solid red;
-webkit-column-rule: 50px solid red;
column-rule: 50px solid red;
}
效果圖:
從上面的例子可以看出,column-rule-width增大并不會影響列的布局,只是將其往元素兩邊擴展。
3、跨越列
column-span:指定某個元素跨越多少列。
語法:
column-span: none || all;
默認值為none,表示不跨越任何列;all表示元素跨越所有列。
實例:
.columns{
border:1px solid #000;
padding:10px;
width:350px;
columns:auto 3;
}
h2{
-webkit-column-span:all;
column-span:all;
}
效果圖:
標題h2按列的布局跨越了三列布局,也就是當前的所有列。
5、填充列
column-fill:用來設置元素所有列的高度是否統一。
語法:
column-fill: auto || balance;
默認值為auto,表示列高度自適應內容;此值設為balance時,所有列的高度以其中最高的一列統一。
兼容寫法:
-moz-column-fill: auto || balance;
-webkit-column-fill: auto || balance;
column-fill: auto || balance;
兼容性:兼容性
6、分欄符
column-break-before、column-break-after、column-break-inside三個屬性都是用來設置對象何時斷行。
column-break-before:設置或檢索對象之前是否斷行。
column-break-after:設置或檢索對象之后是否斷行。
column-break-inside:設置或檢索對象內部是否斷行。
語法:
-webkit-column-break-before
column-break-before
-webkit-column-break-after
column-after
-webkit-column-break-inside
column-break-inside
目前僅支持Webkit瀏覽器,同時需要加上私有屬性。