原文: http://www.zcfy.cc/article/607
私たちが構築する Web サイトが徐々にアプリに似てくるにつれて、Web プラットフォームも開発者に必要なものを提供する必要があります。 . アクセシビリティの高いユーザー エクスペリエンスを作成するためのツールは重要です。
最近、作成したコンポーネントに適切なキーボード サポートを追加することが非常に難しい 2 つのシナリオに遭遇しました。多くの実験と調査を行った結果、Web プラットフォームに不足しているプリミティブがいくつかある可能性があることがわかりました。これらのプリミティブが利用可能であれば、私の作業はより簡単になるでしょう。両方のシナリオについて説明し、両方の問題を解決する方法についていくつかのアイデアを取り上げます。
質問 1: モーダル ウィンドウ
モーダル ウィンドウはページ上に表示されるダイアログ ボックスで、通常は背後のコンテンツを覆うマスク レイヤーが付いています。モーダル ウィンドウが表示されている場合、ユーザーは Web ページ上で他の操作を行うことができません。
モーダル ウィンドウをアクセシブルにしようとしたことがあるなら、たとえ無害に見えても、モーダル ウィンドウは実際にはウェブ上のアクセシビリティの主役であることを知っているはずです。彼らはあなたを食べて骨を吐き出すでしょう。たとえば、適切なモーダル ウィンドウには次の特性が必要です:
-
キーボード フォーカスはモーダル ウィンドウに移動され、ウィンドウが閉じられると以前にフォーカスされていた要素に復元される必要があります。
-
ユーザーが誤ってタブ キーを押してフォーカスをモーダル ウィンドウの外に移動できないように、キーボードのフォーカスをモーダル ウィンドウに限定する必要があります。
-
誤ってモーダル ウィンドウから離れることを避けるために、画面読み取りソフトウェアもモーダル ウィンドウに制限する必要があります。
画面読み上げソフトを制限するには大量の aria-hidden 組み合わせ変換が必要であり、TAB を制限するにはフォーカス切り替えの管理も必要であり、上記 3 点を達成するのはかなり困難であると言えます。 これが私が見つけた最良の例です。この例では、モーダル ウィンドウがメイン コンテンツと同じ DOM 内にあることを前提としているため、メイン要素に aria-hidden を適用するだけで済みます。ただし、モーダル ウィンドウがメイン コンテンツと混在している場合 (おそらく配置上の理由により)、それは実際には少し難しく、メイン コンテンツ内のすべての要素に aria-hidden を適用する方法を見つける必要があります。モーダル ウィンドウ (またはその親コンテナ)。確かに予想より大変でした。
HTML 仕様では、上記の問題をすべて魔法のように解決する
サイドバー メニューは、レスポンシブ Web サイトで非常に人気のある UI パターンです。しかし、サイドバー メニューは
考えられる解決策:blockingElements
目標を達成するために
想定される API は次のようになります:
// put element at the top of the blocking elements stackdocument.blockingElements.push(element); document.blockingElements.pop(); // see https://github.com/whatwg/html/issues/897#issuecomment-198565716document.blockingElements.remove(element); document.blockingElements.top; // or .current or .peek()
実際には、blockingElements スタックの最上位に要素を配置します。ページ上の他のすべてを意味します。は無効になります (そのため、キーボードがフォーカスされ、スクリーン リーダーがモーダル ウィンドウを離れる危険はありません)。要素がスタックからポップされると、フォーカスは自然に以前にフォーカスされた要素に戻ります。これにより、
現在、blockingElements はまだ新しいアイデアであり、新しいアイデアは壊れやすいものです。そのため、GitHub の問題で文句を言い、舌戦を始めたいという衝動を抑えてください :blush:。次のステップは、blockingELEments を Web Platform Incubator Community Group (WICG) に移動して、アイデアを磨き続けることです。 WICG への移行時には必ずこのブログ投稿を更新して皆様にお知らせいたします。
質問 2: tabindex を無効にする
先ほどのサイドバー メニューをもう一度見てみましょう。このメニューを左側からアニメーションさせて 60fps を達成するには、このメニューに別のレイヤーを用意する必要があります。これは、 will-change:transform のような CSS プロパティを設定することで実行できます。これで、transform を使用してメニューを画面に表示できるようになり、不必要な描画やレイアウトがトリガーされなくなりました。このビデオはこのテクニックを非常によく説明しています: Paul Lewis の I/O プレゼンテーション
1 つ問題: これを行うには、メニューを DOM ツリーに保持する必要があります。これは、フォーカス可能な子要素が画面の表示領域の外側に存在することを意味します。そのため、ユーザーがページ内をタブ移動し続けると、非表示の要素にフォーカスがあり、ユーザーはそれがどこにあるのか分からないため、最終的にはフォーカスが消えます。私はいつも、レスポンシブなウェブサイトでこれが起こっているのを目にします。これはほんの一例であり、opacity: 0 を使用して要素の表示と非表示をアニメーション化する場合、または大きなリストのカスタム コントロールを一時的に無効にする場合は、tabindex を無効にする必要があります。また、他の人が指摘しているように、カバーフローのようなインタラクションを作成しようとすると、壁にぶつかることになるでしょう。この形式の UI では、次の要素をプレビューできる必要がありますが、それを直接操作することはできないからです。
aria-hidden を使ってみてはいかがでしょうか?
aria-hidden を使用すると、アクセシビリティ ツリーから要素とそのすべての子を削除できます。これは素晴らしいです
これにより、スクリーン リーダーの問題が解決されます (マーシー サットン氏は、これで問題が完全に解決されるわけではなく、フォーカスは得られるもののアクセシビリティ情報が欠如する「ゴースト コントロール」につながる可能性さえあると指摘しています)。残念ながら、ARIA はページの動作に影響を与えることを禁止されており、セマンティクスのみを処理できます。また、tabindex はセマンティクスとはまったく異なる概念です。ただし、視覚障害のあるユーザーはタブ キーを使って Web ページを移動するため、tabindex は重要です。インタラクティブな要素の複雑なツリーがあり、それらをすべてタブ オーダーから削除する必要がある場合、唯一の選択肢は、ツリーを再帰的に走査して (または、すばらしい querySelectorAll 文字列を作成して)、フォーカス可能な各要素セットに tabindex="-1 を与えることです。 」。また、画面の表示領域に戻ったときに復元できるように、明示的な tabindex値を覚えておく必要もあります。これも予想以上に大変でした。
pointer-events: none を使用してみてはいかがでしょうか?
ポインター イベントを設定すると、要素をクリックできなくなりますが、タブ オーダーから要素は削除されないため、キーボードを介して要素を操作することはできます。
サイドバーメニューを表示: なしに設定してみてはいかがでしょうか?
サイドバーメニューが表示されない場合は、表示: なしまたは可視性: 非表示に設定できます。これにより、フォーカス可能な子要素がタブ オーダーから削除されます。残念ながら、これにより GPU レイヤーも破壊され、アニメーションのすべての最適化が失敗します。メニューが十分に単純であれば、ユーザーがメニューを再度開いたときにレイヤーを再構築するコストを無視できますが、メニューがより複雑な場合 ( m.facebook.com など)、これらすべての再描画によりアニメーションが発生する可能性があります。点滅します。開発者は 60fps アニメーションと優れたアクセシビリティのどちらかを選択する必要はないと思います。
考えられる解決策: inert=""
HTML に inert 属性を追加することについては、以前ここで議論がありました。基本的な考え方は、要素に inert 属性を設定すると、その要素とその子孫がすべて非対話型になるというものです。このソリューションは、画面上に表示されていないいくつかの要素を描画し、それらの要素を inert に設定でき、ユーザーがキーボードを介して誤って操作することを心配する必要がないことを意味するため、サイドバー メニューに最適です。
残念ながら、 inert の元のユースケースは主にダイアログを中心に構築されているようで、現時点では
私の感覚では、inert を非推奨にするのは一歩後退する可能性があります。提案されているblockingElements APIは、開発者がアクセシブルなダイアログをより適切に作成するための方法だと思います。なぜなら、「私以外のすべては不活性である」と言っているからです。逆に、上記のアニメーションの例では inert="" が使用されていますが、何かを描画して DOM に挿入する必要があるが、インタラクティブにしたくない (つまり、「怠惰である」) 場合にも役立ちます。 。アクセシビリティの向上に取り組んでいる人々にとって、タブ オーダーから要素を削除するだけでなく、アクセシビリティ ツリーからも要素を削除するため、より強力な aria-hidden のように機能します。 開発者は、最適な API を使用してコンポーネントを構築し、優れたアクセシビリティを自由に実現できます。 ZOMG 完璧な勝利ですね!
ディスカッション スレッドの他の誰かが、新しい CSS プロパティ (つまり inert - 翻訳者注) がより良い解決策である可能性があると述べたことを付け加えておきます。それも素晴らしいと思いますが、私の (非常に限られた) 知識に基づいて提案することはできません。これは開発者にとって非常に悩みの種です。そこで私は Chrome のバグを報告し、Chrome チームが inert を実装するプロセスの再起動を試みるかどうかを確認しました。これらの使用例について書くことで、その有用性を他の人に納得してもらえることを願っています。何か進展があれば、必ずフォローアップ記事を書いて皆さんにお知らせします :bee:
英語の原文: http://robdodson.me/building-better-accessibility-primitives/

HTML、CSS、およびJavaScriptは、最新のWebページを構築するためのコアテクノロジーです。1。HTMLはWebページ構造を定義します。2。CSSはWebページの外観に責任があります。

HTMLの機能は、Webページの構造とコンテンツを定義することであり、その目的は、情報を表示するための標準化された方法を提供することです。 1)HTMLは、タイトルやパラグラフなどのタグや属性を使用して、Webページのさまざまな部分を整理しています。 2)コンテンツとパフォーマンスの分離をサポートし、メンテナンス効率を向上させます。 3)HTMLは拡張可能であり、カスタムタグがSEOを強化できるようにします。

HTMLの将来の傾向はセマンティクスとWebコンポーネントであり、CSSの将来の傾向はCSS-in-JSとCSShoudiniであり、JavaScriptの将来の傾向はWebAssemblyとServerLessです。 1。HTMLセマンティクスはアクセシビリティとSEO効果を改善し、Webコンポーネントは開発効率を向上させますが、ブラウザの互換性に注意を払う必要があります。 2。CSS-in-JSは、スタイル管理の柔軟性を高めますが、ファイルサイズを増やす可能性があります。 CSShoudiniは、CSSレンダリングの直接操作を可能にします。 3. Webassemblyブラウザーアプリケーションのパフォーマンスを最適化しますが、急な学習曲線があり、サーバーレスは開発を簡素化しますが、コールドスタートの問題の最適化が必要です。

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造を定義し、2。CSSはWebページスタイルを制御し、3。JavaScriptは動的な動作を追加します。一緒に、彼らは最新のウェブサイトのフレームワーク、美学、および相互作用を構築します。

HTMLの将来は、無限の可能性に満ちています。 1)新機能と標準には、より多くのセマンティックタグとWebComponentsの人気が含まれます。 2)Webデザインのトレンドは、レスポンシブでアクセス可能なデザインに向けて発展し続けます。 3)パフォーマンスの最適化により、応答性の高い画像読み込みと怠zyなロードテクノロジーを通じてユーザーエクスペリエンスが向上します。

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。HTMLはコンテンツ構造を担当し、CSSはスタイルを担当し、JavaScriptは動的な動作を担当します。 1。HTMLは、セマンティクスを確保するためにタグを使用してWebページの構造とコンテンツを定義します。 2。CSSは、セレクターと属性を介してWebページスタイルを制御して、美しく読みやすくします。 3。JavaScriptは、動的でインタラクティブな関数を実現するために、スクリプトを通じてWebページの動作を制御します。

htmlisnotaprogramminglanguage; itisamarkuplanguage.1)htmlStructuresandformatswebcontentusingtags.2)ItworkswithcsssssssssdjavascriptforInteractivity、強化を促進します。

HTMLは、Webページ構造の構築の基礎です。 1。HTMLは、コンテンツ構造とセマンティクス、および使用などを定義します。タグ。 2. SEO効果を改善するために、などのセマンティックマーカーを提供します。 3.タグを介したユーザーの相互作用を実現するには、フォーム検証に注意してください。 4. JavaScriptと組み合わせて、動的効果を実現するなどの高度な要素を使用します。 5.一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれ、検証ツールが必要です。 6.最適化戦略には、HTTP要求の削減、HTMLの圧縮、セマンティックタグの使用などが含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
