当前位置:  开发笔记 > 前端 > 正文

如何一致地跨浏览器对齐复选框及其标签

如何解决《如何一致地跨浏览器对齐复选框及其标签》经验,为你挑选了18个好方法。

这是困扰我的一些小CSS问题.Stack Overflow周围的人们如何垂直对齐checkboxes以及他们labels一致的跨浏览器?每当我在Safari中正确对齐它们(通常使用vertical-align: baselineinput),他们完全关闭在Firefox和IE.修复它在Firefox中,Safari和IE不可避免地搞砸了.每次编写表单时,我都会浪费时间.

这是我使用的标准代码:

我通常使用Eric Meyer的重置,因此表单元素相对干净的覆盖.期待您提供的任何提示或技巧!



1> One Crayon..:

经过一个多小时的调整,测试和尝试不同风格的标记,我想我可能有一个不错的解决方案.该特定项目的要求是:

    输入必须在他们自己的行上.

    复选框输入需要在所有浏览器中与标签文本垂直对齐(如果不相同).

    如果标签文本换行,则需要缩进(因此不会在复选框下面进行换行).

在我做出任何解释之前,我只会给你代码:

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


2> Nathan Bower..:

有时vertical-align需要彼此相邻的两个内联(span,label,input等)元素才能正常工作.以下复选框在IE,Safari,FF和Chrome中正确垂直居中,即使文本大小非常小或很大.

它们都在同一行上彼此相邻浮动,但now​​rap意味着整个标签文本始终位于复选框旁边.

缺点是额外无意义的SPAN标签.

.checkboxes label {
  display: inline-block;
  padding-right: 10px;
  white-space: nowrap;
}
.checkboxes input {
  vertical-align: middle;
}
.checkboxes label span {
  vertical-align: middle;
}


3> 小智..:

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



4> Frank Schwie..:

一个似乎运作良好的简单方法是使用vertical-align应用复选框的垂直位置.它仍然会因浏览器而异,但解决方案并不复杂.

input {
    vertical-align: -2px;
}

参考


这是所有其他变化中最小的变化,这对我来说在最新版本的浏览器中起作用.
这比使用`vertical-align`和`position:relative`更好,因为它也正确地在IE9中工作:)
但它取决于font-size.对于较大的字体大小,必须将其调整为较高的负值,例如:vertical-align:-6px;

5> digitalsanct..:

尝试 vertical-align: middle

您的代码似乎应该是:



6> Waleed Eissa..:

尝试我的解决方案,我在IE 6,FF2和Chrome中尝试了它,它在所有三个浏览器中逐个像素地呈现.

* {
  padding: 0px;
  margin: 0px;
}
#wb {
  width: 15px;
  height: 15px;
  float: left;
}
#somelabel {
  float: left;
  padding-left: 3px;
}


7> Buzogany Las..:

对我来说唯一完美的解决方案是:

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

今天在Chrome,Firefox,Opera,IE 7和8中进行了测试.例如:小提琴



8> Bryan A..:

我通常使用行高来调整静态文本的垂直位置:

label {
  line-height: 18px;
}
input {
  width: 13px;
  height: 18px;
  font-size: 12px;
  line-height: 12px;
}


9> Patrick..:

我还没有完全测试我的解决方案,但似乎工作得很好.

我的HTML很简单:


然后我将所有复选框设置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的并行):

复选框的屏幕截图:Chrome 复选框的屏幕截图:IE



10> Carlo Pires..:



11> gidzior..:

我认为这是最简单的方法

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

小提琴



12> dylanfm..:

这适合我:

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
}


13> Bryan Willis..:

现在所有现代浏览器都支持flexbox,这样的事情对我来说似乎更容易.



这是完整的前缀版演示:

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
}


14> waterplea..:

我不喜欢相对定位,因为它使元素在其级别上呈现在其他所有内容之上(如果你有复杂的布局,它可以在某些东西之上).

我发现vertical-align: sub在Chrome,Firefox和Opera中,复选框看起来很好.无法检查Safari因为我没有MacOS而且IE10稍微关闭,但我发现它对我来说是足够好的解决方案.

另一种解决方案可能是尝试为每个浏览器制作特定的CSS,并使用%/ pixels/EMs中的一些vertical-align对其进行微调:http: //css-tricks.com/snippets/css/browser-specific-hacks/



15> MusikAnimal..:

选择400+ upvotes的答案对我来说在Chrome 28 OSX中不起作用,可能是因为它没有在OSX中测试过,或者在2008年回答这个问题的时候确实有效.

时代已经改变,现在新的CSS3解决方案是可行的.我的解决方案使用伪元素来创建自定义复选框.所以规定(无论你看看它的优缺点)如下:

仅适用于现代浏览器(FF3.6 +,IE9 +,Chrome,Safari)

依赖于自定义设计的复选框,在每个浏览器/操作系统中都会呈现完全相同的复选框.在这里,我刚刚选择了一些简单的颜色,但你总是可以添加线性渐变等,以便让它更具爆炸性.

是否适合某种字体/字体大小,如果更改,您只需更改复选框的位置和大小,使其显示为垂直对齐.如果调整正确,最终结果仍应接近所有浏览器/操作系统中的完全相同.

没有垂直对齐属性,没有浮动

必须在我的示例中使用提供的标记,如果结构类似于问题,它将无法工作,但是,布局基本上看起来相同.如果你想移动东西,你还必须移动相关的CSS

你的HTML:

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

你的CSS:

此解决方案隐藏了复选框,并将伪元素添加并设置为标签以创建可见复选框.由于标签与隐藏的复选框相关联,因此输入字段仍将更新,并且值将与表单一起提交.

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

如果你有兴趣,这是我对单选按钮的看法:http://jsfiddle.net/DtKrV/2/

希望有人觉得这很有用!



16> John Topley..:

这样做我从来没有遇到过这样的问题:


包装架的问题.但总的来说,是的,因为CSS被缓存,所以我宁愿使用无关的CSS而不是标记,但是可能必须为每个新页面重新加载标记.
那么,你宁愿拥有不必要的CSS,而不是"不必要的"标记(可能几乎每个人使用).
正如我之前对海报所说的那样:我不喜欢它,因为它需要不必要的标记.此外,我尝试了该标记,但很难阻止标签包裹在输入下方(同时仍然在自己的行上有标签/输入组).
比较:1个额外CSS -vs实例 - 许多额外标记实例.

17> Rama Subba R..:

如果使用ASP.NET Web窗体,则无需担心DIV和其他元素或固定大小.我们可以通过设置float:leftCSS中的CheckboxList输入类型来对齐文本.

请检查以下示例代码:

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

.ASPX代码:





18> YakovL..:
最后,让我们看一下问题的根源

复选框是使用图片呈现的(一个可以通过CSS设置自定义)。这是FireFox中的一个(未选中的)复选框,以DOM检查器突出显示:

这是Chrome中相同的无样式复选框:

您可以看到边距(橙色);填充不存在(将显示为绿色)。那么,复选框右侧和底部的伪利润是多少?这些是用于复选框的图像的一部分。这就是为什么仅使用vertical-align: middleJust不够用,这就是跨浏览器问题的根源。

那么我们该怎么办?

一个明显的选择是–替换图像!幸运的是,可以通过CSS做到这一点,并用外部图像,base64(in-CSS)图像,in-CSS svg或只是伪元素来替换它们。这是一种健壮的(跨浏览器!)方法,下面是一个从该问题中窃取此类调整的示例:

.checkbox-custom {
  opacity: 0;
  position: absolute;
}
.checkbox-custom,
.checkbox-custom-label {
  display: inline-block;
  vertical-align: middle;
  margin: 5px;
  cursor: pointer;
}
.checkbox-custom + .checkbox-custom-label:before {
  content: '';
  display: inline-block;
  background: #fff;
  border-radius: 5px;
  border: 2px solid #ddd;
  vertical-align: middle;
  width: 10px;
  height: 10px;
  padding: 2px;
  margin-right: 10px;
  text-align: center;
}
.checkbox-custom:checked + .checkbox-custom-label:before {
  width: 1px;
  height: 5px;
  border: solid blue;
  border-width: 0 3px 3px 0;
  transform: rotate(45deg);
  -webkit-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  border-radius: 0px;
  margin: 0px 15px 5px 5px;
}
推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有