元素)。你确实可以利用 CSS 和 JavaScript 把几乎任何 HTML 元素“伪装成”表单控件,看起来像是一个按钮、输入框、下拉菜单等。开发者这么做通常是出于设计上的考虑——某些原生表单控件确实比较难自定义样式。
然而,这么做反而会增加你和用户的负担。事实上,浏览器已经默认为
例如:
语义化元素可以被屏幕阅读器等辅助技术识别,并将内容传递给视觉障碍的用户。
表单控件和按钮默认支持键盘访问。在先前的示例中,你可以尝试使用 Tab 和 Shift + Tab 切换表单元素(这种操作被称为“Tab 键导航”)。
你还会注意到,当你使用 Tab 在表单元素间进行切换时,当前聚焦的元素会被蓝色轮廓标记出来(称为焦点轮廓)。这对于使用键盘进行操作的用户来说非常重要,因为它帮助用户知道自己目前操作的是哪一项。
如果你使用错误的语义化元素来构建表单,你就得自己手动实现这些功能,否则这些表单元素就无法按照用户预期的方式工作,甚至会被认为是“坏掉了”。所有这些细节都会影响用户体验。
其他控件类型
有很多其他类型的控件可以用来在表单中收集数据。我们来看一个稍微复杂点的例子,然后对其逐步解析和说明。
备注:
在这个例子中,我们假设用户已经注册并处于登录状态,因此无需收集姓名和邮箱地址等信息。
html
第二个表单
呈现的效果如下:
我们建议你现在将这段代码复制到你的代码编辑器中保存为 HTML 文件,并在浏览器中打开。接下来的几个小节中,我们会逐一讲解这个表单中使用的各种控件类型。
在继续之前,请在你的本地副本中试用不同的表单控件并选择一些值。尝试提交表单,看看提交后在 URL 中显示的数据是什么样子的。
单选按钮
“选择酒店房型”按钮是通过 控件实现的。这些控件会渲染为一组按钮控件,每次只能选择其中一个——你不能同时选中多个。它们的名字来源于老式收音机上的按钮:按下一个按钮,之前选中的按钮就会弹出。
我们的示例代码如下:
html
radio 输入控件的工作方式大致和 text 输入控件相同,但也有几点不同:
每组单选按钮的 name 属性值必须相同,以便将它们关联成一组。如果 name 属性值不同,它们会被视为不同的组,提交时也会有发送不同的值。
每个单选按钮必须包含一个 value 属性,用于指定提交时该按钮对应的值。提交的数据会是一个名值对,其中名称(即 name)始终相同,例如 hotel=economy 或 hotel=superior。
每个单选按钮的
备注:
除了用于结构化和标记表单外,fieldset 还有其他用途,例如可用于一次性禁用整组控件。
还值得注意的是,我们为第一个单选按钮添加了 checked 属性——这会让它在页面初次加载时默认被选中。这意味着总会有一个选项被选中,并且你无法取消选中一个单选按钮,除非选择另一个。
试着将第一个单选按钮中的 checked 属性移除,保存,然后刷新页面,观察其效果。在继续学习之前记得把它加回来。
禁用表单控件
在单选按钮的示例中,你会注意到第三个单选按钮设置了 disabled 属性。这会导致该控件显示为灰色且无法被选中。这在很多情况下都非常有用,比如某个选项通常是可用的,但目前暂时不可用。例如,某个产品可能已经售罄,或者像我们示例中那样,顶层套房全部预订完毕!
你可以在任何表单控件上设置 disabled 属性,包括
试着给两个