我想像下面那样设置复选框的样式:
这是我的 CSS :
.checkboxcontact input[type="checkbox"] {
-webkit-appearance: none;
background-color: white;
border: 1px solid #d44803;
padding: 9px;
border-radius: 3px;
display: inline-block;
position: relative;
float:left;
}
.checkboxcontact input[type="checkbox"]:checked {
background-color: #d44803;
border: 1px solid white;
color: #fff;
}
.checkboxcontact input[type="checkbox"]:checked:after {
content: '\2714';
font-size: 14px;
position: absolute;
top: 0;
left: 3px;
color: #fff;
font-family: "FontAwesome";
}
这在桌面和Chrome手机上显示完美。
但问题出在iPhone上的Safari上。它显示如下:
我该如何解决这个问题?是否有后备或什么?
答案 0 :(得分:4)
如上所述,伪元素不能很好地处理输入,但是,将复选框包含在标签中是个好主意 - 它是w3c有效的,所以它按预期工作,您不必使用for
标记作为标签,也不必使用id
作为输入复选框。
这是HTML:
<label class="custom-checkbox">
<input type="checkbox" value="checkbox1">
<span>Checkbox</span>
</label>
代码足够通用,所以如果你只需要复选框,没有标签,你只需要留空 - 你必须保留标签 - 或者你可以创建自己的自定义类来应用伪元素在标签上。
这是CSS:
.custom-checkbox {
position: relative;
display: block;
margin-top: 10px;
margin-bottom: 10px;
line-height: 20px;
}
.custom-checkbox span {
display: block;
margin-left: 20px;
padding-left: 7px;
line-height: 20px;
text-align: left;
}
.custom-checkbox span::before {
content: "";
display: block;
position: absolute;
width: 20px;
height: 20px;
top: 0;
left: 0;
background: #fdfdfd;
border: 1px solid #e4e5e7;
@include vendorize(box-shadow, inset 2px 2px 0px 0px rgba(0, 0, 0, 0.1));
}
.custom-checkbox span::after {
display: block;
position: absolute;
width: 20px;
height: 20px;
top: 0;
left: 0;
font-size: 18px;
color: #0087b7;
line-height: 20px;
text-align: center;
}
.custom-checkbox input[type="checkbox"] {
opacity: 0;
z-index: -1;
position: absolute;
}
.custom-checkbox input[type="checkbox"]:checked + span::after {
font-family: "FontAwesome";
content: "\f00c";
background:#d44803;
color:#fff;
}
这是一个工作小提琴: https://jsfiddle.net/ee1uhb3g/
已在所有浏览器上经过测试 - FF,Chrome,Safari,IE等
答案 1 :(得分:2)
伪元素:after
或:before
与输入类型元素无法正常工作。因此添加像after之类的伪元素是不正确的。因此,在复选框旁边添加标签并为其添加样式。
.checkboxcontact label {
display: inline-block;
position: relative;
vertical-align: middle;
padding-left: 5px;
}
.checkboxcontact input[type="checkbox"] {
opacity: 0;
}
.checkboxcontact label::before {
content: "";
display: inline-block;
position: absolute;
width: 17px;
height: 17px;
left: 0;
margin-left: -20px;
border: 1px solid #d44803;
border-radius: 3px;
background-color: #fff;
}
.checkboxcontact input[type="checkbox"]:checked + label::before,
.checkboxcontact input[type="checkbox"]:focus + label::before {
background-color: #d44803;
border: 1px solid white;
}
.checkboxcontact input[type="checkbox"]:checked + label::after {
content: '\f00c';
font-size: 14px;
position: absolute;
top: 2px;
left: -17px;
color: #fff;
font-family: "FontAwesome";
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<div class="checkboxcontact">
<input type="checkbox" id="check1"/>
<label for="check1">
Check me out
</label>
</div>
答案 2 :(得分:1)
同样的问题我也曾经面对过一次。我建议你使用check&amp; amp;根据您的设计取消选中。用户选中时,图像src应更改为选中的图像。你可以使用javascript函数。确保使用相同尺寸的图像。因此,用户无法感觉到这些是两个不同的图像。供您参考,我附上我使用过的图像。
这是我的代码。我找到的一些地方。看看它。已经在我的样式表&amp;在我的javascript中呈现这些。当用户点击选中的图片时,选择&#39;我要删除。因此,取消选中的图像将显示给用户。
function ClearSelection() {
$(".filterlist ul li").each(function () {
$(this).removeClass("selected");
});
}
&#13;
.filterlist ul li
{
padding:5px;
border-bottom:1px solid gray;
cursor:pointer;
background-image: url("../images/untick.png");
background-repeat:no-repeat;
background-position: 10 8;
}
.filterlist ul li.selected{background-image: url("../images/tick.png");}
&#13;