【发布时间】:2019-04-25 22:07:30
【问题描述】:
我在尝试让项目跨浏览器运行时遇到了一个非常烦人的 CSS 问题(不关心 IE,这只是一个爱好项目,但如果让它在所有现代浏览器上运行就好了非常少)。它与一些我希望应用自定义样式的复选框有关——我知道你不能用标准的 HTML <input type="checkbox"> 做很多事情,所以我已经做了很多地方推荐的事情,并使用了 ::before 伪元素.我对 Chrome 中的结果很满意。想象一下,当我发现我的自定义复选框在 Firefox 中根本不显示根本时,我会感到惊讶!
我已经玩了几个小时,并且已经将它剥离到问题的根源 - 它与复选框本身有关,而不是与它交互的任何其他 CSS 有关。这是最简单的例子:
input[type="checkbox"] {
visibility: hidden;
}
input[type="checkbox"]::before {
visibility: visible;
content: "";
display: block;
width: 1.1em;
height: 1.1em;
color: #eddc23;
border: 1px solid #eddc23;
background-color: #540123;
border-radius: 35%;
line-height: 1.27;
text-align: center;
cursor: pointer;
}
input[type="checkbox"]:checked::before {
content: "\2713";
}
<input type="checkbox">
这应该显示一个深红色的复选框,选中时带有一个黄色的勾号。它可以在 Chrome 和 Opera 上完美运行,但在 Firefox 或 Edge 上则完全不行。 (这里有一个CodePen link,以防 Stack Overflow sn-p 以某种方式表现出不同的行为)。 CSS 不是我的强项之一,尽管经过几个小时的试验和谷歌搜索,我还是感到困惑。
不胜感激任何指示,不仅是关于如何让这个工作的跨浏览器,但关于 为什么它不能在 FF/Edge 上工作(检查 Firefox 上的元素没有显示::before 完全是伪元素。我还排除了它与空的 content 属性有关,因为将其更改为真实文本无法使其在相关浏览器中可见)。
【问题讨论】:
-
我从下面与@NishargShah 的讨论中得到了一些启发,这使我通过谷歌找到了this previous question。基本上,浏览器似乎可以使用
::before和::after为<input>等自关闭元素做他们喜欢的事情——这当然解释了不同的跨浏览器结果。如果有人可以提出建议,我仍然对不涉及非标签<label>的“好”解决方案感兴趣。
标签: html css checkbox cross-browser pseudo-element