我正在编写一个HTML表单,在表单中,某些字段的必须性取决于其他字段的值并因此动态更改。我想通过在每个必填字段的前面追加一个星号来呈现必填性的视觉提示。由于这是纯粹的视觉效果,并且情况的语义已经在适当的标记中用required属性表达得很好,所以我希望将星号作为内容从CSS定义中添加,而不是直接通过HTML或脚本插入它。
然而,向前(向子代和下一个兄弟)添加元素的可组合选择器很容易,但向后(向父级或前一个兄弟)则很难。
当然,我可以在与更改输入字段的必填性相同的代码中切换标签中的类名,但这会将内容添加与必填性更改分开成两个不同的指令,我必须记得同时调用它们,现在和一年后,因此我希望避免这种约束;我更喜欢切换输入字段的必填性并让CSS对该更改做出反应,而无需我的进一步参与。
因此,我采用了颠倒每个标签及其输入字段的顺序,然后将两者都包装在display:flex; flex-direction:column-reverse元素中,使标签文本在声明在输入字段之后的情况下仍然能够在相应字段之前呈现。这样,我就可以使用next-sibling组合器向每个必填字段的标签文本添加星号。
然而,向前(向子代和下一个兄弟)添加元素的可组合选择器很容易,但向后(向父级或前一个兄弟)则很难。
当然,我可以在与更改输入字段的必填性相同的代码中切换标签中的类名,但这会将内容添加与必填性更改分开成两个不同的指令,我必须记得同时调用它们,现在和一年后,因此我希望避免这种约束;我更喜欢切换输入字段的必填性并让CSS对该更改做出反应,而无需我的进一步参与。
因此,我采用了颠倒每个标签及其输入字段的顺序,然后将两者都包装在display:flex; flex-direction:column-reverse元素中,使标签文本在声明在输入字段之后的情况下仍然能够在相应字段之前呈现。这样,我就可以使用next-sibling组合器向每个必填字段的标签文本添加星号。
label {
display:inline-flex;
flex-direction:column-reverse;
}
label>input[required]+span:after
{
content:"*";
color:#a21;
}
<label>
<input type="text" required>
<span>Field 1</span>
</label>
<label>
<input type="text">
<span>Field 2</span>
</label>
然而,我的问题是屏幕阅读器如何解释这种双重反转(一次在HTML中,一次在CSS中)。它们会在期望用户输入之前读出文本吗?
谢谢,我总是需要坐下来,安装一个屏幕阅读器,并通过自己找出这些东西,但我似乎从来没有时间去做 :-(