У меня есть форма с переключателями, которые находятся в той же строке, что и их метки. Однако переключатели не выровнены по вертикали со своими метками, как показано на снимке экрана ниже.
Как я могу вертикально выровнять радиокнопки с их метками?
Редактировать:
Вот 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;
}
Ответы:
Попробуй это:
источник
height= 100%;
поскольку мой родительский элемент явно не устанавливал высоту.Ставлю класс на все радио. Это будет работать для всех переключателей на странице html.
Скрипка
источник
padding: 0; margin: 0
к элементам ввода, и, похоже, он необходим для правильного выравнивания.Я знаю, что выбрал ответ от menuka devinda, но, глядя на комментарии ниже, я согласился и попытался придумать лучшее решение. Мне удалось это придумать, и, на мой взгляд, это гораздо более элегантное решение:
Спасибо всем, кто дал ответ, ваш ответ не остался незамеченным. Если у вас все еще есть какие-либо другие идеи, не стесняйтесь добавить свой ответ на этот вопрос.
источник
попробуйте добавить
vertical-align:top
в CSSТест: http://jsfiddle.net/muthkum/heAWP/
источник
font-size
попробуйте использоватьdisplay:flex
. Вот демонстрация, jsfiddle.net/et8z47q5Можно было бы также добавить немного гибкости к ответам.
.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>
источник
Сделать можно так:
источник
Мне нравится помещать входные данные внутри меток (дополнительный бонус: теперь вам не нужен
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>
источник
Что-то вроде этого должно работать
CSS:
источник
Я просто выравниваю вертикальную среднюю точку блоков с базовой линией родительского блока плюс половину x-высоты (en.wikipedia.org/wiki/X-height) родительского блока.
источник
Многие из этих ответов говорят об использовании
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>
источник
Хотя я согласен, что таблицы не следует использовать для макетов дизайна, вопреки распространенному мнению, они проходят проверку. т.е. тег таблицы не устарел. Лучший способ выровнять радиокнопки - использовать средний CSS-код вертикального выравнивания с полями, настроенными на элементах ввода.
источник
Думаю, добавление
display:inline-block
ярлыков и их предоставлениеpadding-top
исправят это. Кроме того, можно было бы просто установитьline-height
на этикетках.источник
Есть несколько способов, один из которых я бы предпочел - использовать таблицу в html. вы можете добавить двухколоночную таблицу из трех строк и разместить переключатели и метку.
<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>
источник
.tablecell{dispay:table-cell;} ... <div class="tablecell">
больше похоже на неудобный обходной путь для людей, которые не хотят признавать, что используют таблицы ...