【问题标题】:Why can't I tab into CSS3 checkboxes?为什么我不能进入 CSS3 复选框?
【发布时间】:2026-01-07 21:35:02
【问题描述】:

我一直在关注仅使用 CSS3 设置复选框样式的教程,这就是我想出的:

演示:

http://cssdeck.com/labs/jaoe0azx

复选框的样式很好 - 但是当我通过表单控件进行选项卡时 -> 复选框被跳过。任何建议为什么?

HTML:

<form role="form" id="login_form" data-mode="login">
    <div class="form-group">
       <label for="ue">Username or email:</label>
       <input type="email" class="form-control input-lg" name="ue" id="ue" placeholder="" />
    </div>
    <div class="form-group">
       <label for="password">Password:</label>
       <input type="password" class="form-control input-lg" name="password" id="password" placeholder="" />
    </div>
    <div>
          <input id="rememberme" type="checkbox" name="rememberme" value="1" class="checkbox_1" tabindex="0" />
          <label for="rememberme" class="checkbox_1" tabindex="0">remember me</label>
    </div>
    <div id="auth_area_login_button">
        <button class = "btn btn-lg btn-primary">
            Login
        </button>
    </div>
</form>

CSS:

 @import url('//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css');    

#login_form{padding:20px;}

label.checkbox_1 {
    display: inline-block;
    cursor: pointer;
    position: relative;
    padding-left: 25px;
    margin: 0px;
}

label.checkbox_1:before {
    content: "";
    display: inline-block;
    width: 16px;
    height: 16px;
    margin-right: 10px;
    position: absolute;
    left: 0;
    bottom: 1px;
    background-color: #fff;
    border: 1px solid #ccc;
    border-radius: 0px;
}
label.checkbox_1:hover:before{border-color:#66afe9;}
input[type=checkbox].checkbox_1 {
    display: none;
}

input[type=checkbox].checkbox_1:checked + label.checkbox_1:before {
    content: "\2713";
    font-size: 15px;
    color: #A0A0A0;
    text-align: center;
    line-height: 15px;
}

编辑1:

似乎可以在 Firefox 中工作,但不能在 chrome 中...

【问题讨论】:

  • 您好,请在此处显示一些相关代码。谢谢! (Here's 为什么)
  • 似乎在密码字段上按 tab 后获得焦点,至少在最新的 Firefox (26.0) 上,但我无法使用空格键检查它,就像在“正常”复选框中一样。跨度>
  • 嗯。是的 - 在 Firefox 中工作,而不是 chrome...

标签: html css checkbox


【解决方案1】:

输入必须可访问才能获得焦点。如果您添加以下行,它适用于铬/铬。

input[type=checkbox].checkbox_1 {
    opacity: 0;
}
input[type=checkbox].checkbox_1:focus + label.checkbox_1:before {    
    border: 1px solid #66afe9;
}

【讨论】:

  • 我采用了这种方法,但设置了轮廓而不是边框​​。 &amp;:focus + label::before { outline: auto; outline-color: -webkit-focus-ring-color; }
【解决方案2】:

由于真正的复选框是用display:none 隐藏的,因此您无法聚焦它,但您也可以不隐藏元素,只需使其位于标签的:before 下即可:

input[type=checkbox].checkbox_1 {
  position: absolute;
  width: 16px;
  height: 16px;
  margin: 0;
  border: 1px solid transparent;
  margin-top: 3px;
}

查看http://cssdeck.com/labs/pl4ljry7

在 Chrome 中测试

【讨论】:

  • 我尝试检查您的链接焦点在此不起作用
  • 嗨@khush,老问题,但我检查并仍然有效。也许在视觉上你没有注意到,因为焦点状态缺少样式。我已经添加了一些样式,所以你可以看到它在工作cssdeck.com/labs/pl4ljry7 ...。点击密码,然后点击 TAB,你应该会看到它高亮,通常这可以通过按空格来切换。试一试,让我知道
  • 从密码字段中单击选项卡后,复选框应该被聚焦,我刚刚尝试过,它不适用于您的链接 - 当当前焦点位于密码字段时,要关注复选框用户必须单击两次
【解决方案3】:

因为,它不是一个复选框。

看css:

input[type=checkbox].checkbox_1 {
    display: none;
}

复选框实际上是隐藏的。因此,您将无法集中注意力。显示的程式化正方形和复选标记通过label 上的:before 伪元素。伪元素无法聚焦。标签也不能。

【讨论】:

  • 将其隐藏在标签后面,以便保持默认的 tabIndex。
  • 如果&lt;label/&gt; 具有tabindex="0" 或其他一些tabindex 设置,则可以对其进行聚焦。
  • @binki:不,你不能。在这里查看我的另一个答案:*.com/a/27568825/1355315
  • 好的,你可以在 IE-11 和现代 Mozilla 中。
【解决方案4】:

我知道这是一个老问题,但是当 CSS 解决方案对我不起作用时,我想出了一个 Jquery 解决方案,并认为其他人可能会觉得这很有帮助。我用所需的 tabindex 值和类“checkbox-add-tabindex”将输入包装在一个 div 中。然后,使用 Jquery,我将 tabindex 从 div 转移到输入。

HTML:

<div class="checkbox-add-tabindex" tabindex="10">
    <input id="rememberme" type="checkbox" name="rememberme" value="1" class="checkbox_1" tabindex="0" />
     <label for="rememberme" class="checkbox_1" tabindex="0">remember me</label>
</div>

jquery:

$(".checkbox-add-tabindex").focus(
    function () {
        var tabval = $(this).prop("tabindex");
        $(this).removeAttr("tabindex");
        $(this).children(":first").attr("tabindex", tabval);
        $(this).children(":first").focus();
     })

【讨论】:

  • 我可以通过添加 tabindex='0' 来使我的选项卡可以显示,但不能使用空格键选择/取消选择?
最近更新 更多