我想使用DL / DT / DD方法来整理表单。我需要将它们构造为表格(标签列和值列)。以下html + css工作正常,但直到我添加边距或填充到dt和/或dd。
<html><head>
<style>
dl {
width: 100%;
overflow:hidden;
}
dt {
float: left;
width: 50%;
margin: 0px;
padding: 0px;
}
dd {
float: left;
width: 50%;
margin: 0px;
padding: 0px;
}
</style></head>
<body>
<dl>
<dt>first name</dt>
<dd><input />
</dl>
</body></html>
如果我将dt的样式中的“margin:0px”替换为“margin:5px”或填充相同,则dd元素会跳到下一行。
我需要:
如何添加边距/填充并保持相对宽度(50%/ 50%)?
P.S。我见过很多关于DL和表格布局的类似问题,但我的问题是关于dl +表格布局+相对宽度+填充的组合。我可以使用相对宽度或填充,但不能同时使用它们。
答案 0 :(得分:1)
我现在找到了一个解决方案(在淋浴下!)
向左侧和右侧提供外部DL
display:block
和一些填充,这些填充会加到边距并填充DT
和DD
。现在,DL
的100%是50%内部元素的基础。现在给出你想要的边距和填充。到目前为止它不会按预期工作。然而,还有一些事情要发生。分别添加DT
和DD
的所有边距和填充。并给每个边缘(左边DT
和右边DD
),所以它们的所有边距和填充加起来为零/零/ niente / nada。 EVoilà!现在,您可以拥有所需百分比的任意组合,例如: 30% - 70%。
dl {
display: block;
overflow:hidden;
padding: 5px 15px 5px 20px;
}
/* the -15px in the margin is to compensate for the 5px in the margin and the 2 x 5px in the padding */
dt {
float: left;
width: 30%;
margin: 0px 5px 0 -15px;
padding: 5px;
background: yellow;
}
/* the -10px in the margin is to compensate for the 2 x 5px in the padding */
dd {
float: left;
width: 70%;
margin: 0px -10px 0 0px;
padding: 5px;
background: yellow;
}
答案 1 :(得分:1)
答案 2 :(得分:1)
您只需指定magical property:box-sizing: border-box
即可。然后,您可以在不增加宽度的情况下使用填充。
另请参阅:box-sizing support in ie7
box-sizing
解决填充和边框问题,但不考虑边距。如果您还想使用保证金,请使用calc()
从宽度中减去边距。例如,如果你想要一个5px左边距:
dd {
margin: 0 0 0 5px;
width: calc(50% - 5px);
}
但是,calc()
在IE8或更早版本中不起作用。
答案 3 :(得分:0)
我会在和元素中使用嵌套的DIV或跨度。现在,50%的宽度与填充或边距的需要相矛盾。
这样的事情会完成同样的事情。
<dt><div style="margin:5px;">first name</div></dt>
<dd><div style="margin:5px;"><input /></div></dd>
答案 4 :(得分:0)
你可以做的唯一事情是:
使用JavaScript获取DL
的宽度,然后计算DT
和DD
的宽度,以便width
加上margin
并且padding
加起来为DL
或者为第一列设置固定宽度,为第二列设置无宽度
或者用DT
包装每个DD
和DIV
的内容,并将margin
和padding