この記事では、画面サイズのチェックやユーザー エージェント スニッフィングなどの信頼性の低い手法を超えて、Web 開発におけるユーザー入力デバイス (タッチ、マウス、スタイラス) を検出するための信頼できる方法を探ります。 正確なデバイス機能の検出のために、CSS メディア クエリ、特に pointer
、hover
、および any-pointer
を活用することに重点が置かれています。 これらのクエリは入力モダリティに関する正確な情報を提供し、よりアクセスしやすく応答性の高い Web アプリケーションにつながります。
単純なアプローチは便利に見えるかもしれませんが、多くの場合不正確な結果が得られます。たとえば、ユーザーがマウスをスマートフォンに接続すると、サイズに基づく仮定が無効になります。 CSS メディア クエリは、実際のデバイス特性に基づいた正確なデータを提供する優れたソリューションを提供します。
CSS メディア クエリ: 信頼できるアプローチ
この記事では、pointer
と hover
メディア クエリについて詳しく説明し、React フックとしての実装を示します。
pointer
メディア クエリ
pointer
メディア クエリは、ポインティング デバイスの存在と精度を決定します。 3 つの値のいずれかを返します:
-
none
: 使用可能なポインティング デバイスがありません (音声制御デバイスなど)。 -
coarse
: ポインティング デバイスは存在しますが、精度が不足しています (タッチスクリーン上の指など)。 -
fine
: 高精度のポインティング デバイス (マウスなど) が利用可能です。
window.matchMedia
メソッドは、コード内でメディア クエリ結果に簡単にアクセスできるようにします。
useMatchMedia
フック
コードの冗長性を避けるために、メディア クエリの結果を取得して追跡するためのカスタム useMatchMedia
フックが作成されます。 このフックは window.matchMedia
を利用し、クエリの一致ステータスの変化を検出するイベント リスナーを追加します。 クリーンアップ関数により、コンポーネントがアンマウントされるかクエリが変更されたときにリスナーが確実に削除されます。
export const useMatchMedia = (query: string) => { const [matches, setMatches] = useState(false); useEffect(() => { const media = window.matchMedia(query); if (media.matches !== matches) { setMatches(media.matches); } const listener = () => setMatches(media.matches); media.addEventListener('change', listener); return () => media.removeEventListener('change', listener); }, [matches, query]); return matches; };
プライマリ ポインター機能の検出
usePrimaryPointerQuery
フックは、プライマリ ポインターの型を決定します。 useMatchMedia
、none
、coarse
ポインタ型のクエリで fine
を呼び出し、Pointers
列挙型から適切な値を返します。
import { useMatchMedia } from './useMatchMedia.ts'; import { Pointers } from './types.ts'; export const usePrimaryPointerQuery = () => { const isNone = useMatchMedia('(pointer: none)'); const isCoarse = useMatchMedia('(pointer: coarse)'); const isFine = useMatchMedia('(pointer: fine)'); if (isNone) { return Pointers.none; } else if (isCoarse) { return Pointers.coarse; } else if (isFine) { return Pointers.fine; } };
追加のポインター機能の検出
プライマリ ポインタは 1 つだけ存在しますが、デバイスはセカンダリ ポインタを持つことができます (Bluetooth キーボード、ジョイスティックなど)。 メディア クエリは、使用可能なポインタの精度をチェックします。 any-pointer
フックはポインター型を受け入れ、動的に生成されたクエリ文字列で useAnyPointerQuery
を使用します。useMatchMedia
export const useMatchMedia = (query: string) => { const [matches, setMatches] = useState(false); useEffect(() => { const media = window.matchMedia(query); if (media.matches !== matches) { setMatches(media.matches); } const listener = () => setMatches(media.matches); media.addEventListener('change', listener); return () => media.removeEventListener('change', listener); }, [matches, query]); return matches; };
動作デモ
フックを紹介する完全なデモが利用可能です:
高度な検出: hover
および any-hover
hover
および any-hover
メディア クエリは、ホバー機能をチェックすることで検出をさらに絞り込みます。 これらを pointer
クエリと組み合わせることで、より正確なデバイスの識別が可能になります。
Pointer value | Hover value | Device |
---|---|---|
coarse | none | Modern touch screens |
fine | none | Stylus-based devices |
coarse | hover | Joystick or TV remote |
fine | hover | Mouse |
たとえば、プライマリ入力としてスタイラスを検出する場合:
import { useMatchMedia } from './useMatchMedia.ts'; import { Pointers } from './types.ts'; export const usePrimaryPointerQuery = () => { const isNone = useMatchMedia('(pointer: none)'); const isCoarse = useMatchMedia('(pointer: coarse)'); const isFine = useMatchMedia('(pointer: fine)'); if (isNone) { return Pointers.none; } else if (isCoarse) { return Pointers.coarse; } else if (isFine) { return Pointers.fine; } };
このアプローチにより、ユーザー入力デバイスのより堅牢かつ正確な検出が保証され、ユーザー エクスペリエンスとアクセシビリティが向上します。
以上がブラウザのメディアクエリを使用してタッチデバイスを検出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

CSSを備えたカスタムカーソルは素晴らしいですが、JavaScriptを使用して次のレベルに物事を引き出すことができます。 JavaScriptを使用して、カーソル状態間で移行し、カーソル内に動的テキストを配置し、複雑なアニメーションを適用し、フィルターを適用できます。

2025年には、互いに互いに跳ね返る要素を伴うインタラクティブなCSSアニメーションは、CSSにPongを実装する必要はありませんが、CSSの柔軟性とパワーの増加はLee'の疑いを補強します。

CSSバックドロップフィルタープロパティを使用してユーザーインターフェイスをスタイルするためのヒントとコツ。バックドロップフィルターを複数の要素間でレイヤー化する方法を学び、それらを他のCSSグラフィカル効果と統合して、精巧なデザインを作成します。

まあ、SVG'の組み込みのアニメーション機能は、計画どおりに非推奨されることはありませんでした。確かに、CSSとJavaScriptは負荷を運ぶことができる以上のものですが、以前のようにSmilが水中で死んでいないことを知っておくのは良いことです

イェーイ、テキストワラップのジャンプを見てみましょう:サファリテクノロジーのプレビューにかなり着陸してください!しかし、それがChromiumブラウザーでの仕組みとは異なることに注意してください。

このCSS-Tricksアップデートは、アルマナック、最近のポッドキャスト出演、新しいCSSカウンターガイド、および貴重なコンテンツを提供するいくつかの新しい著者の追加の大幅な進歩を強調しています。

ほとんどの場合、人々はTailwind'の@Apply機能を紹介します。このように展示されたとき、@Applyはまったく有望な音をしません。だからobvio

馬鹿のように展開することは、展開に使用するツールと複雑さの報酬と複雑さの減少との間の不一致になります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
