输入 [type=checkbox] 上是不是允许使用 :before 伪元素?

Posted

技术标签:

【中文标题】输入 [type=checkbox] 上是不是允许使用 :before 伪元素?【英文标题】:Is the :before pseudo-element allowed on an input[type=checkbox]?输入 [type=checkbox] 上是否允许使用 :before 伪元素? 【发布时间】:2012-10-01 15:34:30 【问题描述】:

This *** answer 描述了如何在不需要<label> 的情况下使用 CSS3 设置复选框的样式:

input[type=checkbox]:before 
    content:""; display:inline-block; width:12px; height:12px; background:red;
 

Fiddle

这适用于 Chrome 22,但不适用于 Firefox 15 或 IE 9。

鉴于后两种浏览器缺乏支持,Chrome 的行为是否符合 CSS3 规范?

【问题讨论】:

【参考方案1】:

我认为 Chrome 的行为是无效的。如果你take a look here,它表示::before::after 伪元素在目标元素的content 之前或之后添加新的content。输入元素没有content;他们只有一个value。例如,您不能使用<input>Pasta</input>

如果这一切都是真的,那么看起来Chrome的行为是无效的,而IE和Firefox是正确的。

【讨论】:

避免链接到已经成为建议的规范工作草案,除非您特别引用草案:w3.org/TR/CSS21/generate.html @BoltClock 好电话。对此感到抱歉。【参考方案2】:

这是一片未知的土地;规范并没有把事情弄清楚。 CSS 2.1 spec says:

“注意。该规范没有完全定义 :before 和 :after 与替换元素的交互(例如 HTML 中的 IMG)。这将在未来的规范中更详细地定义。”而且,有争议的是,INPUT 可以被视为replaced element in CSS 2.1 sense。

人们可能会认为这些伪元素不能用于不能有任何内容(即带有 EMPTY 声明的内容)的元素,例如 IMG 或 INPUT。但是,措辞中提到了 IMG,而Appendix D 与选择器 br:before 有一个规则。

CSS3 选择器是 CSS3 中为数不多的已达到推荐状态的部分之一,没有解决问题。 It says:

::before::after 伪元素可用于描述在元素内容之前或之后生成的内容。它们在 CSS 2.1 [CSS21] 中进行了解释。”

【讨论】:

伪元素定义已移至其他模块,让选择器仅定义语法并简要总结 CSS1 和 CSS2 伪元素。希望他们会在相关模块中为::before::after 澄清这一点(可能是传说中的生成/替换内容级别 3 模块的重写)。【参考方案3】:

是的,你绝对可以使用那个伪类 例如:让我们给出位置

"input[type="checkbox"]" 是相对的和位置

"input[type="checkbox"]:before" 绝对的。

试试这个,它可以在 chrome 中运行,但在 Firefox 中不行。

【讨论】:

【参考方案4】:

是的,可以跨浏览器!

[type=checkbox] 
  appearance: none;
  -webkit-appearance: none; /* Safari */


[type=checkbox]::before 
  content: 'a text before';

【讨论】:

以上是关于输入 [type=checkbox] 上是不是允许使用 :before 伪元素?的主要内容,如果未能解决你的问题,请参考以下文章

是否有“或”属性选择器,如输入[type = button | text]?

如何判断 DOJO Checkbox 是不是被选中?

处理input[type=checkbox]当中遇到的细节问题

input框中的value值到底是什么

layui的checkbox示例

HTML 表单制作