复选框样式在Safari移动设备上不起作用

时间:2017-11-21 10:10:52

标签: html css css3 checkbox safari

我想像下面那样设置复选框的样式:

enter image description here

这是我的 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手机上显示完美。

enter image description here

但问题出在iPhone上的Safari上。它显示如下:

enter image description here

我该如何解决这个问题?是否有后备或什么?

3 个答案:

答案 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函数。确保使用相同尺寸的图像。因此,用户无法感觉到这些是两个不同的图像。供您参考,我附上我使用过的图像。

Check image

Uncheck image

这是我的代码。我找到的一些地方。看看它。已经在我的样式表&amp;在我的javascript中呈现这些。当用户点击选中的图片时,选择&#39;我要删除。因此,取消选中的图像将显示给用户。

&#13;
&#13;
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;
&#13;
&#13;