在Chrome中转换CSS但不转换Firefox

时间:2017-09-29 20:21:07

标签: css firefox input sass chromium

我有一个用CSS编写的复选框切换 - 我使用伪元素 ::after::before ::来绘制simple toggle到{{3 (我也使用 bootstrap 的基本样式)。

css如下:

input.toggler{
    visibility: hidden;
    position: relative;
    height: 35px;
    width: 50px;
    margin: 0;
    cursor: pointer;
}
input.toggler::before, input.toggler::after {
    visibility: visible;
}
input.toggler::before {
    background-color: #fff;
    box-shadow: inset 0 0 2px gray;
    width: 34px;
    border-radius: 15px;
    height: 14px;
    content: ' ';
    display: inline-block;
    transition: background 0.6s;
    transform: translateY(-60%);
    position: absolute;
    top: 53%;
}
input.toggler::after {
  width: 20px;
  height: 20px;
  content: ' ';
  display: block;
  transform: translateY(-50%);
  position: absolute;
  top: 50%;
  background-color: #2cace3;
  border-radius: 100%;
  box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.24), 0 0 1px 0 rgba(0, 0, 0, 0.12);
  transition: margin 0.4s, width 0.3s;

}
input.toggler:checked::before {
    background-color: #2cace3;
    opacity: .5;
}
input.toggler:checked::after {
  margin-left: 15px;
}

Chrome如何以不同于Firefox的方式处理CSS?

或者,是什么让这段代码与 Firefox 不兼容,而不是 Chrome

MDN文档enter image description here 建议::after是有效的Firefox语法,但正如此https://developer.mozilla.org/en-US/docs/Web/CSS/::after所示,这仅适用于Chrome。

1 个答案:

答案 0 :(得分:2)

你可以注意到并且输入是这样写的

<input  />

它不是一个打开/关闭标记,因此它不能包含其他标记和元素,因此您不能使用:: before :: after元素。使用Chrome,您可以将其更改为开启/关闭标记,如下所示:

enter image description here

但是firefox没有

enter image description here

为防止这种情况,您可以将输入放在标签中,并将CSS添加到此标签中,以确保:: before :: after元素可以正常工作