如何使用CSS设计复选框?

我正在尝试使用以下方式设置复选框的样式:

<input type="checkbox" style="border:2px dotted #00f;display:block;background:#ff0000;" />

更新:下面的答案引用CSS3的广泛可用性之前的状态。 在现代浏览器(包括Internet Explorer 9及更高版本)中,使用首选样式创建复选框替换更为直接,无需使用JavaScript。

这里有一些有用的链接:

  • 用CSS创建自定义表单复选框
  • 简单的CSS复选框生成器
  • 你可以用复选框黑客做的东西
  • 用CSS3实现自定义复选框和单选按钮
  • 如何使用CSS设置复选框的样式
  • 值得注意的是,根本问题没有改变。 您仍然无法将样式(边框等)直接应用到复选框元素,并且这些样式会影响HTML复选框的显示。 然而,改变之处在于,现在可以隐藏实际的复选框并将其替换为您自己的样式元素,仅使用CSS。 特别是,由于CSS现在有一个广泛的支持:checked选择,你可以让你更换正确反映盒子的检查状态。


    更老的答案

    这里有一篇关于造型复选框的有用文章。 基本上,作者发现,从浏览器到浏览器的变化非常大,许多浏览器总是显示默认复选框,无论你如何设计它。 所以真的不是一个简单的方法。

    不难想象一种解决方法,您可以使用javascript在复选框上叠加图像,并在该图像上点击导致真正的复选框被选中。 没有javascript的用户会看到默认复选框。

    编辑添加:这是一个很好的脚本,为你做到这一点; 它隐藏了真正的复选框元素,将其替换为样式化跨度,并重定向点击事件。


    有一种方法可以仅使用CSS来完成此操作。 我们可以(ab)代替使用label元素和样式。 需要注意的是,这不适用于IE8和更低版本。

    CSS:

    .myCheckbox input {
        // display: none;
        // Better than display: none for accessibility reasons
        position: relative;
        z-index: -9999;
    }
    
    .myCheckbox span {
        width: 20px;
        height: 20px;
        display: block;
        background: url("link_to_image");
    }
    
    .myCheckbox input:checked + span {
        background: url("link_to_another_image");
    }
    

    HTML:

    <label for="test">Label for my styled "checkbox"</label>
    <label class="myCheckbox">
        <input type="checkbox" name="test"/>
        <span></span>
    </label>
    

    通过使用:after:before伪类中的新功能,您可以实现相当酷的自定义复选框效果。 这样做的好处是:您不需要再向DOM添加任何内容,只需添加标准复选框即可。

    请注意,这只适用于兼容的浏览器,我相信这与一些浏览器不允许您在输入元素:after设置:before:before有关。 不幸的是,目前只支持webkit浏览器。 FF + IE仍然允许复选框起作用,只是没有风格,并且这将有望在未来发生变化(代码不使用供应商前缀)。

    这只是一个Webkit浏览器解决方案(Chrome,Safari,Mobile浏览器)

    请参阅示例小提琴

    $(function() {
      $('input').change(function() {
        $('div').html(Math.random());
      });
    });
    /* Main Classes */
    .myinput[type="checkbox"]:before {
      position: relative;
      display: block;
      width: 11px;
      height: 11px;
      border: 1px solid #808080;
      content: "";
      background: #FFF;
    }
    
    .myinput[type="checkbox"]:after {
      position: relative;
      display: block;
      left: 2px;
      top: -11px;
      width: 7px;
      height: 7px;
      border-width: 1px;
      border-style: solid;
      border-color: #B3B3B3 #dcddde #dcddde #B3B3B3;
      content: "";
      background-image: linear-gradient(135deg, #B1B6BE 0%, #FFF 100%);
      background-repeat: no-repeat;
      background-position: center;
    }
    
    .myinput[type="checkbox"]:checked:after {
      background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAQAAABuW59YAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAB2SURBVHjaAGkAlv8A3QDyAP0A/QD+Dam3W+kCAAD8APYAAgTVZaZCGwwA5wr0AvcA+Dh+7UX/x24AqK3Wg/8nt6w4/5q71wAAVP9g/7rTXf9n/+9N+AAAtpJa/zf/S//DhP8H/wAA4gzWj2P4lsf0JP0A/wADAHB0Ngka6UmKAAAAAElFTkSuQmCC'), linear-gradient(135deg, #B1B6BE 0%, #FFF 100%);
    }
    
    .myinput[type="checkbox"]:disabled:after {
      -webkit-filter: opacity(0.4);
    }
    
    .myinput[type="checkbox"]:not(:disabled):checked:hover:after {
      background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAQAAABuW59YAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAB2SURBVHjaAGkAlv8A3QDyAP0A/QD+Dam3W+kCAAD8APYAAgTVZaZCGwwA5wr0AvcA+Dh+7UX/x24AqK3Wg/8nt6w4/5q71wAAVP9g/7rTXf9n/+9N+AAAtpJa/zf/S//DhP8H/wAA4gzWj2P4lsf0JP0A/wADAHB0Ngka6UmKAAAAAElFTkSuQmCC'), linear-gradient(135deg, #8BB0C2 0%, #FFF 100%);
    }
    
    .myinput[type="checkbox"]:not(:disabled):hover:after {
      background-image: linear-gradient(135deg, #8BB0C2 0%, #FFF 100%);
      border-color: #85A9BB #92C2DA #92C2DA #85A9BB;
    }
    
    .myinput[type="checkbox"]:not(:disabled):hover:before {
      border-color: #3D7591;
    }
    
    /* Large checkboxes */
    .myinput.large {
      height: 22px;
      width: 22px;
    }
    
    .myinput.large[type="checkbox"]:before {
      width: 20px;
      height: 20px;
    }
    
    .myinput.large[type="checkbox"]:after {
      top: -20px;
      width: 16px;
      height: 16px;
    }
    
    /* Custom checkbox */
    .myinput.large.custom[type="checkbox"]:checked:after {
      background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGHRFWHRBdXRob3IAbWluZWNyYWZ0aW5mby5jb23fZidLAAAAk0lEQVQ4y2P4//8/AyUYwcAD+OzN/oMwshjRBoA0Gr8+DcbIhhBlAEyz+qZZ/7WPryHNAGTNMOxpJvo/w0/uP0kGgGwGaZbrKgfTGnLc/0nyAgiDbEY2BCRGdCDCnA2yGeYVog0Aae5MV4c7Gzk6CRqAbDM2w/EaQEgzXgPQnU2SAcTYjNMAYm3GaQCxNuM0gFwMAPUKd8XyBVDcAAAAAElFTkSuQmCC'), linear-gradient(135deg, #B1B6BE 0%, #FFF 100%);
    }
    
    .myinput.large.custom[type="checkbox"]:not(:disabled):checked:hover:after {
      background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGHRFWHRBdXRob3IAbWluZWNyYWZ0aW5mby5jb23fZidLAAAAk0lEQVQ4y2P4//8/AyUYwcAD+OzN/oMwshjRBoA0Gr8+DcbIhhBlAEyz+qZZ/7WPryHNAGTNMOxpJvo/w0/uP0kGgGwGaZbrKgfTGnLc/0nyAgiDbEY2BCRGdCDCnA2yGeYVog0Aae5MV4c7Gzk6CRqAbDM2w/EaQEgzXgPQnU2SAcTYjNMAYm3GaQCxNuM0gFwMAPUKd8XyBVDcAAAAAElFTkSuQmCC'), linear-gradient(135deg, #8BB0C2 0%, #FFF 100%);
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <table style="width:100%">
      <tr>
        <td>Normal:</td>
        <td><input type="checkbox" /></td>
        <td><input type="checkbox" checked="checked" /></td>
        <td><input type="checkbox" disabled="disabled" /></td>
        <td><input type="checkbox" disabled="disabled" checked="checked" /></td>
      </tr>
      <tr>
        <td>Small:</td>
        <td><input type="checkbox" class="myinput" /></td>
        <td><input type="checkbox" checked="checked" class="myinput" /></td>
        <td><input type="checkbox" disabled="disabled" class="myinput" /></td>
        <td><input type="checkbox" disabled="disabled" checked="checked" class="myinput" /></td>
      </tr>
      <tr>
        <td>Large:</td>
        <td><input type="checkbox" class="myinput large" /></td>
        <td><input type="checkbox" checked="checked" class="myinput large" /></td>
        <td><input type="checkbox" disabled="disabled" class="myinput large" /></td>
        <td><input type="checkbox" disabled="disabled" checked="checked" class="myinput large" /></td>
      </tr>
      <tr>
        <td>Custom icon:</td>
        <td><input type="checkbox" class="myinput large custom" /></td>
        <td><input type="checkbox" checked="checked" class="myinput large custom" /></td>
        <td><input type="checkbox" disabled="disabled" class="myinput large custom" /></td>
        <td><input type="checkbox" disabled="disabled" checked="checked" class="myinput large custom" /></td>
      </tr>
    </table>
    链接地址: http://www.djcxy.com/p/41449.html

    上一篇: How to style a checkbox using CSS?

    下一篇: Generalizing INPUT fields cross