跨浏览器自定义复选框

时间:2016-09-27 18:51:15

标签: html css firefox cross-browser

我已使用HTMLCSS代码构建自定义复选框。我相信我的代码有正确的网络工具包,但它似乎不适用于FireFox。

以下是代码:

HTML

 <input type='checkbox' style="float: left" class='regular-checkbox big-checkbox'
     checked='checked' id='product-45-45' name='product_id_page-0[45-45]'
     value='45-45' data-first_price="11.99" data-second_price="" data-paysys="" />

CSS

.regular-checkbox {
    -webkit-appearance: none;
    -moz-appearance: none;
    background-color: #fafafa;
    border: 1px solid #cacece;
    box-shadow: 0 1px 2px rgba(0,0,0,0),inset 0 -15px 10px -12px rgba(0,0,0,0);
    -moz-box-shadow: 0 1px 2px rgba(0,0,0,0),inset 0 -15px 10px -12px rgba(0,0,0,0);
    -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0),inset 0 -15px 10px -12px rgba(0,0,0,0);
    padding: 9px;
    border-radius: 20px;
    -moz-border-radius: 20px;
    -webkit-border-radius: 20px;
    display: inline-block;
    position: relative;
}
.regular-checkbox:active,
.regular-checkbox:checked:active {
    box-shadow: 0 1px 2px rgba(0,0,0,0),inset 0 1px 3px rgba(0,0,0,0);
    -moz-box-shadow: 0 1px 2px rgba(0,0,0,0),inset 0 1px 3px rgba(0,0,0,0);
    -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0),inset 0 1px 3px rgba(0,0,0,0);
}
.regular-checkbox:checked {
    background-color: #e9ecee;
    box-shadow: 0 1px 2px rgba(0,0,0,0),inset 0 -15px 10px -12px rgba(0,0,0,0),inset 15px 10px -12px rgba(255,0,0,0);
    -moz-box-shadow: 0 1px 2px rgba(0,0,0,0),inset 0 -15px 10px -12px rgba(0,0,0,0),inset 15px 10px -12px rgba(255,0,0,0);
    -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0),inset 0 -15px 10px -12px rgba(0,0,0,0),inset 15px 10px -12px rgba(255,0,0,0);
}
.regular-checkbox:checked:after {
    content: '\2714';
    font-size: 14px;
    position: absolute;
    top: 0;
    left: 3px;
    color: #19a73e;
}
.big-checkbox {
    padding: 18px;
}
.big-checkbox:checked:after {
    font-size: 37px;
    top: -7px;
    left: 2px;
}

所需结果的屏幕截图(适用于Chrome):

enter image description here

2 个答案:

答案 0 :(得分:4)

尝试使用此代码,我不知道解释,但我为你做了一个版本;)

.regular-checkbox{
		display: inline-block;
		border-radius: 50%;
		width: 38px;
		height: 38px;
		border: 1px solid #ccc;
	}
	.regular-checkbox input{
		opacity: 0;
		position: absolute;
	}
	.regular-checkbox small{
		width: 100%;
		height: 100%;
		float: left;
	}
	.regular-checkbox input:checked ~ small:after{
		content: '\2714';
		height: 38px; 
		width: 38px;
		color: green;
		font-size: 26px;
		text-align: center;
		float: left;
	}
<label class="regular-checkbox">
    <input type="checkbox">
    <small></small>
</label>

答案 1 :(得分:1)

这是Firefox中的一个已知问题 - 有使用<label><span>的解决方法。

MDN还提到样式化某些表单元素有点痛苦 - read more here

.checkbox input[type="checkbox"] {
  display: none;
}
.checkbox span {
  background-color: #fafafa;
  border: 1px solid #cacece;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0), inset 0 -15px 10px -12px rgba(0, 0, 0, 0);
  padding: 22px;
  -webkit-border-radius: 50%;
  border-radius: 50%;
  display: inline-block;
  position: relative;
}
.checkbox :active + span,
.checkbox :checked:active span {
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0), inset 0 1px 3px rgba(0, 0, 0, 0);
}
.checkbox :checked + span {
  background-color: #e9ecee;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0), inset 0 -15px 10px -12px rgba(0, 0, 0, 0), inset 15px 10px -12px rgba(255, 0, 0, 0);
}
.checkbox :checked + span:after {
  content: '\2714';
  font-size: 14px;
  position: absolute;
  top: 0;
  left: 0px;
  width: 100%;
  color: #19a73e;
  text-align: center;
}
.big-checkbox {
  padding: 18px;
}
.big-checkbox:checked + span:after {
  font-size: 37px;
}
<label class="checkbox" for="product-45-45">
  <input type='checkbox' style="float: left" class='regular-checkbox big-checkbox' checked='checked' id='product-45-45' name='product_id_page-0[45-45]' value='45-45' data-first_price="11.99" data-second_price="" data-paysys="" />
  <span></span>
</label>