前几天我看到老朋友 Dave Rupert 在 CodePen 上玩横向布局。他发现了一些我之前不知道的东西。如果你愿意,可以称之为 CSS 技巧。
当您使用 CSS columns 并设置 column-count
为 2 时,内容将被分成 2 列, *在可见区域内*。这并不意味着只有两列。如果内容超出该元素(如果设置了固定高度很容易发生),则会在水平方向上创建更多列。此外,您可以使该溢出内容可滚动。
查看 Chris Coyier (@chriscoyier) 在 CodePen 上创建的示例 wBpYGm。
当我看到它时,我就像 *哇,就像 iBooks!* 两列。底部有滚动条。

只需稍微调整一下样式,我们就可以做到这一点。我们甚至可以使用整个浏览器窗口来实现它。
* {
box-sizing: border-box;
}
html {
height: 100%;
}
body {
height: 100%;
padding: 2em;
font-family: 'Gentium Basic', serif;
column-count: 2;
column-gap: 4em;
}
Dave 还尝试了轻松分页的方法。点击屏幕的右侧,滚动超过 2 列(屏幕的宽度)。点击屏幕的左侧,向后滚动。
var scrollLeft = function() {
window.scrollTo(window.scrollX - window.innerWidth, 0);
};
var scrollRight = function() {
window.scrollTo(window.scrollX + window.innerWidth, 0);
};
document.body.addEventListener('click', function(e) {
e.preventDefault();
if (e.clientX > (window.innerWidth / 2)) {
scrollRight();
} else {
scrollLeft();
}
});
查看 Chris Coyier (@chriscoyier) 在 CodePen 上创建的示例 巴斯克维尔的猎犬。
我相信你们这些聪明人可以做得更酷,例如实现吸附滚动(这样就不会在列之间滚动)、进度指示器、localStorage 保存位置、@media 查询以在 column-count
中上下切换,以及所有这些酷炫的东西。
嘿,酷!可以看到很多潜在的用途。想看看它如何处理图像;是否可以在没有 JS 干预的情况下“100% 占据列宽”?
太棒了。喜欢排版和巴斯克维尔的猎犬的使用。哦,还有所有这些 CSS 技巧。:D
非常好的帖子,谢谢
这很不错,也是 CSS columns 的隐藏优势之一。尽管我非常想在我的项目中使用它们,但它们并没有涵盖更复杂布局的足够多的需求,尤其是在分页方面(例如,'page' 边距和列间距的不同值)以及跨多列的标题/图像(CSS 仅支持
column-span: none
和column-span: all
)。因此,我最终编写了自己的 JavaScript 库来扩展纯 CSS 可以实现的功能,它已在许多大型应用程序中投入生产,例如 http://app.economist.com。查看 https://github.com/ftlabs/ftcolumnflow。在第二个演示中,翻页后调整浏览器窗口大小,列不再正确对齐。不过仍然很棒!
非常酷!我喜欢它仍然可以使用 shape-outside。
太酷了,
我之前也做过一些实验
http://codepen.io/long-lazuli/pen/raeLyd
但我主要关注鼠标滚轮。
我相信我们都可以改进一点,但对我来说,这绝对是一个不错的“用户体验”想法!
待续 :-)
您刚刚重新创建了 面向分页媒体的生成内容 CSS 模块。之前有一个类似的东西叫做 Opera Reader,它在旧版 Opera Presto 中实现,观看视频。
一个经典的 CSS 技巧。不错。
我也赞同……一个不错的旧 CSS 技巧……很高兴看到它……谢谢分享……
Michael
两年前尝试过水平分页:http://codepen.io/Merri/pen/DEktJ/
我认为现在使用这个技巧相当安全,两年前在生产网站上使用它还为时过早。
在我从事移动应用程序开发时,我们在许多杂志和报纸中使用这种技术进行分栏布局。对我们来说,分页由原生包装应用程序而不是 Javascript 管理,但实际内容只是 HTML 和 CSS。
当您需要跨列的图像时,就会出现棘手的问题,正如 George Crawford 上面提到的那样。我们对此的解决方案是纯 CSS 而不是 Javascript,但这有点像黑客手段——语义纯粹主义者无疑会感到震惊。
几年前我在一篇博文中写过这方面的内容,如果有人对更多细节感兴趣。
使用 CSS 实现高级分栏布局