Выравнивание по вертикали флажок - PullRequest
41 голосов
/ 22 марта 2012

Я посмотрел на различные вопросы, касающиеся этой проблемы, но не смог найти ничего, что работает из-за ограничений в моей разметке.

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

<ul>        
    <li>
        <input type="checkbox" value="1" name="test[]" id="myid1">
        <label for="myid1">label1</label>
    </li>
    <li>
        <input type="checkbox" value="2" name="test[]" id="myid2">
        <label for="myid2">label1</label>
    </li>
</ul>

Мне нужно, чтобы флажок был справа и центрирован по вертикали в <li>

В настоящее время это называется:

li input{
   display: inline-block;
   float: right;
   margin-right: 10px;
}

Я пытался использовать различные значения для vertical-align, но это не помогает.Кроме того, в некоторых случаях метка может быть очень длинной и занимать несколько строк.Флажок все еще должен иметь возможность центрироваться вертикально, когда высота li произвольна.

Как я могу добиться этого?

Ответы [ 6 ]

55 голосов
/ 22 марта 2012

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

Сделайте метку встроенным блоком и используйте вертикальное выравнивание на метке и на входе, чтобы выровнять их середины. Затем, предполагая, что можно иметь определенную ширину на ярлыках и флажках, используйте взаимное расположение вместо плавающего для их замены ( jsFiddle demo ):

input {
    width: 20px;

    position: relative;
    left: 200px;

    vertical-align: middle;
}

label {  
    width: 200px;

    position: relative;
    left: -20px;

    display: inline-block;
    vertical-align: middle;
}
12 голосов
/ 22 марта 2012

Это не идеальное решение, но хороший обходной путь.

Вам необходимо присвоить элементам поведение в виде таблицы с display: table-cell

Решение: Демо

HTML:

<ul>        
    <li>
        <div><input type="checkbox" value="1" name="test[]" id="myid1"></div>
        <div><label for="myid1">label1</label></div>
    </li>
    <li>
        <div><input type="checkbox" value="2" name="test[]" id="myid2"></div>
        <div><label for="myid2">label2</label></div>
    </li>
</ul>

CSS:

li div { display: table-cell; vertical-align: middle; }
2 голосов
/ 27 мая 2019

Наиболее эффективное решение, которое я нашел, это определить родительский элемент с display:flex и align-items:center

LIVE DEMO

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <style>
      .myclass{
        display:flex;
        align-items:center;
        background-color:grey;
        color:#fff;
        height:50px;
      }
    </style>
  </head>
  <body>
    <div class="myclass">
      <input type="checkbox">
      <label>do you love Ananas?
      </label>
    </div>
  </body>
</html>

ВЫХОД:

enter image description here

0 голосов
/ 05 ноября 2018

Это надежно работает для меня.Границы ячейки и высота добавлены для эффекта и ясности:

<table>
  <tr>
    <td style="text-align:right; border: thin solid; height:50px">Some label:</td>
    <td style="border: thin solid;">
      <input type="checkbox" checked="checked" id="chk1" style="cursor:pointer; "><label for="chk1" style="margin-top:auto; margin-left:5px; margin-bottom:auto; cursor:pointer;">Check Me</label>
    </td>
  </tr>
</table>
0 голосов
/ 29 мая 2017
<div>
    <input type="checkbox">
    <img src="/image.png" />
</div>
input[type="checkbox"]
{
    margin-top: -50%;
    vertical-align: middle;
}
0 голосов
/ 16 июня 2014

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

HTML:

<div class="label">
<input type="checkbox" name="test" /> luke..
</div>

CSS:

/*
change margin-top, if your line-height is different.
*/
input[type=checkbox]{
height:18px;
width:18px;
padding:0;
margin-top:5px;
display:block;
float:left;
}
.label{
border:1px solid red;
}

Демо

...