为什么填充不能在我的标签元素上工作?

dqh*_*cks 33 html css padding

我在这里有一些标记:

<label>Username:</label>

<div class="input small"><div class="left"></div><div class="right"></div><div class="center">
    <input name="username" type="text" />
</div></div>

<label>Password:</label>

<div class="input small"><div class="left"></div><div class="right"></div><div class="center">
    <input name="password" type="password" />
</div></div>
Run Code Online (Sandbox Code Playgroud)

和CSS:

label {
    padding-top: 5px;
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我的两个标签元素上的填充不起作用.在IE和Firefox中尝试过,在任何一种情况下它都无法正常工作.Firebug说填充物在那里,但它没有做任何事情.尝试将填充设置为50px,但仍然没有.

有任何想法吗?

tw1*_*w16 64

A label是内联元素,因此不受顶部和底部填充的影响.您需要使label块级元素工作:

label{
    display: block; /* add this */
    padding-top: 5px;
}
Run Code Online (Sandbox Code Playgroud)

  • 我会让它'inline-block`从两者中受益. (5认同)
  • 值得注意的是,"inline-block"并不适用于所有浏览器.IE <= 8不支持它.周围有黑客,但默认情况下,没有工作. (2认同)

dha*_*pin 5

出于以下原因建议更好的答案:

  • 行高不适用于换行。它看起来很乱,而且上面的包裹线也被隔开。
  • 显示blockinline-block导致在其下方label呈现诸如放置在其前面的复选框输入之类的内容。

解决方案是在 上使用:before或伪选择器。这保留了本机行为,但仍然添加了填充/边距/高度。例子::afterlabelinline

/* to add space before: */

label:before {
  display: block;
  content: " ";
  padding-top: 5px;
}

/* to add space after: */

label:after {
  display: block;
  content: " ";
  padding-bottom: 5px;
}
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/0gpguzwh/