html - 处理 CSS margin/padding "conflicts"的最佳实践是什么?

标签 html css

我有一个 <div> , 与 padding{0.5em} .里面是一堆 <label>带有表单字段等的 s,设置为 display:block;margin:0 0 0.8em , 在它们之间留出一点空间。

问题是我的 div 的底部最终以 1.3em 的有效填充底部结束。

最好的解决方案是什么?

我可以将 div 的内边距设置为 0.5em 0.5em 0 0.5em将问题从 1.3em“改善”到 0.8em,但它仍然不是应有的 0.5em。不允许使用负填充值。

我显然可以使用 :last-child伪选择器给出 margin-bottom在最后一个标签标签上为 0,但我觉得必须有一种更整洁/更容易/更易于维护的方法吗?

我可以设置 margin:0.4em 0padding:0.1em 0.5em , 但它看起来很乱,一旦我想添加(例如)一个 <h2> 就崩溃了在 div 的顶部。

理想情况下,我希望以某种方式将子元素的第一个顶部和最后一个底部边距设置为“折叠”。

谢谢!

最佳答案

我的做法是添加一个 margin-top在标记中另一个元素/选择器之后的任何标签上,而不是 margin-bottom在所有这些上。

例如,如果您交替使用 <label><input>元素:

<div>
  <label>
  <input>

  <label>
  <input>
</div>

...然后我将使用相邻的兄弟选择器来仅定位输入后面的标签,从而忽略第一个输入:

input + label {
  margin-top: 0.8em;
}

也就是说,如果标记不允许该模式,:last-child (或者更好,:last-of-type)就可以了。

关于html - 处理 CSS margin/padding "conflicts"的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34526773/

相关文章:

javascript - 如何在粘性标题后获取响应式表格?

javascript - 小部件拖动图像

javascript - 如何隐藏并同时显示另一个部分(类似于 Accordion )

php - 垂直对齐 DIV

html - 如何设置 HTML <select> 元素的默认值?

javascript - jqtransform 和折叠的 DIV

css - 我怎样才能确保 flex 也对齐 1 行上的内部 div?

html - 为什么 CSS 背景位置会随着 Sprite 高度的变化而变化?

javascript - IE 使用 on .change() 表单提交()

html - CSS ContentEditable Span : Ugly Border