From 9926fca50ab49e8f19acf5eb3a3e5fcee34ea607 Mon Sep 17 00:00:00 2001 From: Jason Ren <40999116+jasonren0403@users.noreply.github.com> Date: Sat, 24 Aug 2024 09:23:43 +0800 Subject: [PATCH] [zh-cn] update 'how to structure a web form' (#23200) Co-authored-by: A1lo --- .../how_to_structure_a_web_form/index.md | 318 ++++++++++++------ 1 file changed, 208 insertions(+), 110 deletions(-) diff --git a/files/zh-cn/learn/forms/how_to_structure_a_web_form/index.md b/files/zh-cn/learn/forms/how_to_structure_a_web_form/index.md index 63637e6ae03df7..e68af116a104af 100644 --- a/files/zh-cn/learn/forms/how_to_structure_a_web_form/index.md +++ b/files/zh-cn/learn/forms/how_to_structure_a_web_form/index.md @@ -1,52 +1,52 @@ --- -title: 如何构造 HTML 表单 +title: 如何构建 HTML 表单 slug: Learn/Forms/How_to_structure_a_web_form +l10n: + sourceCommit: b76266228bd0900aa1256902c7858971156a58c9 --- -{{LearnSidebar}}{{PreviousMenuNext("Learn/HTML/Forms/Your_first_HTML_form", "Learn/HTML/Forms/The_native_form_widgets", "Learn/HTML/Forms")}} +{{LearnSidebar}}{{PreviousMenuNext("Learn/Forms/Your_first_form", "Learn/Forms/Basic_native_form_controls", "Learn/Forms")}} -有了基础知识,我们现在更详细地了解了用于为表单的不同部分提供结构和意义的元素。 +在介绍了基本知识后,我们现在来详细了解用于为表单的不同部分提供结构和意义的元素。 - +
前提: - 基本的计算机能力,和基本的 - 对 HTML 的理解对 HTML 的基本理解。
目标: - 要理解如何构造 HTML 表单并赋予它们语义,以便它们是可用的和可访问的。 + 了解如何构建 HTML 表单并赋予其语义,使其可用且具有无障碍性。
-HTML 表单的灵活性使它们成为 HTML 中最复杂的结构之一;你可以使用专用的表单元素和属性构建任何类型的基本表单。在构建 HTML 表单时使用正确的结构将有助于确保表单可用性和无障碍。 +表单的灵活性使它们成为 [HTML](/zh-CN/docs/Learn/HTML) 中最复杂的结构之一。你可以使用专用的表单元素和属性构建任何类型的基本表单。在构建 HTML 表单时使用正确的结构将有助于确保表单可用性和[无障碍性](/zh-CN/docs/Learn/Accessibility)。 ## \
元素 -{{HTMLElement("form")}} 元素按照一定的格式定义了表单和确定表单行为的属性。当你想要创建一个 HTML 表单时,都必须从这个元素开始,然后把所有内容都放在里面。许多辅助技术或浏览器插件可以发现{{HTMLElement("form")}}元素并实现特殊的钩子,使它们更易于使用。 +{{HTMLElement("form")}} 元素按照一定的格式定义了表单和确定表单行为的属性。每次创建 HTML 表单时,都必须使用该元素,并将所有内容嵌套在表单中。许多辅助技术和浏览器插件都能发现 {{HTMLElement("form")}} 元素,并实施特殊钩子使其更易于使用。 我们早在之前的文章中就遇见过它了。 -> [!NOTE] -> 严格禁止在一个表单内嵌套另一个表单。嵌套会使表单的行为不可预知,而这取决于正在使用的浏览器。 +> [!WARNING] +> 严禁在一个表单内嵌套另一个表单。嵌套会导致表单出现不可预测的行为。 -请注意,在{{HTMLElement("form")}}元素之外使用表单小部件是可以的,但是如果你这样做了,那么表单小部件与任何表单都没有任何关系。这样的小部件可以在表单之外使用,但是你应该对于这些小部件有特别的计划,因为它们自己什么也不做。你将不得不使用 JavaScript 定制他们的行为。 +在 {{HTMLElement("form")}} 元素之外也可以使用表单控件,但是如果你这样做了,那么除非使用 [`form`](/zh-CN/docs/Web/HTML/Element/input#form) 属性将其与表单关联,否则该控件与任何表单都没有任何关系。引入该特性是为了显式地将控件与表单绑定,即使控件没有嵌套在表单中。 -> [!NOTE] -> HTML5 在 HTML 表单元素中引入`form`属性。它让你显式地将元素与表单绑定在一起,即使元素不在{{ HTMLElement("form") }}中。不幸的是,就目前而言,跨浏览器对这个特性的实现还不足以使用。 +下面我们来介绍一下嵌套在表单中的结构元素。 ## \
和 \ 元素 -{{HTMLElement("fieldset")}}元素是一种方便的用于创建具有相同目的的小部件组的方式,出于样式和语义目的。你可以在`
`开口标签后加上一个 {{HTMLElement("legend")}}元素来给{{HTMLElement("fieldset")}} 标上标签。 {{HTMLElement("legend")}}的文本内容正式地描述了{{HTMLElement("fieldset")}}里所含有部件的用途。 +{{HTMLElement("fieldset")}} 元素是一种方便的用于创建具有相同目的(出于样式和语义目的)的微件组的方式。你可以在 {{HTMLElement("fieldset")}} 起始标签后加上一个 {{HTMLElement("legend")}} 元素,来给 {{HTMLElement("fieldset")}} 做标签。{{HTMLElement("legend")}} 的文本内容形式地描述了 {{HTMLElement("fieldset")}} 里所含有微件的用途。 -许多辅助技术将使用{{HTMLElement("legend")}} 元素,就好像它是相应的 {{HTMLElement("fieldset")}} 元素里每个部件的标签的一部分。例如,在说出每个小部件的标签之前,像[Jaws](http://www.freedomscientific.com/products/fs/jaws-product-page.asp)或[NVDA](http://www.nvda-project.org/)这样的屏幕阅读器会朗读出 legend 的内容。 +许多辅助技术在使用 {{HTMLElement("legend")}} 元素时,会将其视为相应 {{HTMLElement("fieldset")}} 元素中每个控件标签的一部分。例如,[Jaws](https://www.freedomscientific.com/products/software/jaws/) 和 [NVDA](https://www.nvaccess.org/) 等屏幕阅读器会在说出每个控件的标签之前先说出图例的内容。 这里有一个小例子: @@ -71,27 +71,25 @@ HTML 表单的灵活性使它们成为 HTML 中最复杂的结构之一;你可 ``` > [!NOTE] -> 你可以在 [fieldset-legend.html](https://github.com/mdn/learning-area/blob/main/html/forms/html-form-structure/fieldset-legend.html) (你也可以看[预览版](https://mdn.github.io/learning-area/html/forms/html-form-structure/fieldset-legend.html)) 看到该例。 +> 你可以在 [fieldset-legend.html](https://github.com/mdn/learning-area/blob/main/html/forms/html-form-structure/fieldset-legend.html)([也可以查看在线示例](https://mdn.github.io/learning-area/html/forms/html-form-structure/fieldset-legend.html))中看到该例。 -当阅读上述表格时,屏幕阅读器将会读第一个小部件“Fruit juice size small”,“Fruit juice size medium”为第二个,“Fruit juice size large”为第三个。 +当阅读上述表格时,屏幕阅读器将会为第一个微件读出“Fruit juice size small”,“Fruit juice size medium”为第二个,“Fruit juice size large”为第三个。 -本例中的用例是最重要的。每当你有一组单选按钮时,你应该将它们嵌套在{{HTMLElement("fieldset")}}元素中。还有其他用例,一般来说,{{HTMLElement("fieldset")}}元素也可以用来对表单进行分段。理想情况下,长表单应该在拆分为多个页面,但是如果表单很长,却必须在单个页面上,那么将以不同的关联关系划分的分段,分别放在不同的 fieldset 里,可以提高可用性。 +本例中的用例是最重要的。每当使用一组单选按钮时,都应该将它们嵌套在 {{HTMLElement("fieldset")}} 元素中。还有其他用例,一般来说,{{HTMLElement("fieldset")}} 元素也可以用来对表单进行分段。理想情况下,长表单应该在拆分为多个页面,但是如果表单很长,却必须在单个页面上,那么将以不同的关联关系划分的分段,分别放在不同的 fieldset 里,可以提高可用性。 -因为它对辅助技术的影响, {{HTMLElement("fieldset")}} 元素是构建可访问表单的关键元素之一。无论如何,你有责任不去滥用它。如果可能,每次构建表单时,尝试侦听[屏幕阅读器](https://www.nvaccess.org/download/)如何解释它。如果听起来很奇怪,试着改进表单结构。 +因为它对辅助技术的影响, {{HTMLElement("fieldset")}} 元素是构建无障碍表单的关键元素之一。无论如何,你有责任不去滥用它。如果可能,每次构建表单时,请尝试[听一听屏幕阅读器](/zh-CN/docs/Learn/Tools_and_testing/Cross_browser_testing/Accessibility#屏幕阅读器)如何解释它。如果听起来很奇怪,请尝试改进表单结构。 ## \