和 。这篇文章提到了:
3.1 文本输入框
文本输入框是最基本的表单小部件。
备注:HTML 表单文本字段是简单的纯文本输入控件。这意味着您不能将它们用作富文本编辑(粗体、斜体等)。你遇到的所有富文本编辑器都是使用 HTML、CSS 和 JavaScript 所创建的自定义小部件。
文本框都有一些通用规范:
它们可以被标记为 readonly (用户不能修改输入值)甚至是 disabled (输入值永远不会与表单数据的其余部分一起发送)。
它们可以有一个 placeholder;这是文本输入框中出现的文本 ,用来简略描述输入框的目的 。
它们可以 使用 size (en-US)(框的物理尺寸)和 maxlength (en-US)(可以输入的最大字符数) 进行限制。
如果浏览器支持的话,它们可以从拼写检查 (使用 spellcheck 属性)中获益。
备注: 元素是如此特别因为它可以通过简单设置 type 属性,来接收多种类型的数据。它被用于创建大多数类型的表单小部件,包括单行文本字段、没有文本输入的控件、时间和日期控件和按钮。
单行文本框 使用 type 属性值 被设置为 text 的 元素 创建一个单行文本框.type默认设置为 text.在浏览器中是未知的情况下(比如你指定 type="date",但是浏览器不支持原生日期选择器),属性值也将会回落到 text。
Single line text field examples
单行文本框只有一个真正的约束:如果您输入带有换行符的文本,浏览器会在发送数据之前删除这些换行符 。
密码框 通过设置 type 属性值为 password 来设置该类型框:
请记住,这只是一个用户界面特性;除非你安全地提交你的表单,否则它会以明文发送,这不利于安全——恶意的一方可能会截获你的数据,窃取你的密码、信用卡信息,或者你提交的其他任何东西。保护用户不受此影响的最佳方式是在安全连接上托管任何涉及表单的页面 (例如:https://……地址),使得数据在发送之前就已加密。
隐藏内容 另一个原生的文本框控件是 hidden input 类型 。创建对用户不可见的表单部件,但在发送表单时,会与其他的表单数据一起被发送到服务器. 例如,你可能希望向服务器提交一个时间戳,说明订单是何时产生的。因为它是隐藏的,所以用户看不到也不能简单地修改该值,它将永远不会获得焦点,屏幕阅读器也不会注意到它。
如果您创建了这样一个元素,就需要设置它的 name 和 value 属性。 元素的值可以通过 JavaScript 动态设置。hidden input 类型不应有关联的标签 (label 元素)。
3.2 可选中项:复选框和单选按钮
两者都使用 checked 属性,以指示该部件的默认状态:“选中”或“未选中”。对于大多数表单部件 ,一旦表单提交,所有具有 name 属性的小部件都会被发送,即使没有任何值被填。
对于可选中项 ,只有在勾选时才发送它们的值。如果他们没有被勾选,就不会发送任何东西,甚至连他们的名字也没有。。而在它们被勾选且没有提供值(value)时 ,将会发送名字和缺省值 on。
复选框 使用 type 属性值为 checkbox 的 元素来创建一个复选框。
相关的复选框元素 应该使用具有相同值的 name 属性 。包含 checked 属性 使复选框在页面加载时自动被选中 。
备注:任何带有 checked 属性的复选框和单选按钮在加载时都会匹配 :default 伪类,即使它们后面不再被选中。任何当前被选中的元素,都会匹配 :checked 伪类。
复选框-切换按钮 示例:
Toggle switch example
单选按钮 使用 type 属性值为 radio 的 元素来创建一个单选按钮。 如果它们的 name 属性共享相同的值 ,那么它们将被认为属于同一组的按钮。同一组中只有一个按钮可以同时被选 ;这意味着当其中一个被选中时,所有其他的都将自动未选中。如果没有选中任何一个 ,那么整个单选按钮池就被认为处于未知状态,并且没有以表单的形式发送任何值。
3.3 按钮
在 HTML 表单中,有三种按钮:
Submit 将表单数据发送到服务器。对于 button 元素,省略 type 属性(或是一个无效的 type 值)的结果就是一个提交按钮 。
Reset 将所有表单小部件重新设置为它们的默认值。
Anonymous 没有自动生效的按钮,但是可以使用 JavaScript 代码进行定制。
也可以使用 元素。它也带有 submit、reset 和 button 这几个 type 属性,与 的三种按钮行为一致。它们之间的主要区别在于 元素更易于设置样式。
备注:image input 类型同样被渲染为一个按钮。我们将在后面提到。
这是一段 HTML 代码,它定义了一个包含多种类型按钮的表单。你可以看到每一种与 对应类型等价的 类型的示例。
不管您使用的是 元素还是 元素,按钮的行为都是一样的。 然而,有一些显著的不同之处:
从技术上讲,使用元素或 元素定义的按钮几乎没有区别。区别是按钮本身的标签。在 元素中,标签只能是字符数据,而在**元素中,标签可以是 HTML,因此可以相应地进行样式化**。
图像按钮 图像按钮(image button)控件渲染的方式与 几乎完全相同。只是在用户点击它时,图像按钮的行为与提交(submit)按钮相同. 图像按钮是使用 type 属性值设置为 image 的 元素 创建的。 这个元素支持与 元素相同的属性 ,和其他表单按钮支持的所有属性。
如果使用图像按钮来提交表单 ,这个小部件不会提交它的值;而是提交在图像上单击处的 X 和 Y 坐标 . 坐标被发送为两个键/值对:
例如,当您点击这个小部件图像坐标为 (123,456) 的位置时,它将会通过 get 方法提交。你可以看到类似的 URL: http://foo.com?pos.x=123&pos.y=456 这是构建“热图”的一种非常方便的方式。
3.4 文件选择器
HTML 表单能够将文件发送到服务器 ;文件选择器小部件是用户如何选择一个或多个文件来发送的。 要创建一个文件选择器小部件,您可以使用 元素,将它的 type 属性设置为 file 。被接受的文件类型 可以使用 accept 属性 来约束。如果您想让用户选择多个文件 ,那么可以通过添加 multiple 属性 来实现。
示例 创建一个文件选择器,请求图形图像文件。允许用户选择多个文件。
在一些移动终端上 ,文件选择器可以访问由设备相机和麦克风直接获取的图片、视频、音频。我们只需要这样设置 accept 属性即可(分别对应相机捕获的图片、视频和麦克风获取的音频):
3.5 通用属性
所有表单元素中都有一组通用属性:
属性名称
默认值
描述
autofocus (en-US)
false
这个布尔属性允许您指定当页面加载时元素应该自动具有输入焦点 ,除非用户覆盖它,例如通过键入不同的控件。文档中只有一个与表单相关的元素可以指定这个属性。
disabled
false
这个布尔属性表示用户不能与元素交互 。如果没有指定这个属性,元素将从包含它的元素继承设置,例如 ;如果没有包含在设定了 disabled 属性的元素里,那么这个元素就是可用的。
form
小部件与之相关联的表单元素 。属性值必需是同个文档中的
name
元素的名称 ;这是跟表单数据一起提交的。
value
元素的初始值 。
4. HTML5 的输入(input)类型
具体看一看较新的表单控件,包含一些新添加至 HTML 5 的 input 类型 ,以允许收集更多特定类型的数据。
HTML 表单元素参考,特别是深入的 类型 参考。
4.1 E-mail 地址字段
将 type 属性设置为 email 就可以使用这种控件:
任何其他输入都会使得浏览器在表单提交时显示错误信息。
也可以搭配使用 multiple (en-US) 属性 ,以允许在同一个 email 输入框中输入多个电子邮件地址 ,以英文逗号分隔:
备注:你可以在基本 input 例子 中找到基本文本 input 类型的例子(也请看看源代码)。
Basic input types
客户端验证 email 与其他较新的 input 类型一样,提供了内置的客户端错误验证 ,在数据被发送到服务器之前由浏览器执行。
你的应用程序始终应该在服务器端和客户端对任何表单提交的数据进行安全检查 ,因为客户端验证太容易被关闭了,所以恶意用户仍然可以很容易地将坏数据发送到你的服务器 。
注意,在默认限制条件下,a@b 也是一个合法的电子邮件地址 ,因为 email input 类型 默认也允许内部网络的电子邮件地址 。
备注:如果输入的数据不是一个电子邮件地址,会匹配 :invalid 伪类,且 validityState.typeMismatch (en-US) 属性总会返回 true。
4.2 查询字段
查询字段(Search fields)旨在用于在页面和应用程序上 创建搜索框 。将** type 属性设置为 search** .
text 字段和 search 字段 的主要区别 是浏览器赋予它们的外观显示 。 通常情况下,search 字段拥有圆角边框,有时会显示“?”标志,当点击它时会清除输入框。另外,在动态键盘设备上,键盘的回车键会显示“search”,或显示为放大镜图标。 search 字段的值可以自动地保存下来,在同一网站的自动完成框中复用输入.
4.3 电话号码字段
在 type 属性中使用 tel 值 ,即可创建一个专门用于输入电话号码的文本域:
当使用带有动态键盘的移动设备 访问带有 type="tel" 的表单时,大多数设备会显示数字键盘 。这意味着只要数字键盘有用,这种类型就很有用,而且不只是用于电话号码。
4.4 URL 字段
在 type 属性值中使用 url ,即可创建一个用于输入网址的文本字段:
浏览器会在没有协议(例如 http:)输入或网址格式不对的情况下报告错误。 在具有动态键盘的设备上,键盘通常会显示部分或全部冒号、句号和正斜杠作为默认键。
4.5 数字字段
用于输入数字的控件可以由 type 为 number 的 元素创建。这个控件外观与文本域类似,但只允许浮点数输入,并通常以旋转器(spinner)的形式提供按钮来增加和减少控件的值。在有动态键盘的设备上,一般会显示数字键盘。 使用 number input 类型,你可以使用 min 和 max 属性控制允许输入的最小值和最大值 。 使用 step 属性来设定每次按下 spinner 按钮增加或减少的值 。 默认情况下,number input 类型只允许整数值输入,为了允许浮点数输入 ,要指定 step="any" (en-US) 。
创建 可从 1 到 10 之间选择值的数字选择器,且单击一次按钮所增长或减少的值为 2
创建可从 0 到 1 之间选择值得数字选择器,且单击一次按钮所增长或减少的值为 0.01。
当有效值的范围有限时 ,number 输入类型才有意义,例如一个人的年龄或身高。如果范围太大,渐进式增加没有意义 (如范围为 00001 到 99999 的美国 ZIP 码)的话,使用 tel 类型可能会更好;它提供了数字键盘,而放弃了数字输入器的 spinner UI 功能。
4.6 滑块控件
另外一种选择数字的方式是使用滑块(slider) 。 从使用上来说,滑块的准确性 不如文本字段。它们被用来挑选精确值不一定那么重要的数字。 在 \input> 元素中使用 range 作为属性 type 的值 ,就可以创建一个滑块. 推荐分别配置 min (en-US)、max (en-US) 和 step (en-US) 属性 来设置滑块的最小值、最大值和增量值。
创建一个其取值为 50000 到 500000 之间的滑块,每次的增量值是 100。我们使用 value 属性设定了此滑块的默认值为 250000。
Choose a maximum house price:
使用滑块的一个问题是,它们不提供任何种类的视觉反馈来说明当前的值是什么。这是我们附加了一个包含当前值输出的 元素的原因。
要真正显示当前值,并在其变化时更新,你必须使用 JavaScript:
//我们将 range 输入元素和 output 元素存为了两个变量
const price = document.querySelector("#price");
const output = document.querySelector(".price-output");
//将 output 的 textContent 属性设置为 input 的 value
output.textContent = price.value;
//设置了一个事件监听器,确保每次范围滑块移动时,output 的 textContent 总是可以及时更新为新值。
price.addEventListener("input", () => {
output.textContent = price.value;
});
4.7 日期和时间选择器
日期和时间控件可由 元素和一个合适的 type 属性值来创建,该值取决于要收集的类型(日期、时间、还是以上全部)。 这里有一个示例,在浏览器不支持的情况下会自动回退为 元素:
datetime-local 创建了显示和选择一个没有特定时区信息的日期和时间的控件 。
month 创建了显示和选择带有年份信息的某个月的控件 。
time 创建了显示和选择时间的控件 。时间可能会以 12 小时制显示,但一定会以 24 小时制形式返回。
week 创建了显示和选择一年中特定编号周 的控件。 一周以周一开始,一直运行到周日结束。另外,每年的第一周总会包含那一年首个星期四,其中可能不包括当年的第一天,也可能包括前一年的最后几天。
限制日期/时间值 所有的日期和时间控件总可以由 min (en-US) 和 max (en-US) 属性控制,可由 step (en-US) 属性进一步做控制,具体值随着 input 类型的不同而产生变化。
When are you available this summer?
4.8 颜色选择器控件
颜色总是有点难处理。有许多方法来表达它们,如 RGB 值(十进制或十六进制)、HSL 值、关键词等。
用于输入颜色的控件可以由 type 为 color 的 元素创建 :
返回值总是颜色的小写的 6 位十六进制数表示。
5. 其他表单控件
非 表单控件的功能,从下拉列表菜单(drop-down list)、多行文本域(multi-line text field) 到其他有用的表单功能,如我们在前一篇文章看到的 元素和进度条(progress bar) 元素。
5.1 多行文本域
多行文本域使用 指定,而不是使用 元素。
注意,即使可以将任何东西放入到
控制多行渲染
cols : 指定文本控件的可见宽度(列),单位为字符的(起始)宽度,可以通过调整
rows : 指定文本控件的可见行数。这实际上是起始高度,默认值是 2。
wrap : 指定如何控制文本换行。 soft(默认值) ,意味着提交的文字没有换行,而浏览器中渲染的文字有换行; hard (使用此属性必须指定 cols 的值),意味着提交的文字和浏览器中渲染的文字都有换行;和 off ,停止任何换行行为。
控制文本域可缩放性
5.2 下拉控件
让用户从许多不同选项中进行选择的控件,不占用用户界面太多空间。 HTML 有两种下拉内容:一种是选择框 、另外一种是自动补全框 。这两种情况下的交互是相同的——一旦被激活,浏览器就会显示可供用户选择的值的列表。
选择框 一个简单的选择框是由 元素及一个或多个 子元素构成的,每个子元素指定了选择框的可能取值。基础示例
Banana
Cherry
Lemon
如果需要的话,选择框的默认值 可以由要指定默认值的 元素中的 selected 属性设置,这样在页面加载后,该选项可以预先选中。
使用 optgroup 元素可以嵌套在 元素中,以在视觉上关联一组取值:(见以上示例)
在 元素中,label 属性的值在嵌套选项之前显示。浏览器往往在视觉上将它们与选项分开(如,将其粗体并显示于不同的嵌套级别),以避免它们与实际选项混淆。
使用 value 属性 如果一个 元素明确设置了 value 属性,当表单提交时也会提交那个选项对应的值 。如果像上面的例子那样省略了 value 属性, 元素的内容会作为提交的值。所以 value 属性并不是必需的,然而你可能需要向服务器中发送与视觉所见相比缩短或者改变过的值。 例如:
Big, beautiful yellow banana
Succulent, juicy cherry
Sharp, powerful lemon
默认情况下,选择框的高度足以显示单个值。可选的 size (en-US) 属性控制在选择框不处于聚焦状态时,可见选项的数量。
多选选择框 通过向 元素添加 multiple 属性 ,你可以允许用户使用操作系统提供的机制选择多个值 (如按下 Cmd/Ctrl 并先后单击多个值)。
Banana
Cherry
Lemon
Carrot
Eggplant
Potato
备注:在多选选择框 的情况下,你会注意到选择框不再以下拉内容的形式显示数值 ——相反,所有的值都会一次性显示在一个列表中,可选的 size (en-US) 属性决定了控件的高度 。
备注:任何支持 元素的浏览器也支持 multiple 属性。
自动补全框 可以通过 元素 中的一些显示的 子元素 为表单项提供推荐的自动补全值。 元素需要指定一个 id。
元素 会使用 list 属性 绑定至一个数据列表 (如 text 或 email 输入类型),该属性的取值就是要绑定的数据列表的 id 值 。
一旦数据列表与表单控件相关联,它的选项就会被用来自动补全用户输入的文本;通常,它以下拉框的形式呈现给用户,列出他们输入内容的可能匹配。基础示例
What's your favorite fruit?
Apple
Banana
Blackberry
Blueberry
Lemon
Lychee
Peach
Pear
Datalist 支持和回退 需要给诸如 IE 10 及以前的旧版浏览器提供支持
What is your favorite fruit? (With fallback)
or pick a fruit
Apple
Banana
Blackberry
Blueberry
Lemon
Lychee
Peach
Pear
支持 元素的浏览器会忽略任何非 元素,而 datalist 仍然会按期工作。不支持 元素的旧浏览器会显示标签和选择框。不太明显的 datalist 用法 根据 HTML 规范,list 属性和 元素 可以与任何需要用户输入的组件配合使用。这可能会导致一些不太显然的用法。 例如,在支持在 上使用 range 输入 类型的浏览器中,在每个 datalist 的 值上会显示一个小勾。你可以在 参考页面上看到一种实现。
支持 和 的浏览器上应该显示一个自定义颜色调色板作为默认值,同时仍然提供完整的颜色调色板。
5.3 其他表单功能
这是一段HTML代码,它创建了一个表单,其中包含文件上传、隐藏域、图像输入、进度条和仪表元素。
计量器和进度条 进度条
75/100
这可以实现任何需要进度报告的事情,例如下载文件的百分比,或问卷调查中填写过问题的数量。 元素中的内容 是供不支持此元素浏览器进行回退 ,以及给屏幕阅读器 提供发音材料的机制。
计量器 计量器代表了一个由 max 和 min 限定范围内的固定值。这个值在视觉上呈现为一个条形.
所有实现了 元素的浏览器使用这些值来改变计量器的颜色:
如果当前值位于首选范围 ,则计量器显示为绿色 。
如果当前值位于平均范围 ,则计量器显示为黄色 。
如果当前值位于最差范围 ,则计量器显示为红色
元素中的内容是供不支持此元素浏览器进行回退,以及给屏幕阅读器提供发音材料的机制。
6. 样式化 HTML 表单
6.1 为什么使用 CSS 美化表单组件这么困难?
有些元素在跨平台上时很少出现问题。包括以下结构元素: