ここにいくつかのマークアップがあります:
<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>
CSS
label {
padding-top: 5px;
}
何らかの理由で、2つのラベル要素のパディングが機能しません。 IEとFirefoxで試してみました。どちらの場合も動作しません。Firebugはパディングはそこにありますが、何もしていません。パディングを50pxに設定して、何もない。
何か案は?
label
はインライン要素であるため、上下のパディングの影響を受けません。 label
を機能させるには、ブロックレベルの要素にする必要があります。
label{
display: block; /* add this */
padding-top: 5px;
}
これらの理由からより良い答えを提案する:
block
またはinline-block
は、label
に、その前に置かれたチェックボックス入力のようなものbelowをレンダリングさせます。解決策は、:before
または:after
label
の擬似セレクター。これにより、ネイティブのinline
動作が保持されますが、依然としてpadding/margin/heightが追加されます。例:
/* to add space before: */
label:before {
display: block;
content: " ";
padding-top: 5px;
}
/* to add space after: */
label:after {
display: block;
content: " ";
padding-bottom: 5px;
}
デフォルトのラベルはdisplay:inline
であるため、パディングの設定はサポートされていません。それらを囲む<div>
要素は、<label>
sもブロック要素であるかのように見えるようにするブロックコンテキストを開始します。
これを修正するには、ラベルのCSSにdisplay:block
を追加します。
インライン要素はpadding-top
の影響を受けません。 http://jsfiddle.net/pECCX/
または、line-height
プロパティを使用することもできます。
label {
line-height: 3;
}