ラベルと同じ行にあるラジオボタンのあるフォームがあります。ただし、下のスクリーンショットに示すように、ラジオボタンはラベルと垂直に整列していません。
ラジオボタンをラベルと垂直に並べるにはどうすればよいですか?
編集:
HTMLコードは次のとおりです。
<input checked="checked" type="radio" name="user_level" id="rd1" value="1"/>
<label for="rd1">radio 1</label><br/>
<input type="radio" name="user_level" id="rd2" value="2"/>
<label for="rd2">radio 2</label><br/>
<input type="radio" name="user_level" id="rd3" value="3"/>
<label for="rd3">radio 3</label><br/>
CSSコード:
label{
padding:5px;
color:#222;
font-family:corbel,sans-serif;
font-size: 14px;
margin: 10px;
}
これを試して:
input[type="radio"] {
margin-top: -1px;
vertical-align: middle;
}
Menuka devindaでanwerを選択したことは知っていますが、その下のコメントを見て同意し、より良い解決策を考え出そうとしました。私はこれを思いついたが、私の意見では、はるかにエレガントなソリューションです。
input[type='radio'], label{
vertical-align: baseline;
padding: 10px;
margin: 10px;
}
答えを提供してくれたみんなのおかげで、あなたの答えは見過ごされませんでした。それでも他のアイデアがあれば、この質問にあなた自身の答えを追加してください。
input {
display: table-cell;
vertical-align: middle
}
すべてのラジオのクラスを置きます。これは、htmlページのすべてのラジオボタンで機能します。
vertical-align:top
をcssに追加してみてください
label{
padding:5px;
color:#222;
font-family:corbel,sans-serif;
font-size: 14px;
margin: 10px;
vertical-align:top;
}
あなたはこのようにすることができます:
input {
vertical-align:middle;
}
label{
color:#222;
font-family:corbel,sans-serif;
font-size: 14px;
}
回答に少しフレックスを追加することもできます。
.Radio {
display: inline-flex;
align-items: center;
}
.Radio--large {
font-size: 2rem;
}
.Radio-Input {
margin: 0 0.5rem 0;
}
<div>
<label class="Radio" for="sex-female">
<input class="Radio-Input" type="radio" id="sex-female" name="sex" value="female" />
Female
</label>
<label class="Radio" for="sex-male">
<input class="Radio-Input" type="radio" id="sex-male" name="sex" value="male" />
Male
</label>
</div>
<div>
<label class="Radio Radio--large" for="sex-female2">
<input class="Radio-Input" type="radio" id="sex-female2" name="sex" value="female" />
Female
</label>
<label class="Radio Radio--large" for="sex-male2">
<input class="Radio-Input" type="radio" id="sex-male2" name="sex" value="male" />
Male
</label>
</div>
label, input {
vertical-align: middle;
}
ボックスの垂直方向の中点を、親ボックスのベースラインと親のx-heightの半分(en.wikipedia.org/wiki/X-height)に合わせます。
このような何かが動作するはずです
CSS:
input {
float: left;
clear: left;
width: 50px;
line-height: 20px;
}
label {
float: left;
vertical-align: middle;
}
これらの回答の多くは、vertical-align: middle;
を使用すると言っています。これにより、位置合わせが近くなりますが、私にとってはまだ数ピクセルずれています。ラベルとラジオ入力の間で真の1対1の位置合わせを行うために使用した方法は、vertical-align: top;
を使用してこれです。
label, label>input{
font-size: 20px;
display: inline-block;
margin: 0;
line-height: 28px;
height: 28px;
vertical-align: top;
}
<h1>How are you?</h1>
<fieldset>
<legend>Your response:</legend>
<label for="radChoiceGood">
<input type="radio" id="radChoiceGood" name="radChoices" value="Good">Good
</label>
<label for="radChoiceExcellent">
<input type="radio" id="radChoiceExcellent" name="radChoices" value="Excellent">Excellent
</label>
<label for="radChoiceOk">
<input type="radio" id="radChoiceOk" name="radChoices" value="OK">OK
</label>
</fieldset>
display:inline-block
をラベルに追加してpadding-top
を与えると、これが修正されると思います。また、ラベルにline-height
を設定するだけでも同様です。
入力をラベル内に入れるのが好きで(ボーナスを追加:ラベルにfor
属性が不要になりました)、入力にvertical-align: middle
を入れます。
label > input[type=radio] {
vertical-align: middle;
margin-top: -2px;
}
#d2 {
font-size: 30px;
}
<div>
<label><input type="radio" name="radio" value="1">Good</label>
<label><input type="radio" name="radio" value="2">Excellent</label>
<div>
<br>
<div id="d2">
<label><input type="radio" name="radio2" value="1">Good</label>
<label><input type="radio" name="radio2" value="2">Excellent</label>
<div>
(-2px margin-top
は好みの問題です。)
私が本当に好きな別のオプションは、テーブルを使用することです。 (ピッチフォークを保持します。本当に素晴らしい!)すべてのラベルにfor
属性を追加し、入力にid
sを追加する必要があることを意味します。複数行にわたる長いテキストコンテンツのラベルには、このオプションをお勧めします。
<table><tr><td>
<input id="radioOption" name="radioOption" type="radio" />
</td><td>
<label for="radioOption">
Really good option
</label>
</td></tr></table>
テーブルは検証に合格するという一般的な考えに反して、デザインレイアウトに使用すべきではないことに同意します。つまり、tableタグは非推奨ではありません。ラジオボタンを配置する最良の方法は、入力要素で調整されたマージンを使用して、垂直に中央CSSを配置することです。