如何横向进行<dl>布局?

Dav*_*d Z 4 css xhtml

我正在尝试为我的网站开发一个布局,其中定义列表的元素将水平排列,有点像这样:

term 1                term 2               term 3
definition 1          definition 2         definition 3

有人知道使用有效的CSS制作定义列表的方法吗?或者,如果我不能用a <dl>,那么推荐的结构是什么?

Tat*_*nen 7

这应该这样做:

<dl>
    <dt>term 1</dt>
    <dd>definition 1</dd>
</dl>
<dl>
    <dt>term 2</dt>
    <dd>definition 2</dd>
</dl>
<dl>
    <dt>term 3</dt>
    <dd>definition 3</dd>
</dl>
Run Code Online (Sandbox Code Playgroud)

在CSS中:

dl {
    float: left;
}

dl dd {
    display: block;
    margin: 0;
}
Run Code Online (Sandbox Code Playgroud)

根据需要应用其他样式.可以在这里找到一个工作示例:

http://www.ulmanen.fi/stuff/dl.php

  • 通常,您希望将相关定义放在一个列表中. (4认同)
  • 事实上,"<dl>"必须被滥用(通过将多个实例作为单个列表包含在内)来实现这一事实实际上暴露了当前规范中字典列表结构背后的基本原理中的缺陷.多个定义(或多个术语)可以按文档顺序隐式分组,但它们不能明确地,声明性地分组,这使得在逻辑上对这些分组起作用是非常重要的. (2认同)

Wil*_*ill 6

dl僵尸问题复活,但接受的答案完全打破了首先使用 a 的整个原因。有更好的方法。

来自DL 的 HTML 规范(重点是我的):

为了使用微数据属性或适用于整个组的其他全局属性来注释组,或者仅出于样式目的,可以将 dl 元素中的每个组包装在 div 元素中。这不会改变 dl ​​元素的语义。

当然,用flexbox就可以轻松解决。

dl {
  display: flex;
  justify-content: space-between;
}

/* Below is just styling. Adjust as needed. */
dt {
 font-weight: bold;
}
dt,
dd {
  margin: 0;
  padding: 0;
}
/* Small screens */
@media screen and (max-width: 400px) {
  dl {
     flex-direction: column;
  }
  dl div {
    padding: 1em 1em 0 1em;
  }
}
Run Code Online (Sandbox Code Playgroud)
<dl>
  <div>
    <dt>term 1</dt>
    <dd>definition 1</dd>
  </div>
  <div>
    <dt>term 2</dt>
    <dd>definition 2</dd>
    <dd>definition 2.1</dd>
    <dd>definition 2.2</dd>
  </div>
  <div>
    <dt>term 3</dt>
    <dd>definition 3</dd>
  </div>
  <div>
    <dt>term 4</dt>
    <dd>definition 4</dd>
  </div>
</dl>
Run Code Online (Sandbox Code Playgroud)