问题:对表单元素进行分组
我有一个 HTML 表单,其中很少有一个控件由多个输入组成。一个例子是一组单选按钮。
我想将这些输入和它的标签明确分组,以便屏幕阅读器(除了通过将它们对齐在单行上的视觉表示之外)能够理解和宣布这种关系。
例如,假设我有一个这样的控件:
<div class="control">
<div class="control-label">Type</div>
<div class="control-inputs">
<input type="radio"
name="type"
value="a"
id="type-a" />
<label for="type-a">A</label>
<input type="radio"
name="type"
value="b"
id="type-b" />
<label for="type-b">B</label>
</div>
</div>
标准解决方案问题:字段集样式问题
fieldset
元素和它的子元素legend
似乎正是为此而制作的(在下面的示例中使用)。
fieldset
问题是legend
元素不能像普通元素一样设置样式(关于它的一些讨论),现在除了在 Firefox 中之外,不可能使用我的布局需要的 Flexbox 将它们对齐在一行上。
<fieldset class="control">
<legend class="control-label">Type</legend>
<div class="form-inputs">
<input type="radio"
name="type"
value="a"
id="type-a" />
<label for="type-a">A</label>
<input type="radio"
name="type"
value="b"
id="type-b" />
<label for="type-b">B</label>
</div>
</fieldset>
问:还有其他方法吗?
fieldset
这让我想知道除了使用元素之外,是否有一些可访问的方法来对多个表单控件进行分组?
可能的解决方案:role="group"
?
有一个“组”角色(在下面的示例中使用),它可以添加到一个简单的div
并且看起来它可以完成这项工作,但没有明确说明它与使用字段集的功能等效。如果确实如此,那么我如何标记该组的一个元素以用作 的等价物legend
?
<div role="group"
class="control">
<div class="control-label">Type</div>
<div class="control-inputs">
<input type="radio"
name="type"
value="a"
id="type-a" />
<label for="type-a">A</label>
<input type="radio"
name="type"
value="b"
id="type-b" />
<label for="type-b">B</label>
</div>
</div>