垂直对齐复选框

问题描述 投票:41回答:5

我已经查看了有关此问题的不同问题,但由于我的标记限制而找不到任何可行的问题。

我的标记看起来像是这样(不幸的是,这是由一些后端生成的,我无法更改标记)。

<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的高度是任意的时,复选框仍然需要能够垂直居中。

我怎样才能实现这一目标?

css checkbox vertical-alignment
5个回答
56
投票

垂直对齐仅适用于内联元素。如果你浮动它,那么我认为它不再被视为内联元素流的一部分。

使标签成为内联块,并在标签和输入上使用垂直对齐以对齐其中间。然后,假设标签和复选框上有特定的宽度是可以的,使用相对定位而不是浮动来交换它们(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
投票

它不是一个完美的解决方案,但一个很好的解决方法。

您需要使用display: table-cell将元素指定为表格

Solution: Demo

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; }

1
投票

我找到的最有效的解决方案是使用display:flexalign-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>

OUTPUT:

enter image description here


0
投票
<div>
    <input type="checkbox">
    <img src="/image.png" />
</div>
input[type="checkbox"]
{
    margin-top: -50%;
    vertical-align: middle;
}

0
投票

这对我来说可靠。细胞边界和高度增加了效果和清晰度:

<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
投票

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>

-2
投票

使输入阻塞并浮动,调整保证金最高值。

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;
}

Demo

© www.soinside.com 2019 - 2024. All rights reserved.