IE10+浏览器均支持分栏布局。各个分栏是等宽的。
分栏的每栏高度不总是相等的,内容的分割也不总是均匀的,各个浏览器的算法也会有不同,展示效果也会各有差异。
分栏布局有个优点:不会改变元素原本的display计算值。比如为ul设置 columns:2; 那么li仍是列表项,list-style还跟原来一样。
columns 属性
columns 属性是 column-width 和 column-count 两个属性的缩写。它的属性值可以出现任意一项或两项一起出现。
column-width
可以设置为一个固定的长度值,需要注意的是这里不能设置为百分比。
所设置的值更像一个期望的尺寸,浏览器会根据这个值计算分栏数目,计算之后这个值的使命就完成了,所以最终的分栏宽度往往跟所设置的值会有所不同。
column-count
可以设置为分栏的数量。也可设置为auto。
同时设置两个参数
两个参数顺序可以随意。当设置了两个参数的情况下,浏览器会先将两个值统一转化成分栏数,哪个结果小,就最终采用哪个值。
column-gap 属性
用以设置栏间距,可以是具体的长度值,也可以是百分比值。
在不考虑IE浏览器的情况下,也可以用【gap】属性来替代column-gap。gap属性是CSS规范为了统一flex、grid、column等布局方式的间隙设置而新增的新属性。
column-rule 属性
column-rule 其实是 column-rule-width,column-rule-style,column-rule-color 这三个属性的缩写。类似border属性。
用于设置分栏线的样式。
column-span 属性
用来设置某一个内容是否可以跨多栏显示。有点类似表格里面的colspan。不过这个值仅可以设置为 none 或者 all。更像一个开关,不可指定跨的栏数。
Demo
https://demo.cssworld.cn/new/6/1-4.php
在demo中可以看到chrome下有个bug,左下角有一个原因不明的神秘空间,P元素上边距设置为0后,此空间消失。Firefox没有这个问题。
另外从这个demo中可以看到,第一个元素的上边距无法参与分栏计算,所以会多出一个空白区域。
column-fill 属性
默认值为:balance。意思是保持各栏内容的平衡,除了最后一栏有时内容会较少。
还可以设置为:auto,意思是优先填充前面的列。可想而知这种情况需要提前设置好容器元素的高度值。
还有一个值:balance-all,意思是全面平衡,不过没有任意浏览器支持这个值。忽略即可。
break-inside 属性
该属性用于定义一个元素在【打印分页】、【分栏布局跨列】的情况下是否可以进行分割。
auto:可分割
avoid:不可分割
设为不可分割的情况下,元素会整体移至下一列显示。
box-decoration-break 属性
【盒子装饰拆分属性】该属性可以用于控制如下场景:(IE/Edge完全不支持)
- 行内元素换行(chrome目前仅支持这种场景)
- 元素内分栏
- 打印分页
设置为 slice(默认值):意思是分割。比如一个圆角矩形(4 4 4 4)会被切割成一个(4 4 0 0)一个(0 0 4 4)。
设置为 clone:意思是各自拥有完成的装饰。一个圆角矩形(4 4 4 4)会被切割成两个(4 4 4 4)。