webkit开始支持多栏属性。
如:
section {
display: block;
height: 300px;
-webkit-column-width: 200px;
-webkit-column-gap: 50px;
}
我们设定了固定高度,然后分栏,每栏200px宽,每两栏间隔50px。如果内容较多,则可出现横向scrollbar。
然而实际栏宽并非一定是200px,而是会根据横向可用空间平均分配。比如横向空间为650px时,会有2栏。每栏宽300px,加上2栏间的间隔50px正好等于650px。如果横向空间为700px时,就会变成3栏,每栏宽200px,加上3栏间的2个间隔100px,正好等于700px。所以其行为有点类似min-width,即column至少200px宽(除非可用空间小于200px)。
我们也可以不指定column-width而指定column-count,与上述类似,也会根据横向可用空间平均分配。
我们也可同时指定column-width和column-count。当横向空间超过指定栏数n所需的最小宽度时(即column-width * n + column-gap * (n - 1)),会保持column-width不变。而不足时则会退化为与只指定column-width时的效果一致。
【注:Firefox下的行为与此不一致,貌似是直接忽略column-count。】
我们也可设定width。之前描述的各种自伸缩的情形,其实源于used width的变化。若width固定下来,则column-width也就固定下来了。
道理上,最简单和易于理解的方式是,设定width和column-width为相同值。如下:
section {
display: block;
height: 300px;
-webkit-column-width: 200px;
-webkit-column-gap: 50px;
width: 200px;
}
然而较老版本的webkit存在bug,当width小于 2 * column-width + column-gap 时,会变为只有一栏。也就是说,当不足以容纳两栏时,会退化为不存在分栏情况,因此也不会有横向scrollbar,而变成了纵向scrollbar。或者未设overflow:scroll情况下就是文字交叠在一起,这显然是很糟糕的。
如何解决这个问题呢?一种比较容易想到的方式是用脚本来遍历每个元素,然后看看它的scrollHeight是否超出height,如果超过的话,说明一栏是不足以容纳其内容的,就重置其样式,设定width为2栏所需宽度。
然而这个方式显然有很大的缺陷。如果元素的内容变化,或者样式变化(如字体变大变小)就需要将width设回column-width之后重新计算。
如果不用脚本,则width就必须设置为至少2栏宽。虽然一般并没有什么问题,在某些应用场景下会有问题。例如如果要计算该元素有几栏。本来用(scrollWidth + columnGap) / (columnWidth + columnGap) 即可得到。但是对于只需一栏的情况也会返回2。
这个问题困扰了我好一阵子。直到我突然灵光一现:
section {
display: block;
height: 300px;
-webkit-column-width: 200px;
-webkit-column-gap: 50px;
width: 450px;
margin-left: -250px;
}
section::before {
content: '';
display: block;
width: 200px;
height: 300px;
}
这里的要点是,原先问题是,对于一个只需一栏即可容纳的元素,设定2栏宽度实际造成了多了一个空白栏。要消除这个空白栏,此路不通。那么我们就反其道行之。我们不是消除空白栏,而是通过generated content来填充这个空白栏。这样原本只有一栏的内容都至少会占两栏。对于像计算栏数这样的需求,我们就可以按常规方法计算,把结果减去1,就是真正的结果了。
分享到:
相关推荐
在LabVIEW编程环境中,列表框(Listbox)是用于显示一系列可选择项目的控件,而多列列表框(Multicolumn Listbox)则扩展了这一功能,允许在一个控件内显示多列数据,使得数据组织更加清晰,用户界面更加友好。...
在LabVIEW编程环境中,多列列表控件(Multicolumn Listbox)是一种强大的用户界面元素,用于展示结构化的数据信息。这个"Easy-multicolumn-listbox-8.6.zip"文件提供了一个关于如何在LabVIEW中有效使用多列列表控件...
标题 "MultiColumn_ComboBox" 指涉的是一个在VB.NET环境中实现的多列下拉框控件。这种控件通常用于在用户界面中显示大量数据,并通过分列展示来提高可读性和用户体验。在传统的单列下拉框中,如果选项过多,用户可能...
"Multicolumn JCombobox"则是JComboBox的一种扩展,它允许在下拉列表中展示多列数据,这对于处理大量或者宽数据时非常有用,可以提高用户的可读性和交互性。 在"Multicolumn JCombobox_DEMO_multicolumncombobox_...
总的来说,"ASP.NET AJAX Extender for multicolumn drag and drop"是一个自定义的解决方案,它利用了ASP.NET AJAX的优势,通过JavaScript和服务器端代码实现了多列拖放功能。这个技术可以显著提升数据呈现的交互性...
在Android开发中,ListView是一种常见的UI组件,用于展示大量数据列表。当数据具有多个分类或者需要展示多列信息时,单列的ListView可能无法满足需求,此时就需要使用到多列ListView。本文将深入探讨如何在Android中...
修改CListBox和CComboBox窗口式样是一个复杂的问题,我们需要使用不同的方法来解决这个问题。我们可以使用ModifyStyle()或SetWindowLong()函数来修改窗口式样,但是这两个函数都不能在窗口创建后修改窗口式样。我们...
QuickRpt Bug 尾页打印页脚错误修正 Quickreport Bug { ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: QuickReport 4.0 for Delphi and C++Builder :: :: :: :: QUICKRPT.PAS - MAIN UNIT...
Column Not Found(解决方案).md
multicolumn - 创建和管理多个并排窗口 添加一名作者版本: 0.1.1 网址: : 使用多个并排窗口时有用的命令。 概述 使用多个并排窗口是利用当今存在的大型高分辨率显示器的好方法。 这个包提供了 Emacs 的“缺失...
【论文写作注意事项、总结和技巧】 论文写作是学术交流的关键环节,旨在清晰、简洁地传达研究发现。在撰写论文时,关注以下几个方面的细节能够显著提高论文的质量和可读性: 1. **符号与公式**: - 在数学公式中...
在MATLAB编程环境中,`MultiColumnListbox`是一种控件,用于显示多列数据,用户可以从中选择一个或多个项。这种控件在GUI(图形用户界面)设计中非常常见,尤其是在需要展示和操作结构化数据时。在这个“matlab开发-...
- Improved ToNRowMode and now works with multiColumn data band and subreport with PrintOnParent - Fixed bug in PDF export with transparency in Picture object and KeepAspectRatio property - Fixed ...
组合框(ComboBox)是另一个相关的控件,它的窗口类名为“COMBOBOX”,结合了编辑控件和一个关联的列表框。用户可以在编辑框中输入文本,或者从下拉列表中选择。CComboBox类是MFC为组合框提供的封装,同样通过Create...
Current version ---------------------------- - Fixed export of hyperlinks to protected PDF [6.3.5] - Fixed AV in the TfrxPreview - Fixed ParagraphGap for ...中文菜单显示异常的解决方法见压缩包里的说明
10. **调试技巧**:了解错误消息的含义是解决问题的关键,学会使用`log`文件查找问题源头。 通过深入阅读《LaTeX2e_中文》,你可以逐步熟悉这些概念,并提升LaTeX排版技能。这本书不仅适合学术写作,也适用于各类...
1. **创建列表框**:在LabVIEW的前面板上添加一个多列列表框组件。通过属性节点可以配置其显示的列数、每列的宽度以及是否启用多选。 2. **数据绑定**:将数据源连接到列表框,可以是数组或簇形式的数据,包含要...
《全国大学生数学建模Latex模板》是一份专为大学生数学建模竞赛设计的排版资源,其中包含中英文论文的模板,旨在帮助参赛者快速高效地完成论文的格式设定和内容呈现。Latex是一种基于TeX的文字处理系统,尤其适合...
localtexmf 是一个 TEX 的本地目录,用于存储用户的 TEX 文件和字体。 LATEX 排版技巧 LATEX 提供了多种排版技巧,包括: * 页眉和页脚排版:\pagestyle、\markright 等 * 章节和小节排版:\chapter、\section 等...
- Improved ToNRowMode and now works with multiColumn data band and subreport with PrintOnParent - Fixed bug in PDF export with transparency in Picture object and KeepAspectRatio property - Fixed ...