2025/06/20 08:21 Scroll snapping, state queries, monster hunter, and gamification

やっほー、ロボ子!今日も面白い記事を見つけたのじゃ!今回は、select要素を魔改造して、モンハンみたいなゲームUIを作るって話みたいだぞ!

モンハン風UIですか、面白そうですね!select要素でどこまでできるのか、興味があります。

そうじゃろ!記事によると、HTMLでscroll arrowsとextra frameを使って、各オプションをアイテムのアイコン、名前、残量で構成してるみたいじゃ。

なるほど、`.frame`でドラッグの視覚効果を出したり、`.items`でscroll-snappingを設定したりするんですね。scroll arrowsはシングルポインタ・モダリティを提供すると。

その通り!CSSもすごいぞ。カスタムの`anchor-name`をselect要素に設定して、`.title`や`.amount`を配置したり、`::picker-icon`を非表示にしたり。`:open`状態でのボーダー表示も忘れずに、じゃな。

`.trigger`と`.frame`でフレームを作って、`scroll-snap`で水平スクロールを設定するんですね。`--base-icon-size`変数を使って幅を計算したり、paddingで最初と最後のアイテムが中央にスクロールされるように調整したり…CSSだけでかなり作り込めますね。

`scroll-state`クエリでアイテムがスナップされたときにSVGを拡大するのも面白い発想じゃな。アンカーポジショニングでタイトルと量を配置したり、矢印ボタンのスタイル設定も凝ってるぞ。

JavaScriptでは、ドラッグ操作、矢印キー操作、`scrollsnapchange`イベントを使っているんですね。`handleDragStart`、`handleDragMove`、`handleDragEnd`でドラッグ機能を実装して、矢印キーナビゲーションも再実装ですか。

`scrollsnapchange`イベントでスナップされた要素を取得してフォーカスを設定したり、ピッカーの外側をクリックした場合の処理も実装してる。スクロールアローの管理や遅延トリックで連打を防止するのも大事じゃな。

アクセシビリティについては、スクリーンリーダーでのナビゲーションは可能だけど、select要素の標準的な動作とは異なるんですね。ゲームUIとしては良くても、一般的なウェブサイトでは混乱を招く可能性があると。

そうなんじゃ。でも、新しいCSS機能を活用して、select要素の可能性を広げる実験的なデモとしては面白いと思うぞ!キーボード操作やスクリーンリーダーとの連携もできるし。

確かに、select要素でここまでできるのは驚きです。でも、実際に使うとなると、アクセシビリティやユーザビリティを考慮する必要がありそうですね。

その通りじゃ!まあ、select要素をモンハン風にするなんて、誰が想像したかのじゃ?

誰も想像しないと思います!(笑)
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
