【问题标题】:CSS -webkit-appearance: none; is causing checkbox to not be checkedCSS -webkit-外观:无;导致复选框未被选中
【发布时间】:2013-11-18 20:48:57
【问题描述】:

所有, 我有一个复选框,我将以下 CSS 样式应用于:

-webkit-appearance: none;

我拥有的一些文本字段上有相同的代码,这些代码仍然可以正常工作。为什么这个功能导致不允许选中复选框?

我喜欢这种复选框的样式,但仍然需要该功能才能工作。如果我将代码更改为:

-webkit-appearance: checkbox;

它显示标准复选框。有任何想法吗?这是一个用于演示目的的 JS Fiddle: http://jsfiddle.net/VWC76/

【问题讨论】:

  • 当您将其设置为无时,它会禁用标准外观(复选框)。你可以通过说input[type=text] { -webkit-appearance: none; }来指定你的输入。
  • 我不想显示标准外观复选框。我想显示应用了 CSS 的自定义版本,但是当我这样做时,我失去了复选框的功能。

标签: css


【解决方案1】:

您刚刚在 WebKit 上取消了所有样式的复选框,所以是的,您看不到它们是否被选中(它们仍然是,只是我们没有屏幕阅读器的有视力的人看不到)。

您需要使用 :checked 伪设置选中状态的样式:http://jsfiddle.net/VWC76/450/

input[type=checkbox]:checked {
    background-color: red;
    /* or whatever styles you want depending on your design */
    /* be as obvious as possible that it's a checkbox and that it's checked! */
}

编辑:

编辑 2:

  • 在小提琴演示中,在复选框之前和之后添加可聚焦元素以显示它与键盘一起使用(只需单击第一次出现的“测试”,然后单击选项卡选项卡空间选项卡)。它缺少复选框/标签聚焦的任何视觉提示,这是一件坏事(这是一个演示)。 最好在 Chrome 上看到,这是一个更糟糕的事情:p(你需要 Autoprefixer。试试 Codepen)

【讨论】:

  • 大声笑。我在这里是因为我也在不知不觉中按下了红色的大发射核弹按钮。幸运的是我没有造成任何伤害=P
  • 该示例无法访问。它完全不能用键盘使用。
  • @Webveloper 仅在 JSFiddle 中(它是 iframe 的复杂组合,除非您单击正确的 iframe...,否则很难通过键盘使用...)或任何地方?我添加了可聚焦元素和编辑说明:它有效。
【解决方案2】:

你需要添加一个输入[type=checkbox]:checked

input[type=checkbox]:checked {
   background: #BADA55;
}

如果这是你要找的?

【讨论】:

  • @AidanMiles 非常接近僵尸绿色;)
【解决方案3】:

禁用外观也会删除选中的外观。您还需要添加样式来定义复选框在选中时的显示方式。

input[type='checkbox']:checked
{
    position:relative;
}
input[type='checkbox']:checked:before
{
    content:'';
    display:block;
    width:17px;
    height:16px;
    position:absolute;
    top:1px;
    left:1px;
    background:none #ACACB8;
    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    border-radius: 3px;
    opacity:0.5;
}

查看下面的小提琴示例:

http://jsfiddle.net/8n8hM/

【讨论】:

  • 请注意 :beforeinput现在 工作,并且可能在未来(或不那么未来)版本的 Blink/WebKit 中无法工作。请参阅 this answer 以供参考以及 Jukka K. Korpela 的回答。我会确保检查的输入有一些风格,一种被:before设置的风格隐藏的风格@
【解决方案4】:

个性化checkbox 或跨浏览器的单选按钮的最佳方法是使用您为checkbox 设置的label。 在您的 CSS 中,您隐藏您的 checkbox 并为标签添加您想要的任何样式。

input[type='checkbox'] {
    outline: 0;
    user-select: none;
    display: inline-block;
    position: absolute;
    opacity: 0;
}
input[type='checkbox'] + label {
    display:inline-block;
    width:20px;
    height:20px;
    background-color:blue
}
input[type='checkbox']:checked + label {
    background-color:red
}
<input id="myChk" type="checkbox" />
<label for="myChk">&nbsp</label>

看到这个jsfiddle

【讨论】:

  • 根据当前的浏览器标准,为了保护用户,任何呈现为不可见、屏幕外或不可访问的输入框都不会与表单值一起提交。此示例从显示中删除复选框,并从提交中删除其值。
  • 使用这个从来没有问题。有官方链接吗?
猜你喜欢
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 2016-03-28
  • 2022-11-10
相关资源
最近更新 更多