it-swarm.com.ru

Как совместить флажки и их метки последовательно в кросс-браузерах

Это одна из мелких проблем CSS, которая постоянно мучает меня. Как люди вокруг переполнения стека вертикально выравниваютcheckboxesи ихlabelsпоследовательно кросс-браузер ? Всякий раз, когда я корректно выравниваю их в Safari (обычно с помощью vertical-align: baseline на input), они полностью отключаются в Firefox и IE. Исправьте это в Firefox, и Safari и IE неизбежно испортятся. Я трачу время на это каждый раз, когда кодирую форму.

Вот стандартный код, с которым я работаю:

<form>
    <div>
        <label><input type="checkbox" /> Label text</label>
    </div>
</form>

Я обычно использую сброс Эрика Мейера, поэтому элементы формы относительно чисты от переопределений. Ждем любых советов или хитростей, которые вы можете предложить!

1579
One Crayon

После более чем часа настройки, тестирования и разметки разных стилей, я думаю, у меня может быть достойное решение. Требования для этого конкретного проекта были:

  1. Входы должны быть на своей линии.
  2. Входные данные флажков должны выравниваться по вертикали с текстом метки одинаково (если не одинаково) во всех браузерах.
  3. Если текст метки переносится, он должен быть с отступом (поэтому не нужно вставлять под флажок).

Прежде чем я приведу какое-либо объяснение, я просто дам вам код:

label {
  display: block;
  padding-left: 15px;
  text-indent: -15px;
}
input {
  width: 13px;
  height: 13px;
  padding: 0;
  margin:0;
  vertical-align: bottom;
  position: relative;
  top: -1px;
  *overflow: hidden;
}
<form>
  <div>
    <label><input type="checkbox" /> Label text</label>
  </div>
</form>

Вот рабочий пример в JSFiddle .

В этом коде предполагается, что вы используете сброс, такой как Эрик Майер, который не переопределяет поля ввода и отступы формы (следовательно, вводит сброс полей и отступов в CSS ввода). Очевидно, что в реальной среде вы, вероятно, будете вкладывать/переопределять материал для поддержки других элементов ввода, но я хотел, чтобы все было просто.

Что следует отметить:

  • Объявление *overflow является встроенным хаком IE (взломать свойство star). Оба IE 6 и 7 заметят это, но Safari и Firefox будут правильно игнорировать это. Я думаю, что это мог бы быть действительный CSS, но вам все еще лучше с условными комментариями; просто использовал это для простоты.
  • Насколько я могу судить, единственное утверждение vertical-align, которое было одинаковым для всех браузеров, было vertical-align: bottom. Установка этого и последующее относительное позиционирование вверх в Safari, Firefox и IE ведут себя почти одинаково, с разницей в один или два пикселя.
  • Основная проблема в работе с выравниванием заключается в том, что IE удерживает загадочное пространство вокруг элементов ввода. Это не отступы или отступы, и это чертовски настойчиво. Установка ширины и высоты для флажка, а затем overflow: hidden по какой-то причине отсекает дополнительное пространство и позволяет позиционированию IE действовать очень похоже на Safari и Firefox.
  • В зависимости от размера текста, вам, без сомнения, потребуется настроить относительное положение, ширину, высоту и т.д., Чтобы все выглядело правильно.

Надеюсь, это поможет кому-то еще! Я не пробовал эту конкретную технику на каких-либо проектах, кроме тех, над которыми я работал этим утром, поэтому определенно подготовьтесь, если найдете что-то, что работает более последовательно. 

947
One Crayon

Иногда для вертикального выравнивания требуются два встроенных элемента (span, label, input и т.д.) Рядом друг с другом для правильной работы. Следующие флажки правильно отцентрированы по вертикали в IE, Safari, FF и Chrome, даже если размер текста очень маленький или большой.

Все они плавают рядом друг с другом в одной строке, но nowrap означает, что весь текст метки всегда остается рядом с флажком.

Недостатком являются дополнительные бессмысленные теги SPAN. 

.checkboxes label {
  display: block;
  float: left;
  padding-right: 10px;
  white-space: nowrap;
}
.checkboxes input {
  vertical-align: middle;
}
.checkboxes label span {
  vertical-align: middle;
}
<form>
  <div class="checkboxes">
    <label for="x"><input type="checkbox" id="x" /> <span>Label text x</span></label>
    <label for="y"><input type="checkbox" id="y" /> <span>Label text y</span></label>
    <label for="z"><input type="checkbox" id="z" /> <span>Label text z</span></label>
  </div>
</form>

Теперь, если бы у вас был очень длинный текст метки, который нужно обернуть без переноса под флажком, вы бы использовали отступ и отрицательный текстовый отступ для элементов метки:

.checkboxes label {
  display: block;
  float: left;
  padding-right: 10px;
  padding-left: 22px;
  text-indent: -22px;
}
.checkboxes input {
  vertical-align: middle;
}
.checkboxes label span {
  vertical-align: middle;
}
<form>
  <div class="checkboxes">
    <label for="x"><input type="checkbox" id="x" /> <span>Label text x</span></label>
    <label for="y"><input type="checkbox" id="y" /> <span>Label text y</span></label>
    <label for="z"><input type="checkbox" id="z" /> <span>Label text z</span></label>
  </div>
</form>

183
Nathan Bowers

Отработка решение One Crayon , у меня есть кое-что, что работает для меня и проще:

.font2 {font-family:Arial; font-size:32px} /* Sample font */

input[type=checkbox], input[type=radio] {
  vertical-align: middle;
  position: relative;
  bottom: 1px;
}

input[type=radio] { 
  bottom: 2px; 
} 
<label><input type="checkbox" /> Label text</label>
<p class="font2">
  <label><input type="checkbox"/> Label text</label>
</p>

Отрисовывает пиксель за пикселем то же самое в Safari (базовый уровень которого я доверяю), и Firefox и IE7 проверяются как хорошие. Он также работает для шрифтов различных размеров, больших и маленьких. Теперь для исправления базовой линии IE на выборках и входах ...


Обновление: (стороннее редактирование)

Правильная позиция bottom зависит от семейства шрифтов и размера шрифта! Я обнаружил, что использование bottom: .08em; для флажка и радиоэлементов является хорошим общим значением. Я тестировал его в Chrome/Firefox/IE11 в Windows со шрифтами Arial и Calibri, используя несколько маленьких/средних/больших шрифтов.

.font2, .font2 input {font-family:Arial; font-size:32px} /* Sample font */

input[type=checkbox], input[type=radio] {
  vertical-align: middle; 
  position: relative;
  bottom: .08em; /* this is a better value for different fonts! */
}
<label><input type="checkbox" /> Label text</label> 

<p class="font2">
  <label><input type="checkbox"/> Label text</label>
</p>

167

Одна простая вещь, которая, кажется, работает хорошо, состоит в том, чтобы применить корректировку вертикального положения флажка с вертикальным выравниванием. Это будет по-разному в разных браузерах, но решение несложное.

input {
    vertical-align: -2px;
}

Ссылка

124
Frank Schwieterman

попробуйте vertical-align: middle

также ваш код выглядит так:

<form>
    <div>
        <input id="blah" type="checkbox"><label for="blah">Label text</label>
    </div>
</form>

85
digitalsanctum

Попробуйте мое решение, я попробовал его в IE 6, FF2 и Chrome, и он рендерил пиксель за пикселем во всех трех браузерах.

* {
  padding: 0px;
  margin: 0px;
}
#wb {
  width: 15px;
  height: 15px;
  float: left;
}
#somelabel {
  float: left;
  padding-left: 3px;
}
<div>
  <input id="wb" type="checkbox" />
  <label for="wb" id="somelabel">Web Browser</label>
</div>

36
Waleed Eissa

Единственное идеально работающее решение для меня:

input[type=checkbox], input[type=radio] {
    vertical-align: -2px;
    margin: 0;
    padding: 0;
}

Протестировано сегодня в Chrome, Firefox, Opera, IE 7 и 8. Пример: Fiddle

24
Buzogany Laszlo

Я обычно использую высоту строки, чтобы отрегулировать вертикальное положение моего статического текста:

label {
  line-height: 18px;
}
input {
  width: 13px;
  height: 18px;
  font-size: 12px;
  line-height: 12px;
}
<form>
  <div>
    <label><input type="checkbox" /> Label text</label>
  </div>
</form>

Надеюсь, это поможет.

18
Bryan A

Я не полностью проверил свое решение, но, похоже, оно отлично работает.

Мой HTML просто:

<label class="checkbox"><input type="checkbox" value="0000">0000 - 0100</label>

Затем я установил все флажки в 24px для высоты и ширины. Чтобы выровнять текст, я делаю метку line-height также 24px и назначаю vertical-align: top; следующим образом:

Правка: После тестирования IE я добавил vertical-align: bottom; к входу и изменил CSS метки. Возможно, вам понадобится условный IE регистр css для сортировки отступов - но текст и поле встроены.

input[type="checkbox"] {
    width: 24px;
    height: 24px;
    vertical-align: bottom;
}
label.checkbox {
    vertical-align: top;
    line-height: 24px;
    margin: 2px 0;
    display: block;
    height: 24px;
}

Если кто-то обнаружит, что это не работает, пожалуйста, дайте мне знать. Вот оно в действии (в Chrome и IE - извинения за то, что на сетчатке были сделаны скриншоты и используются параллели для IE)

screenshot of checkboxes: Chromescreenshot of checkboxes: IE

12
Patrick

Я думаю, что это самый простой способ

input {
    position: relative;
    top: 1px;
}

Fiddle

10
gidzior

Это хорошо работает для меня:

fieldset {
  text-align:left;
  border:none
}
fieldset ol, fieldset ul {
  padding:0;
  list-style:none
}
fieldset li {
  padding-bottom:1.5em;
  float:none;
  clear:left
}
label {
  float:left;
  width:7em;
  margin-right:1em
}
fieldset.checkboxes li {
  clear:both;
  padding:.75em
}
fieldset.checkboxes label {
  margin:0 0 0 1em;
  width:20em
}
fieldset.checkboxes input {
  float:left
}
<form>
  <fieldset class="checkboxes">
    <ul>
      <li>
        <input type="checkbox" name="happy" value="yep" id="happy" />
        <label for="happy">Happy?</label>
      </li>
      <li>
        <input type="checkbox" name="hungry" value="yep" id="hungry" />
        <label for="hungry">Hungry?</label>
      </li>
    </ul>
  </fieldset>
</form>

9
dylanfm

Теперь, когда flexbox поддерживается во всех современных браузерах, что-то вроде этого кажется мне более простым подходом.

<style>
label {
  display: flex;
  align-items: center;
}
input[type=radio], input[type=checkbox]{
  flex: none;
}
</style>
<form>
  <div>
    <label><input type="checkbox" /> Label text</label>
  </div>
</form>


Вот полная демонстрационная версия с префиксом:

label {
	display: -webkit-box;
	display: -webkit-flex;
	display: -ms-flexbox;
	display: flex;
	-webkit-box-align: center;
	-webkit-align-items: center;
	-ms-flex-align: center;
	align-items: center;
}
input[type=radio], 
input[type=checkbox] {
	-webkit-box-flex: 0;
	-webkit-flex: none;
	-ms-flex: none;
	flex: none;
	margin-right: 10px; 
}
/* demo only (to show alignment) */
form {
  max-width: 200px
}
<form>
  <label>
    <input type="radio" checked>
    I am an aligned radio and label
  </label>
  <label>
      <input type="checkbox" checked>
    I am an aligned checkbox and label
  </label>
</form>

8
Bryan Willis

Мне не нравится относительное позиционирование, потому что оно делает элемент визуализированным над всем остальным на своем уровне (он может попасть поверх чего-либо, если у вас сложный макет).

Я обнаружил, что vertical-align: sub делает чекбоксы достаточно хорошо выровненными в Chrome, Firefox и Opera. Не могу проверить Safari, так как у меня нет MacOS и IE10 немного отключен, но я нашел, что это достаточно хорошее решение для меня.

Другое решение может заключаться в том, чтобы попытаться создать определенный CSS для каждого браузера и настроить его с помощью некоторого вертикального выравнивания в%/пикселях/EM: http://css-tricks.com/snippets/css/browser -специфичные хаки/

8
pokrishka

У меня никогда не было проблем с этим:

<form>
  <div>
    <input type="checkbox" id="cb" /> <label for="cb">Label text</label>
  </div>
</form>
7
John Topley

Выбранный ответ с более чем 400 ответами не работал для меня в Chrome 28 OSX, возможно, потому, что он не был протестирован в OSX или что он работал во всем, что было в 2008 году, когда на этот вопрос был дан ответ.

Времена изменились, и теперь стали возможны новые решения CSS3. Мое решение использует псевдоэлементы для создания пользовательского флажка. Таким образом, условия (плюсы или минусы, как ни крути) таковы:

  • Работает только в современных браузерах (FF3.6 +, IE9 +, Chrome, Safari)
  • Полагается на специально разработанный флажок, который будет отображаться одинаково в каждом браузере/ОС. Здесь я только что выбрал несколько простых цветов, но вы всегда можете добавить линейные градиенты и тому подобное, чтобы придать ему больше удовольствия.
  • Приспособлен к определенному шрифту/размеру шрифта, который, если изменить, вы просто изменили бы расположение и размер флажка, чтобы он выглядел вертикально выровненным. При правильной настройке конечный результат должен быть практически одинаковым во всех браузерах/операционных системах.
  • Нет свойств вертикального выравнивания, нет поплавков
  • Нужно использовать предоставленную разметку в моем примере, она не будет работать, если структурирована как вопрос, однако, макет будет выглядеть в основном одинаково. Если вы хотите переместить вещи, вам также нужно будет переместить связанный CSS

Ваш HTML:

<form>
    <div class="checkbox">
        <input id="check_me" type=checkbox />
        <label for="check_me">Label for checkbox</label>
    </div>
</form>

Ваш CSS:

div.checkbox {
    position: relative;
    font-family: Arial;
    font-size: 13px;
}
label {
    position: relative;
    padding-left: 16px;
}
label::before {
    content :"";
    display: inline-block;
    width: 10px;
    height: 10px;
    background-color: white;
    border: solid 1px #9C9C9C;
    position: absolute;
    top: 1px;
    left: 0px;
}
label::after {
    content:"";
    width: 8px;
    height: 8px;
    background-color: #666666;
    position: absolute;
    left: 2px;
    top: 3px;
    display: none;
}
input[type=checkbox] {
    visibility: hidden;
    position: absolute;
}
input[type=checkbox]:checked + label::after {
    display: block;
}
input[type=checkbox]:active + label::before {
    background-color: #DDDDDD;
}

Это решение скрывает флажок, а также добавляет и накладывает стили псевдоэлементов на метку, чтобы создать видимый флажок. Поскольку метка привязана к скрытому флажку, поле ввода все равно будет обновлено, а значение будет отправлено вместе с формой.

jsFiddle: http://jsfiddle.net/SgXYY/6/

И если вам интересно, вот мое мнение о переключателях: http://jsfiddle.net/DtKrV/2/

Надеюсь, кто-то найдет это полезным!

6
MusikAnimal

Просто хотел добавить к обсуждению атрибут «for» на ярлыках (немного оффтоп):

Пожалуйста, предоставьте его, даже когда в этом нет необходимости, потому что его очень удобно использовать из javascript:

var label = ...
var input = document.getElementById(label.htmlFor);

Это намного удобнее, чем пытаться выяснить, вложен ли ярлык во входные данные, или же, если ввод находится перед ярлыком, или после ... и т.д.

Просто мои 2 цента.

6
Stijn

Если вы используете ASP.NET Web Forms вам не нужно беспокоиться о DIV и других элементах или фиксированных размерах. Мы можем выровнять текст <asp:CheckBoxList>, установив float:left в тип ввода CheckboxList в CSS.

Пожалуйста, проверьте следующий пример кода:

.CheckboxList
{
    font-size: 14px;
    color: #333333;
}
.CheckboxList input
{
    float: left;
    clear: both;
}

.ASPX код:

<asp:CheckBoxList runat="server" ID="c1" RepeatColumns="2" CssClass="CheckboxList">
</asp:CheckBoxList>
6
Rama Subba Reddy M
<form>
    <div>
        <label style="display: inline-block">
            <input style="vertical-align: middle" type="checkbox" />
            <span style="vertical-align: middle">Label text</span>
         </label>
    </div>
</form>

Хитрость заключается в том, чтобы использовать вертикальное выравнивание только в ячейках таблицы или встроенном блоке, если используется тег label.

4
Carlo Pires

Жестко закодируйте высоту и ширину флажка, удалите его отступы и сделайте его высоту плюс вертикальные поля равными высоте строки метки. Если текст метки встроен, установите флажок. Firefox, Chrome и IE7 + одинаково отображают следующий пример: http://www.kornea.com/css-checkbox-align

4
Vladimir Kornea

Если вы используете Twitter Bootstrap, вы можете просто использовать класс checkbox в <label>:

<label class="checkbox">
    <input type="checkbox"> Remember me
</label>
4
Sunil D.

С флажком типа ввода, обернутым внутри метки и смещенным влево, вот так:

<label for="id" class="checkbox">
    <input type="checkbox" id="id">
    <span>The Label</span>
</label>

это сработало для меня:

label.checkbox {
    display: block;
}
.checkbox input {
    float: left;
    height: 18px;
    vertical-align: middle;
}
.checkbox span {
    float: left;
    line-height: 18px;
    margin: 0 0 0 20px;
}

Убедитесь, что высота равна высоте строки (уровень блока).

3
Matijs

input[type=checkbox]
{
    vertical-align: middle;
} 
<input id="testCheckbox" name="testCheckbox" type="checkbox">
<label for="testCheckbox">I should align</label>

3
Prime

Используйте просто vertical-align: sub, так как покришка уже предложена.

Fiddle

HTML-код:

<div class="checkboxes">
    <label for="check1">Test</label>
    <input id="check1" type="checkbox"></input>
</div>

Код CSS:

.checkboxes input {
    vertical-align: sub;
}
2
Marco Sulla

Я обычно оставляю флажок без метки, а затем делаю его «метку» отдельным элементом. Это больно, но между браузерами так много различий в том, как отображаются флажки и их метки (как вы заметили), что это единственный способ приблизиться к контролю того, как все выглядит.

Я также заканчиваю тем, что делал это в разработке winforms, по той же причине. Я думаю, что основная проблема с элементом управления checkbox заключается в том, что это действительно два разных элемента управления: поле и метка. Используя флажок, вы оставляете на усмотрение разработчиков элемента управления решать, как эти два элемента отображаются рядом друг с другом (и они всегда ошибаются, где неправильно = не то, что вы хотите).

Я действительно надеюсь, что у кого-то есть лучший ответ на ваш вопрос.

2
MusiGenesis

Так что я знаю, что на это уже много раз отвечали, но я чувствую, что у меня есть более элегантное решение, чем те, которые уже были предоставлены. И не только 1 элегантное решение, но и 2 отдельных решения, чтобы пощекотать ваше воображение. С учетом всего сказанного, все, что вам нужно знать и видеть, содержится в 2 JS Fiddle's с комментариями.


Решение № 1 опирается на собственный «флажок» данного браузера, хотя и с изюминкой ... Он содержится в элементе div, который легче позиционировать в кросс-браузерном режиме, с переполнением: скрыт, чтобы отбросить избыток растянутого флажка на 1 пиксель (это так, что вы не можете видеть уродливые границы FF)

Простой HTML: (перейдите по ссылке, чтобы просмотреть css с комментариями, блок кода должен удовлетворить стекопоток)http://jsfiddle.net/KQghJ/

<label><div class="checkbox"><input type="checkbox" /></div> Label text</label>

Решение № 2 использует «Переключатель флажков», чтобы переключать состояние CSS DIV, который был правильно позиционирован в браузере, и настраивается с помощью простого Sprite для состояний флажков, не отмеченных и отмеченных. Все, что нужно, это отрегулировать положение фона с помощью указанного флажка Toggle Hack. Это, на мой взгляд, более элегантное решение, поскольку у вас больше контроля над флажками и радиоприемниками, и вы можете гарантировать, что они выглядят одинаково в браузере.

Простой HTML: (перейдите по ссылке, чтобы просмотреть CSS с комментариями, блок кода должен удовлетворить StackOverflow)http://jsfiddle.net/Sx5M2/

<label><input type="checkbox" /><div class="checkbox"></div>Label text</label>

Если кто-то не согласен с этими методами, пожалуйста, оставьте мне комментарий, я хотел бы услышать некоторые отзывы о том, почему другие не сталкивались с этими решениями, или, если они есть, почему я не вижу здесь ответов относительно них? Если кто-то увидит, что один из этих методов потерпит неудачу, было бы неплохо увидеть это, но они были протестированы в последних браузерах и полагаются на методы HTML/CSS, которые являются довольно старыми и универсальными, насколько я видел.

2
NinjaKC

CSS:

.threeCol .listItem {
    width:13.9em;
    padding:.2em;
    margin:.2em;
    float:left;
    border-bottom:solid #f3f3f3 1px;
}
.threeCol input {
    float:left;
    width:auto;
    margin:.2em .2em .2em 0;
    border:none;
    background:none;
}
.threeCol label {
    float:left;
    margin:.1em 0 .1em 0;
}

HTML:

<div class="threeCol">
    <div class="listItem">
        <input type="checkbox" name="name" id="id" value="checkbox1" />
        <label for="name">This is your checkBox</label>
    </div>
</div>

Приведенный выше код поместит элементы списка в три протокола и просто изменит ширину в соответствии с вашими требованиями.

2
Philip Bevan

Следующее обеспечивает идеальную согласованность пикселей в браузерах, даже в IE9:

Подход довольно разумный, до такой степени очевидный:

  1. Создайте вход и метку.
  2. Отобразите их как блок, чтобы вы могли плавать их, как вам нравится.
  3. Установите высоту и высоту строки в одно и то же значение, чтобы обеспечить их центрирование и выравнивание по вертикали.
  4. Дляemизмерения, чтобы вычислить высоту элементов, браузер должен знать высоту шрифта для этих элементов, и он не должен быть сам установлен в измерениях em.

Это приводит к общему применимому общему правилу:

input, label {display:block;float:left;height:1em;line-height:1em;}

С изменяемым размером шрифта для формы, набора полей или элемента.

#myform input, #myform label {font-size:20px;}

Протестировано в последних версиях Chrome, Safari и Firefox на Mac, Windows, Iphone и Android. И IE9.

Этот метод, вероятно, применим ко всем типам ввода, которые не превышают одну строку текста. Примените правило типа, чтобы удовлетворить.

1
Henrik Erlandsson

Yay спасибо! Это тоже сводило меня с ума навсегда. 

В моем конкретном случае это сработало для меня:

input {
    width: 13px;
    height: 13px;
    padding: 0;
    margin:0;
    vertical-align: top;
    position: relative;
    *top: 1px;
    *overflow: hidden;
}
label {
    display: block;
    padding: 0;
    padding-left: 15px;
    text-indent: -15px;
    border: 0px solid;
    margin-left: 5px;
    vertical-align: top;
}

Я использую reset.css, который может объяснить некоторые различия, но мне кажется, что это хорошо работает.

1
Jeff

position: relative; имеет некоторые проблемы в IE с z-index и анимациями, такими как slideQp/slideDown jQuery.

CSS:

input[type=checkbox], input[type=radio] {
    vertical-align: baseline;
    position: relative;
    top: 3px;
    margin: 0 3px 0 0;
    padding: 0px;
}
input.ie7[type=checkbox], input.ie7[type=radio] {
    vertical-align: middle;
    position: static;
    margin-bottom: -2px;
    height: 13px;
    width: 13px;
}

jQuery:

$(document).ready(function () {
    if ($.browser.msie && $.browser.version <= 7) {
        $('input[type=checkbox]').addClass('ie7');
        $('input[type=radio]').addClass('ie7');
    }
});

Возможно, стиль нуждается в настройке в зависимости от размера шрифта, используемого в <label>

PS:
Я использую ie7js , чтобы заставить css работать в IE6. 

1
Bob Fanger
<fieldset class="checks">
    <legend>checks for whatevers</legend>
    <input type="" id="x" />
    <label for="x">Label</label>
    <input type="" id="y" />
    <label for="y">Label</label>
    <input type="" id="z" />
    <label for="z">Label</label>
</fieldset>

Вы все равно должны обернуть элементы управления формой, сгруппированные в их собственные наборы полей, здесь он воспроизводит обертку. установить ввод/метку для отображения: блок, плавающий ввод влево, плавающий метка вправо, установить ширину, контролировать интервалы с левыми/правыми полями, соответственно выровнять текст метки. 

так

fieldset.checks {
    width:200px
}
.checks input, .checks label {
    display:block;
}
.checks input {
    float:right;
    width:10px;
    margin-right:5px
}
.checks label {
    float:left;
    width:180px;
    margin-left:5px;
    text-align:left;
    text-indent:5px
}

вам, вероятно, нужно установить границы, контур и высоту линии на обоих, а также для кросс-браузерных/мультимедийных решений. 

1
albert

Может быть, некоторые люди делают ту же ошибку, что и я? Что было ... Я установил ширину для полей ввода, потому что они были в основном типа «текст», но потом забыл переопределить эту ширину для флажков - поэтому мой флажок пытался занять много лишней ширины и поэтому было трудно выровнять ярлык рядом с ним.

.checkboxlabel {
    width: 100%;
    vertical-align: middle;
}
.checkbox {
    width: 20px !important;
}
<label for='acheckbox' class='checkboxlabel'>
    <input name="acheckbox" id='acheckbox' type="checkbox" class='checkbox'>Contact me</label>

Предоставляет интерактивные ярлыки и правильное выравнивание еще в IE6 (с использованием селектора классов) и в поздних версиях Firefox, Safari и Chrome

0
Geoff Kendall

Это не лучший способ решить проблему

vertical-align: middle

Добавление style="position:relative;top:2px;" в поле ввода переместит его вниз 2px. Таким образом, в зависимости от размера шрифта, вы можете перемещать его.

0
rene

Простое решение:

<label style="display:block">
  <input style="vertical-align:middle" type="checkbox">
  <span  style="vertical-align:middle">Label</span>
</label>

Протестировано в Chrome, Firefox, IE9 +, Safari, iOS 9+

0
Dylan Sharhon

Я нашел единственный способ выстроить их в ряд, используя абсолютную позицию для ввода. Игра с верхней переменной input дала желаемый результат.

div {
  clear:    both;
  float:    none;
  position: relative;
}

input {
  left:     5px;
  position: absolute;
  top:      3px;
}

label {
  display:     block;
  margin-left: 20px;
}
0
vladiim