假设你有这个定义列表(“集合”的数量并不重要,只是有多个)。
<dl>
<dt>Authors
<dd>John
<dd>Luke
<dt>Editor
<dd>Frank
</dl>
我想让这些定义横向化解。所以你会得到这样的东西:
Authors Editor
John Frank
Luke
如果您调整浏览器的大小以使其太窄,它会像这样包装:
Authors
John
Luke
Editor
Frank
有没有办法以一种好的方式做到这一点?
如果我理解正确,dl中唯一合法的元素是dt和dd项,所以我不能将它们包装在div元素或类似的东西中。我可以在单独的dl列表中拆分它们,但这也不是真的正确,因为它确实应该是一个列表。有什么想法吗?
答案 0 :(得分:1)
没有有效的标签可以将一对dt和dd标签包装在一起。为XHTML 2.0提出了di
元素,但XHTML 2.0从未成功过。
由于每个项目都有一对内部标记,因此它不像ul
,其中每个li
标记可以充当每个列表项内容的内部包装(在这种情况下代理作为每列的包装。)
基本上,要么为每列使用dl
或ul
。语义标记很好,但没有di
,单个dl
就没有为这种类型的布局做好准备。
修改强>
正如@biziclop所提到的,一旦CSS3 Multiple-column layout被标准化并且supported,就有可能在正确的位置打破列(除了布局方面有限的选项)。最终,代码看起来像这样:
dl {column-width:100px; column-fill:auto;}
dt {break-before:always;}
答案 1 :(得分:0)
我使用一组无序列表解决了这个问题: 请在此处查看:http://jsfiddle.net/radialglo/pXLB4/请注意,不需要设置宽度,但为了演示目的,我设置了足够大的宽度,以便将其推到下一行。拖动小提琴上的html视口。
<div>
<ul>Authors
<li>John</li>
<li>Luke</li>
</ul>
<ul>
<li>Editor</li>
<li>Frank</li>
</ul>
</div>
和这个样式:
div ul{
float: left;
list-style: none;
width: 100px;
margin-bottom: 1em;
}
如果您坚持使用语义,我不确定是否有可行的解决方案。这是因为每个定义术语及其定义都不是以易于设置的方式分组吗?
答案 2 :(得分:0)
让我们来玩css3不太受支持的多列功能:
缺点:
dl {
-webkit-column-width: 100px;
-moz-column-width: 100px;
column-width: 100px;
/* fixed height MUST be used */
height: 200px;
}
dt ~ dt {
/* simulate column-break-before: always; */
margin-top: 1000px;
}
答案 3 :(得分:0)
有可能使用一些绝对定位和nth-of-type选择器(旧浏览器无法识别 - 哎呀! - 但媒体查询也不是,所以应该降级OK):演示:http://jsfiddle.net/PrJWJ/6/
dt,dd{margin:0;}
@media (min-width:20em) /* 10em per column */
{
/* Enable positioning*/
dl{position:relative;}
dt,dd{position:absolute;}
dt{top:0;} /* All terms at the top */
dd{top:1.3em;} /* 1st dd under a term at 1.3em (factoring in line spacing) */
dd+dd{top:2.6em;} /* 2nd dd under a term */
/* 1st column */
dt:nth-of-type(1),
dt:nth-of-type(1)~dd
{left:0;}
/* 2nd column */
dt:nth-of-type(2),
dt:nth-of-type(2)~dd
{left:10em;}
}
@media (max-width:19.99em)
{
/* Space before a new term */
dd+dt{margin-top:1em;}
}
但是,您需要根据最大可能的行数和列数来扩展它。