htmlラジオボタンをラベルに垂直に配置する方法は?


94

ラベルと同じ行にあるラジオボタンを含むフォームがあります。ただし、下のスクリーンショットに示すように、ラジオボタンはラベルと垂直に配置されていません。

ラジオボタン。

ラジオボタンをラベルに垂直に配置するにはどうすればよいですか?

編集:

これが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;
}

1
現在のコードはどのようになっていますか?
ジョージ

@ninjacoderコードで質問を更新します。
Muthu Kumaran

回答:


147

これを試して:

input[type="radio"] {
  margin-top: -1px;
  vertical-align: middle;
}

9
これは私にとってはうまくいきましたがheight= 100%;、親要素が明示的に高さを設定しなかったので、を追加する必要がありました。
DaKaZ

1
これにより、Chrome、Firefox、またはIEを使用するMac、Windows、Linuxの間で最も一貫したアプローチが得られたようです。また、ラベルにパディングを付けて、ラジオをラベル内に配置した場合、使用していたパディングの量に基づいて、margin-topを-1px未満の値(-3pxなど)に設定する必要があるかもしれません。そのラベル。(ラジオボックスラベルにホバー色と丸みを帯びたボーダー効果を与えて、
涼しげに見せたい

3
これが唯一の正しい答えである理由を説明するには:HTMLの一部の要素には、<p>要素、<li>要素、ラジオボタンなど、デフォルトのマージンまたはパディング値があります。これは、開発者モード(F12)に移動して、タグの上にマウスを置くと確認できます。実際、ブラウザ自体がCSSを使用して定義済みの要素を配置しているため、これはユーザーがリセットできるため、これは適切な動作です。ただし、そもそも何かがずれている理由がわからない場合は、混乱する可能性があります。したがって、デフォルトで奇妙に見える場合は、設定していない設定を常に上書きするようにしてください。
StanE

フォントサイズを大きくしたり小さくしたりすると、これは機能しないようです。しかし、実際の例で私が間違っていることを証明してください!
プロテクター1

15
input {
    display: table-cell;
    vertical-align: middle
}

すべてのラジオのクラスを配置します。これは、htmlページのすべてのラジオボタンで機能します。

フィドル


これは、これまで見た中で最も優れたソリューションです。Radio Button Label Alignmentは、これまで何年も私を悩ませてきました。いつも私のために働く。
G-Man

これは、ラベルに複数行のテキストがある場合に壊れることに注意してください。
Daan

13

私はmenuka devindaによってアンワーを選択したことを知っていますが、その下のコメントを見て、私は同意し、より良い解決策を考え出そうとしました。私はなんとかこれを思いついた、そして私の意見ではそれははるかにエレガントな解決策です:

input[type='radio'], label{   
    vertical-align: baseline;
    padding: 10px;
    margin: 10px;
 }

答えを提供してくれた皆さんのおかげで、あなたの答えは見過ごされませんでした。他のアイデアがまだある場合は、この質問に独自の答えを追加してください。


9

vertical-align:topCSSに追加してみてください

label{
    padding:5px;
    color:#222;
    font-family:corbel,sans-serif;
    font-size: 14px;
    margin: 10px;
    vertical-align:top;
}​

テスト:http : //jsfiddle.net/muthkum/heAWP/


1
font-sizeを大きくしたり小さくしたりしても、これは成り立ちません。
プロテクター1

@Protectoroneこれは古い答えであり、OP質問に固有のものです。同じことをしようとしている場合はfont-size、を使用してみてくださいdisplay:flex。デモはこちらjsfiddle.net/et8z47q5
Muthu Kumaran

8

回答に少しフレックスを追加することもできます。

.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>


7

あなたはこのようにすることができます:

input {
    vertical-align:middle;
}

label{
    color:#222;
    font-family:corbel,sans-serif;
    font-size: 14px;
}

デモ


とても良い。ラベルの代わりにボタンを揃えたかったのですが、これでうまくいきます。
posfan12

1

このようなものはうまくいくはずです

CSS:

input {
    float: left;
    clear: left;
    width: 50px;
    line-height: 20px;
}

label {
    float: left;
    vertical-align: middle;
}

1
label, input {
    vertical-align: middle;
}

ボックスの垂直方向の中点を、親ボックスのベースラインに加えて、親のx-height(en.wikipedia.org/wiki/X-height)の半分に合わせています。


1

これらの回答の多くはを使用するよう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>


1

私は入力をラベルの内側に配置し(追加のボーナス:ラベルの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、すべてのラベルとidsに属性を入力に追加する必要があることを意味します。複数行にわたる長いテキストコンテンツのラベルには、このオプションをお勧めします。

<table><tr><td>
    <input id="radioOption" name="radioOption" type="radio" />
    </td><td>
    <label for="radioOption">                     
        Really good option
    </label>
</td></tr></table>


0

私は同意しますが、テーブルは検証に合格するという一般的な考えに反して、デザインレイアウトにテーブルを使用しないでください。つまり、tableタグは非推奨ではありません。ラジオボタンを配置する最良の方法は、入力要素で調整されたマージンを使用して垂直配置の中央CSSを使用することです。


-1

display:inline-blockラベルに追加して与えることでこれpadding-topを修正できると思います。また、line-heightラベルにを設定するだけでも同様です。


-3

いくつかの方法がありますが、私が好むのはHTMLのテーブルを使用することです。2列3列のテーブルを追加し、ラジオボタンとラベルを配置できます。

<table border="0">

<tr>
  <td><input type="radio" name="sex" value="1"></td>
  <td>radio1</td>

</tr>
<tr>
  <td><input type="radio" name="sex" value="2"></td>
  <td>radio2</td>

</tr>
</table>

6
レイアウトの目的でテーブルを使用しないでください。
PeeHaa

4
-1テーブルはレイアウトに使用しないでください。このコードは検証に合格しません... @ninjacoder、なぜこれを「答え」として選んだのですか?
テレシュコ

7
確かに...真剣に...誰かがフォームマークアップのためにテーブルを使用することを教示ひとつひとつの時間を、世界のどこかかわいい子猫ダイ...
ダミアン・オーフレイム

2
@PeeHaa、tereško、Damien Overeem皆さんはおそらく正しいと思います。私がここに投稿した独自のソリューションを思い付くことができました。みんなありがとう!あなたの助けとアドバイスは高く評価されます。
ninjacoder

2
私は他のオプションを試しましたが、それらはあまり良くありませんでした。テーブルは機能します。.tablecell{dispay:table-cell;} ... <div class="tablecell">テーブルを使用していることを認めたくない人にとっては、気まぐれな回避策のように見えます...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.