【发布时间】:2021-10-06 02:22:23
【问题描述】:
我现在正试图了解一个困扰我一段时间的问题。
我想知道为什么复选框会被伪元素 :read-only 定位,即使没有 disabled 属性。
请参阅下面的 sn-p :
input:read-write + label {
background-color: green;
}
input:read-only + label {
background-color: red;
}
<!-- an active ( not disabled ) checkbox -->
<input type="checkbox" id="checkbox" />
<label for="checkbox">the checkbox</label>
<br />
<br />
<!-- a disabled text -->
<input type="text" disabled id="text"/>
<label for="text">the text</label>
<br />
<br />
<!-- an active ( not disabled ) text -->
<input type="text" id="text-active"/>
<label for="text-active">another text</label>
如您所见,复选框和第一个文本输入都以input:read-only 为目标,尽管只有第一个文本输入具有disabled 属性。
我做了一些研究,发现this article on the subject 说:
:read-only 是一个 CSS 伪类选择器,它匹配任何与 :read-write 选择器不匹配的元素。
当然,我随后对 :read-write 伪选择器进行了研究,最终找到了 mdn web docs page,其中指出:
:read-write CSS 伪类表示用户可编辑的元素(例如 input 或 textarea)。
我觉得,既然我可以切换复选框的值,它应该被认为是“用户可编辑”?
我在某些浏览器中进行了一些测试,Firefox (90.0) 和 Brave (v. 1.27.109 Chromium: 92.0.4515.115) 都出现了问题。
我还在旧版 chrome(版本 89.0.4389.90)中进行了测试,但行为并不相同。两个元素都不受:read-only 伪元素的影响,第二个文本字段受read-write 伪元素的影响,即使有disabled 属性也是如此。很奇怪。
也许我遗漏了一些明显的东西?
【问题讨论】:
-
@ishaba 感谢您的建议,但是,我不确定这个问题是否与我的情况相关,因为我正在使用复选框,但它们不是。
-
从那个角度来看,任何输入和复选框都没有区别
-
@ishaba 显然,该行为在输入文本上运行良好,而在复选框中无法正常运行。
-
哦,对不起,我的错。我现在明白你的意思了。