如何将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,2012年

Answers:


147

试试这个:

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

9
这对我有用,但是height= 100%;由于父元素未明确设置高度,因此我不得不添加一个。
DaKaZ 2014年

1
这似乎给了我在Mac,Windows和Linux之间使用Chrome,Firefox或IE的最一致的方法。另外,我注意到,如果我在标签上加了填充并在标签内放了收音机,则可能需要根据我使用了多少填充来将margin-top设置为小于-1px(如-3px)的值。该标签。(我想给我的广播框标签一个悬停的颜色和圆角的边框效果,使它们看起来更酷。)
Volomike

3
解释为什么这是唯一正确的答案:HTML中的某些元素具有默认的边距或填充值,例如<p>或<li>元素或单选按钮。如果进入开发人员模式(F12)并将鼠标悬停在标签上,就会看到此信息。实际上,这是一个很好的行为,因为浏览器自己使用CSS来放置预定义的元素,然后用户可以重置这些元素。但是,如果您首先不知道为什么某些内容未对齐,可能会造成混淆。因此,如果默认情况下看起来很怪异,请务必尝试覆盖未设置的设置。
StanE '16

当您增大或减小字体大小时,这似乎不起作用。不过,请通过一个有效的例子证明我错了!
保护者

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

放所有广播课。这将适用于html页面上的所有单选按钮。

小提琴


到目前为止,这是我所见过的最好的解决方案。在此之前,单选按钮标签对齐一直困扰着我多年。每次都为我工作。
G-Man

请注意,当标签具有多行文本时,这会中断。
大安

13

我知道我已经选择了menuka devinda回答的问题,但是我同意下面的评论,并试图提出一个更好的解决方案。我设法解决了这个问题,我认为这是一种更为优雅的解决方案:

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

感谢所有提供答案的人,您的答案并没有被忽略。如果您还有其他想法,请随时添加您自己的答案。



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

这些答案中有很多都说要使用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

尽管我同意表格不应该用于设计布局,但与流行的看法相反,它们确实可以通过验证。即表标签不被弃用。对齐单选按钮的最佳方法是使用垂直对齐中间CSS,并在输入元素上调整边距。



-3

有几种方法,我更喜欢使用html中的表。您可以添加两个coloum三行表并放置单选按钮和标签。

<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,为什么还要选择它作为“答案”?
tereško

7
事实上..认真..每一次有人教导使用表格形式的标记,一个可爱的小猫模具在世界某个地方..
达明Overeem

2
@PeeHaa,tereško,Damien Overeem我想你们可能是对的,我已经能够提出自己的解决方案,我已经在下面发布了。多谢你们!非常感谢您的帮助和建议。
ninjacoder

2
我尝试了其他选项,但它们并不是很好。表工作。.tablecell{dispay:table-cell;} ... <div class="tablecell">对于不想承认自己正在使用表的人来说,这似乎更是一种不可思议的解决方法...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.