两个dl并排失败主因是默认display:block导致垂直堆叠;推荐用inline-block(需设width、vertical-align并处理空格间隙)或flex布局(容器设display:flex,注意IE兼容性)。

两个 dl 元素并排显示的常见失败原因
直接写两个 dl 并不会自动并排,浏览器默认把它们当块级元素垂直堆叠。这不是 bug,是规范行为——dl 和 div 一样,默认 display: block。
你看到的“没反应”“还是换行”,大概率是因为没改布局模式,或者用了不兼容的 CSS(比如在老 IE 里乱用 display: flex)。
用 display: inline-block 最快见效
这是兼容性最好、最轻量的方案,适合静态内容或简单布局。
- 给两个
dl都加display: inline-block,再控制vertical-align对齐(推荐top或middle) - 注意:
inline-block会吃掉 html 换行符产生的空格,导致两列间有几像素间隙;解决方法要么删换行,要么设父容器font-size: 0,再单独给dl设字体大小 - 别漏掉
width—— 不设宽的话,inline-block会按内容收缩,可能挤成一列
- A
- 1
- B
- 2
用 flex 布局更可控但需留意兼容性
如果目标环境支持 Flexbox(现代浏览器基本都 OK),这是更干净的选择。
立即学习“前端免费学习笔记(深入)”;
- 把两个
dl包进一个容器(比如div),对容器设display: flex - 用
flex-wrap: nowrap防止小屏下换行(默认就是不换) - IE10/11 对 Flex 支持有坑:比如
dl在 IE 中可能不继承父容器的flex行为,得显式加flex: 1或设min-width - 别对
dl单独设Float或display: inline,会和flex冲突
为什么不用 float?
虽然历史上有人用 float: left 搞并排,但现在真没必要。
-
float会脱离文档流,父容器容易塌陷,得额外清浮(overflow: hidden或伪元素) -
dl内部结构(dt/dd)在浮动后可能错位,尤其遇到换行或长文本时 - 一旦要响应式(比如小屏变单列),
float的 media query 切换比flex或inline-block更难维护
真正卡住的时候,往往不是语法写错,而是忘了重置默认 margin/padding,或者父容器宽度不够硬生生把第二列顶下去了——检查计算后的 width 和 box-sizing。