非常教程

CSS参考手册

多列布局 | Multi-column Layout

用多列布局 | CSS Columns: Using multi-column layouts

CSS多列布局的延伸块布局模式以允许文本的多个列的简单的定义。如果线条太长,人们就无法阅读文本; 如果眼睛从一条线的末端移动到另一条线的起始端需要很长的时间,那么它们就失去了他们所在的线路。因此,为了最大限度地利用大屏幕,作者应该像报纸一样将宽度有限的文本排列在一起。

不幸的是,如果不强制在固定位置进行分栏,或者严格限制文本中允许使用的标记,或者使用英雄式脚本 heroic scripting,则不可能使用CSS和HTML。这个限制是通过添加新的CSS属性来扩展传统的块布局模式来解决的。

使用列

列数和宽度

两个CSS属性控制是否显示多少列:column-countcolumn-width

column-count属性将列数设置为特定的数字。例如,

例1

HTML

<div id="col">
  <p>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna
    aliqua.
  </p>
  <p>
    Ut enim ad minim veniam, quis nostrud exercitation ullamco 
    laboris nisi ut aliquip ex ea commodo consequat.
  </p>
  <p>
    Duis aute irure dolor in reprehenderit in voluptate velit 
    esse cillum dolore eu fugiat nulla pariatur.
  </p>
  <p>
    Excepteur sint occaecat cupidatat non proident, sunt in 
    culpa qui officia deserunt mollit anim id est laborum.
  </p>
</div>

CSS

#col {
  -moz-column-count: 2;
  -webkit-column-count: 2;
  column-count: 2;
}

结果

将显示两栏中的内容(如果您使用的是多列兼容的浏览器):

column-width属性设置最小的期望列宽。如果column-count还没有设置,那么浏览器会自动创建尽可能多的列,以适应可用的宽度。

例2

HTML

<div id="wid">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
  sed do eiusmod tempor incididunt ut labore et dolore magna 
  aliqua. Ut enim ad minim veniam, quis nostrud exercitation 
  ullamco laboris nisi ut aliquip ex ea commodo consequat.
  Duis aute irure dolor in reprehenderit in voluptate velit 
  esse cillum dolore eu fugiat nulla pariatur. Excepteur sint 
  occaecat cupidatat non proident, sunt in culpa qui officia
  deserunt mollit anim id est laborum
</div>

CSS

#wid {
  -moz-column-width: 100px;
  -webkit-column-width: 100px;
  column-width: 100px;
}

结果

具体细节见CSS 3规范...

在多列块中,内容根据需要自动从一列移动到下一列。与编辑和打印一样,所有HTML,CSS和DOM功能都在列中受支持。

columns速记

大多数情况下,网页设计师将使用两个CSS属性之一:column-countcolumn-width。由于这些属性的值不重叠,因此使用简写通常很方便columns。例如

CSS声明column-width:12em可以替换为:

例3

HTML

<div id="col_short">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
  sed do eiusmod tempor incididunt ut labore et dolore magna 
  aliqua. Ut enim ad minim veniam, quis nostrud exercitation 
  ullamco laboris nisi ut aliquip ex ea commodo consequat. 
  Duis aute irure dolor in reprehenderit in voluptate velit 
  esse cillum dolore eu fugiat nulla pariatur. Excepteur sint 
  occaecat cupidatat non proident, sunt in culpa qui officia 
  deserunt mollit anim id est laborum
</div>

CSS

#col_short {
  -moz-column-width: 12em;
  -moz-columns: 12em;
  -webkit-columns: 12em;
  columns: 12em;
}

CSS声明column-count:4可改为:

例4

HTML

<div id="columns_4">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
  sed do eiusmod tempor incididunt ut labore et dolore magna 
  aliqua. Ut enim ad minim veniam, quis nostrud exercitation 
  ullamco laboris nisi ut aliquip ex ea commodo consequat. 
  Duis aute irure dolor in reprehenderit in voluptate velit 
  esse cillum dolore eu fugiat nulla pariatur. Excepteur sint 
  occaecat cupidatat non proident, sunt in culpa qui officia 
  deserunt mollit anim id est laborum
</div>

CSS

#columns_4 {
  -moz-column-count: 4;
  -moz-columns: 4;
  -webkit-columns: 4;
  columns: 4;
}

结果

两个CSS声明column-width:8emcolumn-count:12可改为:

例5

HTML

<div id="columns_12">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
  sed do eiusmod tempor incididunt ut labore et dolore magna 
  aliqua. Ut enim ad minim veniam, quis nostrud exercitation 
  ullamco laboris nisi ut aliquip ex ea commodo consequat. 
  Duis aute irure dolor in reprehenderit in voluptate velit 
  esse cillum dolore eu fugiat nulla pariatur. Excepteur sint 
  occaecat cupidatat non proident, sunt in culpa qui officia 
  deserunt mollit anim id est laborum
</div>

CSS

#columns_12 {
  -moz-columns: 12 8em;
  -webkit-columns: 12 8em;
  columns: 12 8em;
}

结果

高度平衡

CSS3列规范要求列高度必须平衡:即浏览器自动设置最大列高度,以便每列中内容的高度大致相等。Firefox做到这一点。

但是,在某些情况下,明确设置列的最大高度也很有用,然后从第一列开始布置内容,并根据需要创建尽可能多的列,可能会溢出到右侧。因此,如果高度受到限制,则通过在多列块上设置CSS heightmax-height属性,每列允许增长到该高度,并且在添加新列之前不再进一步。这种模式对于布局也更有效率。

列间隙

列之间有差距。建议的默认值是1em。可以通过将column-gap属性应用于多列块来更改此大小:

例6

HTML

<div id="column_gap">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
  sed do eiusmod tempor incididunt ut labore et dolore magna 
  aliqua. Ut enim ad minim veniam, quis nostrud exercitation 
  ullamco laboris nisi ut aliquip ex ea commodo consequat.
  Duis aute irure dolor in reprehenderit in voluptate velit 
  esse cillum dolore eu fugiat nulla pariatur. Excepteur sint 
  occaecat cupidatat non proident, sunt in culpa qui officia 
  deserunt mollit anim id est laborum
</div>

CSS

#column_gap {
  -webkit-column-count: 5;
  -moz-column-count: 5;
  column-count: 5;
  -moz-column-gap: 2em;
  -webkit-column-gap: 2em;
  column-gap: 2em;
}

结果

优美退化

列属性将被不支持列的浏览器忽略。因此,在这些浏览器中创建一个显示在单个列中的布局并且在支持浏览器时使用多个列相对比较容易。

请注意,最新版本的Firefox和Chrome支持这些属性的前缀,为了确保向后兼容旧的Firefox / Chrome版本,每个属性应该被写入三次:一次使用-moz前缀,一次使用-webkit前缀,一次使用前缀。

结语

CSS3列是一个布局原语,可以帮助Web开发人员充分利用屏幕空间。富有想象力的开发人员可能会发现它们的许多用途,特别是自动高度平衡功能。

CSS

层叠样式表( Cascading Style Sheets )是一种用来表现 HTML 或 XML 等文件样式的计算机语言。CSS 不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

CSS目录

1.动画和转换 | Animations & Transitions
2.背景和边框 | Backgrounds & Borders
3.基本框模型 | Basic Box Model
4.基本用户界面 | Basic User Interface
5.框对齐 | Box Alignment
6. 级联和继承 | Cascading & Inheritance
7.颜色 | Color
8. 合成与混合 | Compositing & Blending
9.条件和规则 | Conditional Rules
10.计数器样式 | Counter Styles
11.设备适配 | Device Adaptation
12.扩展 | Extensions
13.滤镜效果 | Filter Effects
14.灵活的框布局 | Flexible Box Layout
15.字体 | Fonts
16.片段模块 | Fragmentation
17.全屏 API | Fullscreen API
18. 生成内容 | Generated Content
19.网格布局 | Grid Layout
20.图像值 | Image Values
21.初始线格局 | Inline Layout
22.列表和计数器 | Lists & Counters
23.逻辑属性 | Logical Properties
24.面具 | Masking
25.媒体查询 | Media Queries
26.杂项 | Miscellaneous
27.Miscellaneous Level 1
28.Miscellaneous Level 2
29.运动路径 | Motion Path
30. 多列布局 | Multi-column Layout
31.命名空间 | Namespaces
32.项目模型 | Object Model View
33.网页媒体 | Paged Media
34.定位布局 | Positioned Layout
35.伪元素 | Pseudo-
36.节奏大小 | Rhythmic Sizing
37. Ruby布局 | Ruby Layout
38.可缩放矢量图形 | Scalable Vector Graphics
39.滚动快照 | Scroll Snap
40.选择 | Selectors
41.形状 | Shapes
42.文本 | Text
43.文字装饰 | Text Decoration
44.变换 | Transforms
45.值和单位 | Values & Units
46.变量 | Variables
47.写入模型 | Writing Modes
48.CSS 教程
49.CSS 创建
50.CSS Id 和 Class选择器
51.CSS 简介
52.CSS 盒子模型
53.CSS Table(表格)
54.CSS 列表样式(ul)
55.CSS 链接(link)
56.CSS Fonts(字体)
57.CSS Text(文本)
58.CSS Backgrounds(背景)
59.CSS Display(显示) 与 Visibility(可见性)
60.CSS 尺寸 (Dimension)
61.CSS 分组和嵌套
62.CSS 轮廓(outline)属性
63.CSS Border(边框)
64.CSS 图像透明/不透明
65.CSS 导航栏
66.CSS 伪元素
67.CSS 伪类
68.CSS Float(浮动)
69.CSS Position(定位)
70.CSS 总结
71.CSS 属性选择器
72.CSS 媒体类型
73.CSS 图像拼合技术
74.CSS 实例
75.CSS 组合选择符
76.响应式 Web 设计 – 框架
77.响应式 Web 设计 – 视频(Video)
78.CSS 提示工具(Tooltip)
79.CSS 布局 Overflow
80.CSS 计数器
81.CSS 表单