纯css兼容个浏览器input[type='radio']不能自定义样式

各个浏览器对于表单input[type=‘radio‘]、input[type=‘checkbox‘]的样式总是各有差异

//html

<div class="remember-account">
      <input type="checkbox">
      <span>记住账号</span>
</div>

  

//css
.remember-account {
    display: inline-block;
    font-size: 18px;
    color: #fff;
    float: left;
    margin-left: 26px;
}
.remember-account input[type="checkbox"] {
    -webkit-appearance: none;
    outline: none;
    border: none;
    background-color: transparent;
    box-sizing: border-box;
    height: 24px;
    width: 24px;
    cursor: pointer;
    border: 1px solid #fff;
    box-sizing: border-box;
    border-radius: 6px;
    vertical-align: middle;
}
input[type="checkbox"]:checked {
    height: 24px;
    width: 24px;
    background-image: url(../images/login/pick.png);
    background-repeat: no-repeat;
    background-position: 0 0;
    vertical-align: middle;
    border: none;
}
.remember-account span{
    display: inline-block;
}

  

//没有选择 和 勾选(checked )后 : 效果

火狐(Firefox):

 

chrome、opera:

 

对input设置width:24px;height:24px;火狐没有任何效果;说明火狐上不支持input样式的自定义

下面进行兼容性(完全css,不用一点js),多说上代码:

//html
<div class="remember-account">
    <input type="checkbox">
    <div class="sub-checkbox"></div>
    <span>记住账号</span>
</div>
//css
//增加的样式代码,用/**/注释出来;可对比
.remember-account {
    position: relative;  /*父层*/
    display: inline-block;
    font-size: 18px;
    color: #fff;
    float: left;
    margin-left: 26px;
}
.remember-account input[type="checkbox"] {
    position: absolute;  /*input,相对定位*/
    -webkit-appearance: none;
    outline: none;
    border: none;
    background-color: transparent;
    box-sizing: border-box;
    height: 24px;
    width: 24px;
    cursor: pointer;
    border: 1px solid #fff;
    box-sizing: border-box;
    border-radius: 6px;
    vertical-align: middle;
    opacity: 0; /*透明度为0,隐藏掉input*/
    z-index: 2; /* 比input下面的div,z-index:1大,层叠在最上面,点击时候能点击到input */

}
/*用div模拟input的样式*/
.sub-checkbox{
    display: inline-block;
    position: absolute; /*input下面的div,相对定位*/
    -webkit-appearance: none;
    outline: none;
    border: none;
    background-color: transparent;
    box-sizing: border-box;
    height: 24px;
    width: 24px;
    cursor: pointer;
    border: 1px solid #fff;
    box-sizing: border-box;
    border-radius: 6px;
    vertical-align: middle;
    z-index: 1;/* 比input的z-index:2小,层叠在下面面 */
}
/*!!利用伪类的写法+;input选中后,下面的div的样式*/
input[type="checkbox"]:checked + div {
    height: 24px;
    width: 24px;
    background-image: url(../images/login/pick.png);
    background-repeat: no-repeat;
    background-position: 0 0;
    vertical-align: middle;
    border: none;
}
.remember-account span{
    display: inline-block;
    margin-left: 30px;/*因为input和它下面的div都相对定位脱离了文本流,所以不给距离,文字会层叠过去*/
}

 

//兼容后的效果

火狐(Firefox)、chrome、opera:

//在控制台上检测一下是否选择了(checked)

纯css兼容个浏览器input[type='radio']不能自定义样式

时间: 2024-09-30 19:05:34

纯css兼容个浏览器input[type='radio']不能自定义样式的相关文章

如何更改 iOS 和安卓浏览器上的 input[type=&quot;radio&quot;] 元素的默认样式?

Safari 上的默认样式是这样的, 背景颜色可以使用background-color改变,但中间那个点始终无法去掉. 我查了一些jQuery插件,如iCheck.js,但是那说明写得我都看不明白,根本不知道如何使用. 还有-webkit-appearance:none;属性会直接将input[type="radio"]元素隐藏. 应该如何更改?我的目标只是一个选中时是纯色的圆形,未选中时是带边框的透明圆形. 还可用css伪类写 <h3>CSS3 Custom radio&

自定义input[type=&quot;radio&quot;]的样式

对于表单,input[type="radio"] 的样式总是不那么友好,在不同的浏览器中表现不一. 为了最大程度的显示出它们的差别,并且为了好看,首先定义了一些样式: html: <form action=""> <div class="sex"> <div class="female"> <label for="female">女</label>

CSS兼容各浏览器的hack

CSS兼容各浏览器的hack:建议:尽可能的手写代码,可以有效的提高学习效率和深度.浏览器的种类多,麻烦自然也多,主要是各种浏览器对某些属性的渲染效果并不相同,所以有时候需要专门针对特定浏览器或者特定版本书写CSS代码,这样就需要用到所谓的“CSS Hack”,下面以一段实例的形式介绍一下个浏览器hack. <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content

&lt;input type=&quot;radio&quot; &gt;与&lt;input type=&quot;checkbox&quot;&gt;值得获取

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <meta http-equiv="content-

form中 单选框 input[type="radio"] 分组

在form中有时候需要给单选框分组,这种情况下 可以通过给单选框设置相同的name来进行分组: <html> <head> <title> </title> </head> <meta charset="utf-8"> <body> <form action="" method=""> <!--通过name将他们分组--> <inpu

jQuery操作&lt;input type=&quot;radio&quot;&gt;

jQuery操作<input type="radio"> <input type="radio">如下: 1 2 3 4 5 <input type="radio" name="city" value="BeiJing">北京 <input type="radio" name="city" value="TianJi

点击文字,把input type="radio"也选中

1. <label> <input type="radio" name="radiobutton" value="radiobutton" />测试? </label> 2. <label for="radiobutton"> <input type="radio" name="radiobutton" id="radiob

jquery 获取 input type radio checked的元素

.find('input:radio:checked'):.find("input[type='radio']:checked");.find("input[name='radio']:checked");.find("input[@name='radio'][checked]");.find("input[name='radio']").filter(':checked');

Jquery给input[type=radio] 控件赋值

1 setobject: function (data, scope, win) { //data jsoon数据, scope,一般为form的id,win 窗口对象,如果在当前window win=null 2 $.each(data, function (id, value) { //循环json数据每个属性 3 var control; //当前控件 4 if (scope) { 5 if(win){ 6 control = $("#" + scope + " #&q