Вертикальное выравнивание флажка
Я рассмотрел различные вопросы, касающиеся этой проблемы, но не смог найти ничего, что работает из-за ограничений в моей разметке.
Моя разметка выглядит так (к сожалению, поскольку это генерируется некоторыми бэкэнд, я не могу изменить разметку).
<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 произвольна.
Как я могу добиться этого?
Ответы
Ответ 1
Вертикальное выравнивание работает только на встроенных элементах. Если вы используете его, то я не думаю, что он больше рассматривается как часть этого потока встроенных элементов.
Сделайте метку встроенным блоком и используйте вертикальное выравнивание на метке и на входе, чтобы выровнять их середины. Затем, предполагая, что можно иметь определенную ширину на ярлыках и флажках, используйте взаимное расположение вместо плавающего, чтобы поменять их местами (демонстрация jsFiddle):
input {
width: 20px;
position: relative;
left: 200px;
vertical-align: middle;
}
label {
width: 200px;
position: relative;
left: -20px;
display: inline-block;
vertical-align: middle;
}
Ответ 2
Это не идеальное решение, но хорошее обходное решение.
Вам нужно назначить свои элементы для работы в качестве таблицы с помощью 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; }
Ответ 3
<div>
<input type="checkbox">
<img src="/image.png" />
</div>
input[type="checkbox"]
{
margin-top: -50%;
vertical-align: middle;
}
Ответ 4
Это работает надежно для меня. Границы и высота ячейки добавлены для эффекта и ясности:
<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>
Ответ 5
Add CSS:
li {
display: table-row;
}
li div {
display: table-cell;
vertical-align: middle;
}
.check{
width:20px;
}
ul{
list-style: none;
}
<ul>
<li>
<div><label for="myid1">Subject1</label></div>
<div class="check"><input type="checkbox" value="1"name="subject" class="subject-list" id="myid1"></div>
</li>
<li>
<div><label for="myid2">Subject2</label></div>
<div class="check" ><input type="checkbox" value="2" class="subject-list" name="subjct" id="myid2"></div>
</li>
</ul>
Ответ 6
Наиболее эффективное решение, которое я нашел, - определить родительский элемент с помощью 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]()
Ответ 7
введите ввод в блок и float, отрегулируйте верхнее значение поля.
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;
}
Демо