我建议使用 CSS 列:
<!-- note that I've used 'container' as an id, rather than just free floating
the string within the tag (which would make it an invalid attribute) -->
<div id="container">
<div>hobby 1</div>
<div>hobby 2</div>
<div>hobby 3</div>
<div>hobby 4</div>
<div>hobby 5</div>
<div>hobby 6</div>
<div>hobby 7</div>
</div>
使用 CSS:
#container {
-moz-column-count: 3;
-ms-column-count: 3;
-o-column-count: 3;
-webkit-column-count: 3;
column-count: 3;
}
JS 小提琴演示。
显然,这个解决方案需要浏览器实现 CSS 多列布局模块,可以使用 CSS 来测试浏览器对给定 CSS 属性值对的支持(尽管这有其问题,而且支持得更差)比 CSS 列,但是如果浏览器支持@supports ()
语法,那么它很有可能也支持列:
/* defaults, to style if columns are not supported: */
#container {
}
#container div {
display: inline-block;
height: 1.5em;
line-height: 1.5em;
text-indent: 0.5em;
float: left;
width: 30%;
border: 1px solid #000;
margin: 0 0.5em 0.2em 0.5em;
}
/* testing for support for the given property-name and the property-value: */
@supports (-moz-column-count: 3) or (-ms-column-count: 3) or (-o-column-count: 3) or (-webkit-clumn-count: 3) or (column-count: 3) {
/* if the browser supports the property-name and property-value, the following styles are used, if the browser doesn't understand the syntax the rules are discarded */
#container {
-moz-column-count: 3;
-ms-column-count: 3;
-o-column-count: 3;
-webkit-column-count: 3;
column-count: 3;
}
#container div {
/* unset the 'if not supported' styling */
display: block;
float: none;
/* aesthetics, just because; adjust to taste */
width: 90%;
margin: 0 auto 0.5em auto;
}
}
JS 小提琴演示。
现在,上面我说@supports
有“问题”;引用埃里克·迈耶的话:
如果 CSS 处理器接受该声明(而不是将其作为解析错误丢弃),则认为它支持声明(由属性和值组成)。如果处理器没有以可用的支持级别实现给定的值,则它不能接受声明或声明对它的支持。
所以在第一句话中,我们被告知的是“支持”意味着“接受[a] 声明”并且不会将其作为它不承认的东西丢在地上。换句话说,如果浏览器解析一个属性:值对,那么这就是对所述对的“支持”。请注意,这句话没有说明解析后会发生什么。据此,浏览器可能有一个完全拙劣的、部分的、通常无法使用的属性:值对的实现,但识别的行为意味着存在“支持”。
参考:“不支持的承诺”,作者 Eric Meyer,访问时间:2013-10-03,23:43(英国夏令时间)
尽管如此,它似乎可以工作(在这种情况下,在 Ubuntu 12.10 上的 Chromium 28 中进行了测试),但显然可能很脆弱。
参考: