
UIコンポートネント作成の方法は今や様々な方法がありますが、JSを減らす、ないしは無くすことができればそれに越したことはありません。
ネイティブHTMLを活用することで、JSやCSSへの依存をある程度減らすことができるかもしれません。Cool native HTML elements you should already be usingを読んでとても勉強になったので、備忘録として残したいと思います。
ネイティブHTMLを使って嬉しいのか
以下のような利点があると思っています。
- JSの依存関係を考えなくても良くなる場合がある
- ブラウザネイティブなため、互換性の心配がUIライブラリと比較して小さい
- ネイティブHTMLはアクセシビリティへの配慮ができているので、ネイティブHTMLをうまく活用できるとアクセシビリティへの対策もできる
モーダルウィンド
過去にまとめたことがあるので、よければ別の記事(HTML】便利そうな dialog 使ってみた感想)を参照してください。
-
dialog
要素にによりキーボードで操作可能 - モーダルを開くとフォーカスが自動的にモーダルの中に移動
- ESCキーでモーダルを閉じる
などが自動で実装されており大変便利です。
アコーディオン
クリックして開く見出し
ここに隠されたコンテンツが入ります
details
要素で追加の詳細情報を確認できるようになります。
ただ、details
要素には必ずsummary
要素を含まなければならず、詳細情報が非表示になった状態では、summary
要素の内容のみが表示されます。
メモ
-
details
要素はインタラクティブな要素の一つでもあるので、デフォルトでキーボードによるフォーカスが可能 -
details
要素にはopen
属性をつけることができるので、デフォルトで開いた状態も作れる -
name
属性を活用することで排他的アコーディオンになる - アコーディオンのネストも可能
デモ
See the Pen
native html accordion by 小林誠 (@knicisow-the-vuer)
on CodePen.
スライダー
input
要素の type="range"
を活用すると実装できます。
スライダーをつまみで調整できるインターフェースなため、大まかな値を直感的に操作しやすい反面、細かい値の微調整には向きません。
ちなみに ARIAロールは sider
です
メモリ付き
範囲入力にdatalist
要素を使用することで、書く値のチェックマークを表示できます。
以下のように実装します。
リアルタイム値表示
少しのJSを使用することで簡単に表現できます。が動かされると、すぐ後ろの
要素の値をスライダーの値に同期させます。
デモ
See the Pen
native html slider by 小林誠 (@knicisow-the-vuer)
on CodePen.
output要素はアプリケーションの実行結果やユーザーの操作結果を表示するために使用します。span
などでも代用できそうな気もしますが、
- name属性で名前をつけられる(formの値として送信はされない)
- フォームに配置するとリセットボタンで初期値に戻せる
- ARIAロールが
status
であり、値が変化した際に支援技術に対して通知する機能を持つ
と機能を持つので、output
を使える場面ならこれを活用する方がいいでしょう。
プログレスバー
nativeなhtmlがサポートしています。
参考: progress
See the Pen
native html progressbar by 小林誠 (@knicisow-the-vuer)
on CodePen.
これは動的な進捗状況を表現するためのものなので、単なる静的なグラフとして表現したい場合はmeter
を使用します
静的なグラフ meter
棒グラフのようなゲージとしてレンダリングされます。
注意:value
だけでUIは表現できますが、meter
要素を解釈しないブラウザに対するフォールバックとして、テキストを入れておくことが無難だそうです。
参考: meter
検索可能なドロップダウン
datalist
やoptgroup
を活用することで検索したり、グループ化を簡単に実装できます。
入力補完の候補を表示
datalist
要素に id
属性を指定し、そのid
をinput
要素のlist
属性で指定することで、datalist
の子要素であるoption
要素が補完候補になります。
入力しながら絞り込みができるので、検索フォームで活用できます。
ちなみにinput
要素にtype="range"
を指定すると option
で指定した位置にメモリがつくスライダーとなります。
候補のグループ化
select
要素の中で、optgroup
要素を使用すると、option
要素をグループ化できます。
注意:
-
optgroup
にはoption
以外を入れることができない -
optgroup
を入れ子にできない
参考: optgroup
デモ
See the Pen
native html datalist by 小林誠 (@knicisow-the-vuer)
on CodePen.
キャプション付き画像
figcaption
を使用するとキャプションを表現できますfigcaption
はfigure
要素のなかの先頭か末尾におく必要があります。
以下のように書きます
src="image.jpg" alt="..." />
画像の説明
See the Pen
Untitled by 小林誠 (@knicisow-the-vuer)
on CodePen.
注意:figcaption
のスクローンリーダーの読み上げ対象となるので、alt
と同じ文言を書いた場合、2度同じ内容が読み上げられるので注意が必要です。
参考: figcaption
マークされたテキスト
強調やハイライトを表現し、強調したいケース以外に、検索語句をハイライトとしたい場合でも使用できます。
ここテストに出ます!
まとめ
ここまで見ていただきありがとうございます。
自分も過去にspanタグやjsを無理やり駆使して、車輪の再発明をしたことがあります。😅
こういったネイティブHTMLの挙動を知っておくと、実装を効率化させたり、よりアクセシビリティに配慮されたUIコンポーネントを実装できます。
誰かの参考になると嬉しいです。
参考
Views: 0