【发布时间】:2012-03-26 00:28:21
【问题描述】:
我在使用 CSS 设置 dl 和 dt 元素的样式时遇到以下问题。我更喜欢总是使用与 IE6/IE7 和现代浏览器兼容的非常基本的 CSS。我正在尝试获得一个效果,对我来说应该很容易实现。
这是我正在使用的初始源代码的精简版本,用于尝试解决这个问题:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<style type="text/css">
.terms dl {
float: left;
padding-left: 0px;
}
.terms dt, .terms dd {
text-align: center;
margin: 0px;
float: left;
}
.terms dt {
border: solid blue 1px;
clear: left;
}
.terms dd {
border: solid red 1px;
margin-right: 40px;
margin-left: 40px;
}
</style>
</head>
<body>
<div class="terms">
<h1>Terms</h1>
<dl>
<dt>Term 1:</dt>
<dd>Very Long definition for this term here</dd>
<dt>Term 2:</dt>
<dd>Definition for term</dd>
<dt>Term 3 with longer term title:</dt>
<dd>Definition for term</dd>
<dt>Term 4:</dt>
<dd>Definition for term</dd>
<dt>Term 5:</dt>
<dd>Definition for term</dd>
<dt>Term 6:</dt>
<dd>Definition for term</dd>
</dl>
<dl>
<dt>Term 7:</dt>
<dd>Defintion for term</dd>
<dt>Term 8:</dt>
<dd>Definition for term</dd>
<dt>Term 9:</dt>
<dd>Definition for term</dd>
<dt>Term 10:</dt>
<dd>Very Long definition for this term here</dd>
<dt>Term 11:</dt>
<dd>Definition for term</dd>
<dt>Term 12:</dt>
<dd>Definition for term</dd>
</dl>
</div>
</body>
</html>
这是视觉效果。我设计了蓝色和红色边框,以便更容易可视化:
我的目标是让所有蓝色和红色“框”具有相同的宽度,无论文本大小设置是多少。例如。如果用户有一个默认样式表来使他们的文本非常大,它应该相应地扩展。这个问题不仅在人们使用他们自己的样式表时出现,而且在 IE6 中当人们选择“中等”以外的“文本大小”时也会出现——它使文本变大,我希望能够适应这种情况。
我认为我不想在任何“框”上设置硬宽度,并且我不希望在这两个列样式之外对文本进行任何换行或让浮动下降。
如果我不够清楚,我可以用更多图片和示例来编辑答案。
另外,这是一个相关但独立的问题。如果重新调整浏览器窗口的大小,使用表格,您会希望表格的一部分在您减小宽度时变得不再可见。使用此设置,您会得到一个非常奇怪和丑陋的结果,如下所示。如何避免这种情况?
更新
似乎没有不涉及为元素(和/或封装元素)提供固定宽度的解决方案。此外,似乎 IE6 文本调整大小只能通过将文本硬设置为像素大小而不让他们重新调整大小来解决。
【问题讨论】:
-
那你为什么不用一张桌子呢?
-
语义目的,标记表示术语和定义的列表;不是表格数据。我想将标记的语义与样式分开。据我所知,这是
dl元素和 CSS 的目的。 -
表格本身并不是邪恶的,要不惜一切代价避免。它们非常适合显示、惊喜、表格数据 - 看起来确实适用于这种情况。
-
正如我所说,“标记代表术语和定义的列表;而不是表格数据。”无论如何,这不是一个答案,而是一个问题。我回答了我为什么不使用桌子的问题,并给出了清晰合理的答案。
-
然后为你的 dt 元素添加一个宽度属性: .terms dt { width:180px;文本对齐:左;边框:纯蓝色1px;清除:左; }