【发布时间】:2016-10-20 10:22:32
【问题描述】:
我正在编写一个 HTML 表单,其中某些字段的必要性取决于其他字段的值,因此会动态变化。我想通过在每个必填字段之前的标签上附加一个星号来呈现这种必要性的视觉提示。由于它是纯视觉的,并且情况的语义由适当标记中的required 属性很好地表达,我希望将星号作为 CSS 定义中的内容添加,而不是直接或通过脚本将其插入 HTML .
然而,将视觉内容添加到元素在必填字段之前是具有挑战性的,因为 CSS 选择器组合器似乎是向前的(朝向孩子和跟随的兄弟姐妹)而不是向后的(朝向父母或之前的兄弟姐妹) .
我当然可以从更改输入字段的必要性的相同代码中切换标签中的类名,但这会将内容添加与必要性更改分离为两个不同的指令,我必须记住现在和一年后一起打电话,所以这是我想避免的限制;我更愿意切换输入字段的必要性,并让 CSS 对更改做出反应,而无需我进一步参与。
所以我采取了颠倒每个标签及其输入字段的顺序,然后将两者包装在 display:flex; flex-direction:column-reverse 元素中,使标签文本呈现在其相应字段之前,尽管在它之后声明。这样,我可以使用下一个兄弟组合器为每个必填字段的标签文本添加一个星号:
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 中)。他们会在期待用户输入之前读出文本吗?
谢谢,我总是需要坐下来,安装屏幕阅读器并自己找出这些东西,但我似乎从来没有时间这样做:-(
【问题讨论】:
标签: html css flexbox screen-readers