【问题标题】:CSS checkbox input stylingCSS复选框输入样式
【发布时间】:2010-11-10 09:21:31
【问题描述】:

input 的任何样式都会影响每个输入元素。有没有办法指定样式以仅应用于复选框而不将类应用于每个复选框元素?

【问题讨论】:

    标签: css


    【解决方案1】:

    使用 CSS 2,您可以做到这一点:

    input[type='checkbox'] { ... }
    

    现在应该得到相当广泛的支持。 See support for browsers

    【讨论】:

    • 我相信 IE 7 和更大的支持属性选择器,实际上是 CSS 2.1。 quirksmode.org/css/contents.html
    • @realtebo:请注意,许多样式(边框、背景等)不能直接应用于 HTML 复选框。
    • @RoyTinker 对于复选框,您可以使用outline,而不是border
    【解决方案2】:

    您可以通过以下方式仅应用于某些属性:

    input[type="checkbox"] {...}
    

    它解释它here

    【讨论】:

      【解决方案3】:
      input[type="checkbox"] {
       /* your style */
      }
      

      但这仅适用于除 IE7 及以下版本之外的浏览器,对于那些您必须使用类的浏览器。

      【讨论】:

      【解决方案4】:

      虽然 CSS 确实为您提供了一种方法来实现特定于复选框类型或其他类型的样式,但不支持此功能的浏览器会出现问题。

      我认为在这种情况下您唯一的选择是将类应用于您的复选框。

      只需将 class="checkbox" 添加到您的复选框中即可。

      然后在您的 css 代码中创建该样式。

      你可以做的一件事是:

      main.css

      input[type="checkbox"] { /* css code here */ }
      

      ie.css

      .checkbox{ /* css code here for ie */ }
      

      然后使用IE特定的css包括:

      <!--[if lt IE 7]>
         <link rel="stylesheet" type="text/css" href="ie.css" />
      <![endif]-->
      

      您仍然需要添加该类以使其在 IE 中工作,并且在其他不支持 IE 的非 IE 浏览器中将无法工作。但这将使您的网站具有前瞻性的 css 代码,并且随着 IE 获得支持,您将能够从复选框中删除 ie 特定的 css 代码以及 css 类。

      【讨论】:

      • 感谢关于 2 样式表的提示。虽然我试图避免这种事情,但我想我只会为复选框创建一个样式,就是这样......
      【解决方案5】:

      由于 IE6 不支持属性选择器,您可以将只有 IE6(带有条件 cmets)才能看到的脚本和 jQuery 或 Dean Edwards 的 IE7.js 组合起来。

      IE7(.js) 是一个 JavaScript 库,使 Microsoft Internet Explorer 的行为类似于符合标准的浏览器。它修复了许多 HTML 和 CSS 问题,并使透明 PNG 在 IE5 和 IE6 下正常工作。

      使用类或 jQuery 或 IE7.js 的选择取决于您的好恶以及您的其他需求(可能是整个网站的 PNG-24 透明度,而不必依赖具有回退到 1 位的完全透明度的 PNG-8 IE6 上的透明度 - 仅由 Fireworks 和 pngnq 等创建)

      【讨论】:

        【解决方案6】:

        类也很好用,比如:

        <style>
          form input .checkbox
          {
            /* your checkbox styling */
          }
        </style>
        
        <form>
          <input class="checkbox" type="checkbox" />
        </form>
        

        【讨论】:

        • 可能没有必要将 .checkbox 嵌套在表单内,因为您不太可能在表单外找到复选框。也输入 .checkbox 应该是 input.checkbox
        • @DuncanWalker 我还没有测试过,但是form 标签对于将输入控件绑定到默认提交控件不是必需的吗?
        • @Jim Fell 这不起作用。如果我为两个不同样式的复选框(即 .checkbox1 [input='checkbox'] 和 .checkbox2[input='checkbox'])创建两个不同的类,则样式总是会同时影响这两者……您如何确保样式是分开的?
        • @Krys 你需要给你的复选框元素不同的类名。
        【解决方案7】:

        我最近发现了一些用于样式单选按钮和复选框的东西。之前,我不得不使用 jQuery 和其他东西。但这太简单了。

        input[type=radio] {
            padding-left:5px;
            padding-right:5px;
            border-radius:15px;
        
            -webkit-appearance:button;
        
            border: double 2px #00F;
        
            background-color:#0b0095;
            color:#FFF;
            white-space: nowrap;
            overflow:hidden;
        
            width:15px;
            height:15px;
        }
        
        input[type=radio]:checked {
            background-color:#000;
            border-left-color:#06F;
            border-right-color:#06F;
        }
        
        input[type=radio]:hover {
            box-shadow:0px 0px 10px #1300ff;
        }
        

        您可以对复选框执行相同的操作,显然将input[type=radio] 更改为input[type=checkbox] 并将border-radius:15px; 更改为border-radius:4px;

        希望这对您有所帮助。

        【讨论】:

        【解决方案8】:

        Trident 为复选框和单选按钮控件提供::-ms-check 伪元素。例如:

        <input type="checkbox">
        <input type="radio">
        
        ::-ms-check {
            color: red;
            background: black;
            padding: 1em;
        }
        

        在 Windows 8 的 IE10 中显示如下:

        【讨论】:

          【解决方案9】:

          我创建自己的无标签解决方案

          input[type=checkbox] {
                   position: relative;
          	       cursor: pointer;
              }
              input[type=checkbox]:before {
                   content: "";
                   display: block;
                   position: absolute;
                   width: 16px;
                   height: 16px;
                   top: 0;
                   left: 0;
                   border: 2px solid #555555;
                   border-radius: 3px;
                   background-color: white;
          }
              input[type=checkbox]:checked:after {
                   content: "";
                   display: block;
                   width: 5px;
                   height: 10px;
                   border: solid black;
                   border-width: 0 2px 2px 0;
                   -webkit-transform: rotate(45deg);
                   -ms-transform: rotate(45deg);
                   transform: rotate(45deg);
                   position: absolute;
                   top: 2px;
                   left: 6px;
          }
          <input type="checkbox" name="a">
          <input type="checkbox" name="a">
          <input type="checkbox" name="a">
          <input type="checkbox" name="a">

          input[type=checkbox] {
                   position: relative;
          	       cursor: pointer;
              }
              input[type=checkbox]:before {
                   content: "";
                   display: block;
                   position: absolute;
                   width: 20px;
                   height: 20px;
                   top: 0;
                   left: 0;
                   background-color:#e9e9e9;
          }
          input[type=checkbox]:checked:before {
                   content: "";
                   display: block;
                   position: absolute;
                   width: 20px;
                   height: 20px;
                   top: 0;
                   left: 0;
                   background-color:#1E80EF;
          }
              input[type=checkbox]:checked:after {
                   content: "";
                   display: block;
                   width: 5px;
                   height: 10px;
                   border: solid white;
                   border-width: 0 2px 2px 0;
                   -webkit-transform: rotate(45deg);
                   -ms-transform: rotate(45deg);
                   transform: rotate(45deg);
                   position: absolute;
                   top: 2px;
                   left: 6px;
          }
          <input type="checkbox" name="a">
          <input type="checkbox" name="a">
          <input type="checkbox" name="a">
          <input type="checkbox" name="a">

          【讨论】:

          【解决方案10】:

          感谢所有为这篇文章做出贡献的人。 看看我使用纯 CSS 能够完成什么。

          input[type=checkbox] {
            position: absolute;
            cursor: pointer;
            width: 0px;
            height: 0px;
          }
          
          input[type=checkbox]:checked:before {
                content: "";
            display: block;
            position: absolute;
            width: 34px;
            height: 34px;
            border: 4px solid #FFCB9A;
            border-radius: 20px;
            background-color: #445768;  
            transition: all 0.2s linear;
          }
          
          
          input[type=checkbox]:before {
            content: "";
            display: block;
            position: absolute;
            width: 34px;
            height: 34px;
            border: 4px solid #FFCB9A;
            border-radius: 3px;
            background-color: #445768;
          }
          
          
          input[type=checkbox]:after {
            content: "";
            display: block;
            width: 0px;
            height: 0px;
            border: solid #FFCB9A;
            border-width: 0 0px 0px 0;
            -webkit-transform: rotate(180deg);
            -ms-transform: rotate(180deg);
            transform: rotate(180deg);
            position: absolute;
            top: 0px;
            left: 50px;
            transition: all 0.2s linear;
          }
          
          input[type=checkbox]:checked:after {
            content: "";
            display: block;
            width: 12px;
            height: 21px;
            border: solid #FFCB9A;
            border-width: 0 5px 5px 0;
            -webkit-transform: rotate(45deg);
            -ms-transform: rotate(45deg);
            transform: rotate(45deg);
            position: absolute;
            top: 2px;
            left: 14px;
          }
          &lt;input type="checkbox"&gt;

          摘要

          因此,以下控制我们通过添加 h:0 和 w:0 隐藏的实际复选框。

          input[type=checkbox] {...}
          

          其余部分控制虚拟复选框。

          这控制了选中时虚拟复选框的背景。

          input[type=checkbox]:checked:before {...}
          

          这将控制未选中时虚拟复选框的背景。

          input[type=checkbox]:before {...}
          

          当 UNCHECKED 时,这控制虚拟复选框的前景。

          input[type=checkbox]:after {...}
          

          这在 CHECKED 时控制虚拟复选框的前景。

          input[type=checkbox]:checked:after {...}
          

          我真的希望它能像它帮助我一样帮助你:)

          【讨论】:

          • 这个解决方案似乎只适用于基于 chromium 的浏览器。在 Firefox 中,复选框仍然是默认设计。 JSFiddle
          • 感谢您提请我注意。
          猜你喜欢
          • 2010-12-31
          • 2010-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-05
          • 2011-09-25
          • 2017-12-01
          • 2014-12-08
          相关资源
          最近更新 更多