From b4c349e8eb59980e433e35e50fef56c6c487a192 Mon Sep 17 00:00:00 2001 From: Allo Date: Fri, 7 Feb 2025 23:52:54 +0800 Subject: [PATCH] sync upstream changes --- files/zh-cn/_redirects.txt | 10 - files/zh-cn/_wikihistory.json | 16 -- files/zh-cn/glossary/alpha/index.md | 2 +- files/zh-cn/glossary/codec/index.md | 6 +- files/zh-cn/glossary/webm/index.md | 2 +- files/zh-cn/glossary/xinclude/index.md | 2 +- files/zh-cn/glossary/xpath/index.md | 4 +- files/zh-cn/glossary/xslt/index.md | 2 +- .../core/accessibility/multimedia/index.md | 8 +- .../core/accessibility/tooling/index.md | 4 +- .../scripting/what_is_javascript/index.md | 2 +- .../html_video_and_audio/index.md | 18 +- .../client-side_apis/introduction/index.md | 2 +- .../video_and_audio_apis/index.md | 6 +- .../performance/multimedia/index.md | 8 +- .../extensions/testing/html_and_css/index.md | 4 +- .../community/communication_channels/index.md | 2 - .../zh-cn/mdn/community/discussions/index.md | 2 - .../mdn/community/getting_started/index.md | 3 - files/zh-cn/mdn/community/index.md | 4 +- files/zh-cn/mdn/community/issues/index.md | 4 +- .../zh-cn/mdn/community/learn_forum/index.md | 2 - .../community/open_source_etiquette/index.md | 2 - .../community}/our_repositories/index.md | 5 +- .../mdn/community/pull_requests/index.md | 2 - .../zh-cn/mdn/community/roles_teams/index.md | 2 - .../security_vulnerability_response/index.md | 3 - .../mdn/community/translated_content/index.md | 3 - files/zh-cn/mdn/guides/index.md | 5 +- files/zh-cn/mdn/index.md | 30 ++- files/zh-cn/mdn/tutorials/index.md | 1 - .../attrib_copyright_license/index.md | 2 - .../experimental_deprecated_obsolete/index.md | 2 - .../howto/creating_moving_deleting/index.md | 2 - .../howto/document_a_css_property/index.md | 2 - .../howto/document_an_http_header/index.md | 2 - .../howto/document_web_errors/index.md | 2 - .../howto/images_media/index.md | 2 - .../mdn/writing_guidelines/howto/index.md | 2 - .../howto/json_structured_data/index.md | 2 - .../howto/markdown_in_mdn/index.md | 2 - .../howto/research_technology/index.md | 2 - .../index.md | 2 - .../howto/write_an_api_reference/index.md | 2 - .../index.md | 2 - .../write_an_api_reference/sidebars/index.md | 2 - files/zh-cn/mdn/writing_guidelines/index.md | 2 - .../banners_and_notices/index.md | 2 - .../page_structures/code_examples/index.md | 2 - .../compatibility_tables/index.md | 2 - .../page_structures/feature_status/index.md | 2 - .../page_structures/index.md | 2 - .../page_structures/live_samples/index.md | 2 - .../macros/commonly_used_macros/index.md | 2 - .../page_structures/macros/index.md | 2 - .../page_structures/macros/other/index.md | 2 - .../page_structures/page_types/index.md | 2 - .../page_structures/sidebars/index.md | 2 - .../specification_tables/index.md | 2 - .../page_structures/syntax_sections/index.md | 2 - .../criteria_for_inclusion/index.md | 2 - .../writing_guidelines/what_we_write/index.md | 2 - .../code_style_guide/css/index.md | 2 - .../code_style_guide/html/index.md | 2 - .../code_style_guide/index.md | 2 - .../code_style_guide/javascript/index.md | 2 - .../code_style_guide/shell/index.md | 2 - .../writing_style_guide/index.md | 2 - .../resourcetype/index.md | 2 +- .../firefox/experimental_features/index.md | 2 +- .../mozilla/firefox/releases/125/index.md | 4 +- .../zh-cn/mozilla/firefox/releases/3/index.md | 4 +- files/zh-cn/orphaned/mdn/at_ten/index.md | 25 --- .../mdn/community/contributing/index.md | 12 -- .../mdn/mdn_product_advisory_board/index.md | 67 ------ .../index.md | 2 +- .../api/document/creatensresolver/index.md | 6 +- .../zh-cn/web/api/document/evaluate/index.md | 4 +- files/zh-cn/web/api/htmlaudioelement/index.md | 6 +- .../web/api/htmlimageelement/srcset/index.md | 2 +- .../api/htmlmediaelement/autoplay/index.md | 2 +- .../api/htmlmediaelement/canplaytype/index.md | 8 +- files/zh-cn/web/api/htmlmediaelement/index.md | 2 +- .../web/api/htmlmediaelement/play/index.md | 4 +- files/zh-cn/web/api/htmlvideoelement/index.md | 4 +- .../istypesupported_static/index.md | 6 +- .../using_web_audio_api/index.md | 2 +- files/zh-cn/web/api/webrtc_api/index.md | 2 +- .../using_xmlhttprequest/index.md | 2 +- files/zh-cn/web/css/_colon_seeking/index.md | 2 +- files/zh-cn/web/css/line-clamp/index.md | 28 ++- files/zh-cn/web/html/element/audio/index.md | 14 +- files/zh-cn/web/html/element/img/index.md | 20 +- files/zh-cn/web/html/element/picture/index.md | 2 +- files/zh-cn/web/html/element/source/index.md | 12 +- files/zh-cn/web/html/element/video/index.md | 26 +-- files/zh-cn/web/html/index.md | 2 +- .../script-src-elem/index.md | 2 +- .../permissions-policy/autoplay/index.md | 2 +- files/zh-cn/web/http/mime_types/index.md | 28 +-- files/zh-cn/web/index.md | 6 +- .../global_objects/arraybuffer/index.md | 2 +- .../global_objects/sharedarraybuffer/index.md | 6 +- files/zh-cn/web/manifest/index.md | 2 +- .../reference/background_color/index.md | 1 - .../index.md | 5 +- .../buffering_seeking_time_ranges/index.md | 3 - .../index.md | 7 +- .../webaudio_playbackrate_explained/index.md | 3 - .../audio_and_video_manipulation/index.md | 5 +- .../zh-cn/web/media/guides/autoplay/index.md | 5 +- .../index.md | 3 - .../index.md | 7 +- .../media/guides/formats/containers/index.md | 15 +- .../media/guides/formats/image_types/index.md | 7 +- files/zh-cn/web/media/guides/formats/index.md | 21 +- .../guides/formats/video_codecs/index.md | 63 +++--- files/zh-cn/web/media/guides/images/index.md | 5 +- files/zh-cn/web/media/index.md | 10 +- .../what_is_a_progressive_web_app/index.md | 2 +- .../cycletracker/manifest_file/index.md | 2 +- .../parsing_and_serializing_xml/index.md | 4 +- .../web/xml/guides/xml_introduction/index.md | 2 +- .../comparison_with_css_selectors/index.md | 19 +- .../index.md | 66 +++--- files/zh-cn/web/xml/xpath/index.md | 19 +- .../web/xml/xpath/reference/axes/index.md | 6 +- .../transforming_xml_with_xslt/index.md | 200 +++++++++--------- files/zh-cn/web/xml/xslt/index.md | 13 +- .../webassembly/guides/c_to_wasm/index.md | 3 - .../webassembly/guides/concepts/index.md | 17 +- .../guides/exported_functions/index.md | 15 +- .../guides/loading_and_running/index.md | 21 +- .../webassembly/guides/rust_to_wasm/index.md | 3 - .../guides/text_format_to_wasm/index.md | 7 +- .../understanding_the_text_format/index.md | 103 ++++----- .../guides/using_the_javascript_api/index.md | 49 ++--- files/zh-cn/webassembly/index.md | 58 +++-- .../compile_static/index.md | 25 +-- .../compileerror/index.md | 9 +- .../compilestreaming_static/index.md | 17 +- .../javascript_interface/global/index.md | 15 +- .../reference/javascript_interface/index.md | 11 +- .../javascript_interface/instance/index.md | 17 +- .../instantiate_static/index.md | 21 +- .../instantiatestreaming_static/index.md | 18 +- .../javascript_interface/memory/index.md | 12 +- .../javascript_interface/module/index.md | 23 +- .../runtimeerror/index.md | 9 +- .../javascript_interface/table/index.md | 23 +- .../validate_static/index.md | 24 +-- 151 files changed, 593 insertions(+), 962 deletions(-) rename files/zh-cn/{orphaned/mdn/community/contributing => mdn/community}/our_repositories/index.md (97%) delete mode 100644 files/zh-cn/orphaned/mdn/at_ten/index.md delete mode 100644 files/zh-cn/orphaned/mdn/community/contributing/index.md delete mode 100644 files/zh-cn/orphaned/mdn/mdn_product_advisory_board/index.md diff --git a/files/zh-cn/_redirects.txt b/files/zh-cn/_redirects.txt index 66a983027e85e3..fca3ef371502ec 100644 --- a/files/zh-cn/_redirects.txt +++ b/files/zh-cn/_redirects.txt @@ -1431,25 +1431,18 @@ /zh-CN/docs/Learn/Tools_and_testing/跨服务器测试/Your_own_automation_environment /zh-CN/docs/Learn_web_development/Extensions/Testing/Your_own_automation_environment /zh-CN/docs/Localization /zh-CN/docs/Glossary/Localization /zh-CN/docs/MDN/About /zh-CN/docs/MDN/Writing_guidelines -/zh-CN/docs/MDN/At_ten /zh-CN/docs/orphaned/MDN/At_ten /zh-CN/docs/MDN/CSS /zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties -/zh-CN/docs/MDN/Community/Contributing /zh-CN/docs/orphaned/MDN/Community/Contributing /zh-CN/docs/MDN/Community/Contributing/Getting_started /zh-CN/docs/MDN/Community/Getting_started -/zh-CN/docs/MDN/Community/Contributing/Our_repositories /zh-CN/docs/orphaned/MDN/Community/Contributing/Our_repositories /zh-CN/docs/MDN/Community/Contributing/Security_vulnerability_response /zh-CN/docs/MDN/Community/Security_vulnerability_response /zh-CN/docs/MDN/Community/Contributing/Translated_content /zh-CN/docs/MDN/Community/Translated_content -/zh-CN/docs/MDN/Community/MDN_content /zh-CN/docs/orphaned/MDN/Community/Contributing /zh-CN/docs/MDN/Community/Users_teams /zh-CN/docs/MDN/Community/Roles_teams -/zh-CN/docs/MDN/Contribute /zh-CN/docs/orphaned/MDN/Community/Contributing /zh-CN/docs/MDN/Contribute/Content /zh-CN/docs/MDN/Writing_guidelines /zh-CN/docs/MDN/Contribute/Content/CSS_style_guide /zh-CN/docs/MDN/Writing_guidelines/Howto/Markdown_in_MDN /zh-CN/docs/MDN/Contribute/Content/Custom_macros /zh-CN/docs/MDN/Writing_guidelines/Page_structures/Macros/Commonly_used_macros /zh-CN/docs/MDN/Contribute/Content/Rules_Of_MDN_Documenting /zh-CN/docs/MDN/Writing_guidelines/What_we_write /zh-CN/docs/MDN/Contribute/Content/Style_guide /zh-CN/docs/MDN/Writing_guidelines/Writing_style_guide /zh-CN/docs/MDN/Contribute/Feedback /zh-CN/docs/MDN/Community -/zh-CN/docs/MDN/Contribute/Fixing_MDN_content_bugs /zh-CN/docs/orphaned/MDN/Community/Contributing /zh-CN/docs/MDN/Contribute/Getting_started /zh-CN/docs/MDN/Community/Getting_started -/zh-CN/docs/MDN/Contribute/Howto /zh-CN/docs/orphaned/MDN/Community/Contributing /zh-CN/docs/MDN/Contribute/Howto/Add_or_update_browser_compatibility_data https://github.com/mdn/browser-compat-data/blob/main/docs/contributing.md /zh-CN/docs/MDN/Contribute/Howto/Compatibility_tables /zh-CN/docs/MDN/Writing_guidelines/Page_structures /zh-CN/docs/MDN/Contribute/Howto/Convert_code_samples_to_be_live /zh-CN/docs/MDN/Writing_guidelines/Page_structures/Live_samples @@ -1486,8 +1479,6 @@ /zh-CN/docs/MDN/JavaScript/Reference/Global_Objects /zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen /zh-CN/docs/MDN/JavaScript/Reference/Global_Objects/String /zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor /zh-CN/docs/MDN/Kuma https://github.com/mdn/yari/tree/main/docs/what-yari-does.md -/zh-CN/docs/MDN/MDN_Product_Advisory_Board /zh-CN/docs/orphaned/MDN/MDN_Product_Advisory_Board -/zh-CN/docs/MDN/MDN_Product_Advisory_Board/Members /zh-CN/docs/orphaned/MDN/MDN_Product_Advisory_Board /zh-CN/docs/MDN/Structures /zh-CN/docs/MDN/Writing_guidelines/Page_structures /zh-CN/docs/MDN/Structures/Compatibility_tables /zh-CN/docs/MDN/Writing_guidelines/Page_structures /zh-CN/docs/MDN/Structures/Live_samples /zh-CN/docs/MDN/Writing_guidelines/Page_structures @@ -1498,7 +1489,6 @@ /zh-CN/docs/MDN/Writing_guidelines/Howto/Tag /zh-CN/docs/MDN/Writing_guidelines/Howto /zh-CN/docs/MDN/Writing_guidelines/Page_structures/Quicklinks /zh-CN/docs/MDN/Writing_guidelines/Page_structures/Sidebars /zh-CN/docs/MDN/Yari https://github.com/mdn/yari/tree/main/docs/what-yari-does.md -/zh-CN/docs/MDN_at_ten /zh-CN/docs/orphaned/MDN/At_ten /zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/contextMenus /zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/menus /zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/tabs/查询 /zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query /zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/剪切板 /zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/clipboard diff --git a/files/zh-cn/_wikihistory.json b/files/zh-cn/_wikihistory.json index 1636f1248a4412..fae5c303a3d1da 100644 --- a/files/zh-cn/_wikihistory.json +++ b/files/zh-cn/_wikihistory.json @@ -43099,21 +43099,5 @@ "contributors": [ "Cyandev" ] - }, - "orphaned/MDN/At_ten": { - "modified": "2019-03-23T22:50:02.795Z", - "contributors": [ - "FlyingPig", - "cughudson_1", - "WarriorWu" - ] - }, - "orphaned/MDN/MDN_Product_Advisory_Board": { - "modified": "2019-01-17T01:56:35.044Z", - "contributors": [ - "wbamberg", - "pluwen", - "liminjun" - ] } } diff --git a/files/zh-cn/glossary/alpha/index.md b/files/zh-cn/glossary/alpha/index.md index f917c78c4fa3ce..e82bf41ea28af6 100644 --- a/files/zh-cn/glossary/alpha/index.md +++ b/files/zh-cn/glossary/alpha/index.md @@ -19,7 +19,7 @@ l10n: - [CSS 颜色](/zh-CN/docs/Web/CSS/CSS_colors) - [CSS 的值与单位](/zh-CN/docs/Learn_web_development/Core/Styling_basics/Values_and_units) -- [图像文件类型与格式指南](/zh-CN/docs/Web/Media/Formats/Image_types) +- [图像文件类型与格式指南](/zh-CN/docs/Web/Media/Guides/Formats/Image_types) - 维基百科上的 [Alpha 合成](https://zh.wikipedia.org/wiki/Alpha合成) - 维基百科上的 [RGBA](https://zh.wikipedia.org/wiki/RGBA) - 维基百科上的[通道(数字图像)]() diff --git a/files/zh-cn/glossary/codec/index.md b/files/zh-cn/glossary/codec/index.md index 936415e548f3f1..58d883f3c40d27 100644 --- a/files/zh-cn/glossary/codec/index.md +++ b/files/zh-cn/glossary/codec/index.md @@ -12,6 +12,6 @@ l10n: ## 参见 - 维基百科上的[编解码器](https://zh.wikipedia.org/wiki/编解码器) -- [Web 视频编解码器教程](/zh-CN/docs/Web/Media/Formats/Video_codecs) -- [Web 音频编解码器教程](/zh-CN/docs/Web/Media/Formats/Audio_codecs) -- [Web 媒体类型和格式指南](/zh-CN/docs/Web/Media/Formats) +- [Web 视频编解码器教程](/zh-CN/docs/Web/Media/Guides/Formats/Video_codecs) +- [Web 音频编解码器教程](/zh-CN/docs/Web/Media/Guides/Formats/Audio_codecs) +- [Web 媒体类型和格式指南](/zh-CN/docs/Web/Media/Guides/Formats) diff --git a/files/zh-cn/glossary/webm/index.md b/files/zh-cn/glossary/webm/index.md index c925c6201ba61d..9594426356cb29 100644 --- a/files/zh-cn/glossary/webm/index.md +++ b/files/zh-cn/glossary/webm/index.md @@ -7,7 +7,7 @@ l10n: {{GlossarySidebar}} -**[WebM](/zh-CN/docs/Web/Media/Formats/Containers#webm)** 是一个免版税和开放的 web 视频格式,所有现代浏览器都原生支持它。 +**[WebM](/zh-CN/docs/Web/Media/Guides/Formats/Containers#webm)** 是一个免版税和开放的 web 视频格式,所有现代浏览器都原生支持它。 ## 参见 diff --git a/files/zh-cn/glossary/xinclude/index.md b/files/zh-cn/glossary/xinclude/index.md index 727aa87880626d..7fba198cd7fdf8 100644 --- a/files/zh-cn/glossary/xinclude/index.md +++ b/files/zh-cn/glossary/xinclude/index.md @@ -14,4 +14,4 @@ XInclude 机制在任何主流浏览器中都不受支持。 ## 参见 - [XInclude 标准](https://www.w3.org/TR/xinclude-11/) -- [`XPath`](/zh-CN/docs/Web/XPath) +- [`XPath`](/zh-CN/docs/Web/XML/XPath) diff --git a/files/zh-cn/glossary/xpath/index.md b/files/zh-cn/glossary/xpath/index.md index a50563ccebb8c1..a5a1690095a9b1 100644 --- a/files/zh-cn/glossary/xpath/index.md +++ b/files/zh-cn/glossary/xpath/index.md @@ -2,7 +2,7 @@ title: XPath slug: Glossary/XPath l10n: - sourceCommit: ada5fa5ef15eadd44b549ecf906423b4a2092f34 + sourceCommit: 3e1b5277c6451e7d27ab628f23fb9702947a7a7b --- {{GlossarySidebar}} @@ -11,7 +11,7 @@ l10n: ## 参见 -- [MDN 上的 XPath 文档](/zh-CN/docs/Web/XPath) +- [MDN 上的 XPath 文档](/zh-CN/docs/Web/XML/XPath) - [XPath 规范](https://www.w3.org/TR/xpath-30/) - [官方网站](https://www.w3.org/TR/?tag=xml) - 维基百科上的 [XPath](https://zh.wikipedia.org/wiki/XPath) diff --git a/files/zh-cn/glossary/xslt/index.md b/files/zh-cn/glossary/xslt/index.md index fcc35e53127381..9e94ebe97a1fe3 100644 --- a/files/zh-cn/glossary/xslt/index.md +++ b/files/zh-cn/glossary/xslt/index.md @@ -14,4 +14,4 @@ XSLT 有它自己的可接受 XML 输入或任何可转换为 XQuery 和 XPath ## 参见 - 维基百科上的 [XSLT](https://zh.wikipedia.org/wiki/XSLT) -- [MDN 中的 XSLT 文档](/zh-CN/docs/Web/XSLT) +- [MDN 中的 XSLT 文档](/zh-CN/docs/Web/XML/XSLT) diff --git a/files/zh-cn/learn_web_development/core/accessibility/multimedia/index.md b/files/zh-cn/learn_web_development/core/accessibility/multimedia/index.md index 276d8422f62e7e..891df5538c84cd 100644 --- a/files/zh-cn/learn_web_development/core/accessibility/multimedia/index.md +++ b/files/zh-cn/learn_web_development/core/accessibility/multimedia/index.md @@ -226,9 +226,9 @@ player.ontimeupdate = () => { 这为你提供了如何向视频/音频播放器实例添加自定义播放器功能的基本想法。有关如何向视频/音频播放器添加更复杂的功能(包括旧版浏览器的 Flash 回退)的详细信息,请参阅: -- [Audio and video delivery](/zh-CN/docs/Web/Media/Audio_and_video_delivery) -- [Video player styling basics](/zh-CN/docs/Web/Media/Audio_and_video_delivery/Video_player_styling_basics) -- [Creating a cross-browser video player](/zh-CN/docs/Web/Media/Audio_and_video_delivery/cross_browser_video_player) +- [Audio and video delivery](/zh-CN/docs/Web/Media/Guides/Audio_and_video_delivery) +- [Video player styling basics](/zh-CN/docs/Web/Media/Guides/Audio_and_video_delivery/Video_player_styling_basics) +- [Creating a cross-browser video player](/zh-CN/docs/Web/Media/Guides/Audio_and_video_delivery/cross_browser_video_player) 我们还创建了一个高级示例,以演示如何创建面向对象的系统,该系统可查找页面上的每个视频和音频播放器 (无论有多少个视频和音频播放器),并将自定义控件添加到其中。请参阅 [custom-controls-oojs](https://mdn.github.io/learning-area/accessibility/multimedia/custom-controls-OOJS/)([查看其源码](https://github.com/mdn/learning-area/tree/main/accessibility/multimedia/custom-controls-OOJS))。 @@ -324,7 +324,7 @@ This is the second. ![Video player with standard controls such as play, stop, volume, and captions on and off. The video playing shows a scene of a man holding a spear-like weapon, and a caption reads "Esta hoja tiene pasado oscuro."](video-player-with-captions.png) -有关详细信息,请阅读[Adding captions and subtitles to HTML5 video](/zh-CN/docs/Web/Media/Audio_and_video_delivery/Adding_captions_and_subtitles_to_HTML5_video)。你可以找到与本文一起使用本文的[the example](http://iandevlin.github.io/mdn/video-player-with-captions/),本文由 Ian Devlin 编写 (请参阅[source code](https://github.com/iandevlin/iandevlin.github.io/tree/master/mdn/video-player-with-captions))。此示例使用一些 JavaScript 允许用户在不同的字幕之间进行选择。请注意,要打开字幕,你需要按"CC"按钮并选择一个选项 - 英语、德语或西班牙语。 +有关详细信息,请阅读[Adding captions and subtitles to HTML5 video](/zh-CN/docs/Web/Media/Guides/Audio_and_video_delivery/Adding_captions_and_subtitles_to_HTML5_video)。你可以找到与本文一起使用本文的[the example](http://iandevlin.github.io/mdn/video-player-with-captions/),本文由 Ian Devlin 编写 (请参阅[source code](https://github.com/iandevlin/iandevlin.github.io/tree/master/mdn/video-player-with-captions))。此示例使用一些 JavaScript 允许用户在不同的字幕之间进行选择。请注意,要打开字幕,你需要按"CC"按钮并选择一个选项 - 英语、德语或西班牙语。 > [!NOTE] > 文本轨道和转录也可以帮助你使用{{glossary("SEO")}},因为搜索引擎在文本上尤其繁荣。文本轨道甚至允许搜索引擎通过视频直接链接到一个点部分。 diff --git a/files/zh-cn/learn_web_development/core/accessibility/tooling/index.md b/files/zh-cn/learn_web_development/core/accessibility/tooling/index.md index 304ce8d7d5070d..4927d04d97b689 100644 --- a/files/zh-cn/learn_web_development/core/accessibility/tooling/index.md +++ b/files/zh-cn/learn_web_development/core/accessibility/tooling/index.md @@ -153,7 +153,7 @@ select:focus { 有时候,无法避免键盘无障碍性的丧失。你可能继承了一个语义结构不佳的网站(比如,你不得不使用一个生成 `
` 按钮的糟糕内容管理系统),或者你正在使用一个缺乏内置键盘无障碍性支持的复杂控件,例如 HTML {{htmlelement("video")}} 元素(令人意外的是,Opera 是唯一支持 Tab 键导航 `