CSSに基づいてマウス入力の方向を決定する

CSSに基づいてマウス入力の方向を決定する

以前、フロントエンド技術グループに所属していたとき、グループのメンバーが面接中に問題に遭遇したと言っていました。面接官は、マウスの位置に基づいてオブジェクトの移動方向を決定するデモを純粋な CSS を使用して実装するように依頼しました。

与えられた初期構造は次のとおりです。

<スタイル>
体 {
    パディング: 2em;
    テキスト配置: 中央;
}
。ブロック {
    位置: 相対的;
    表示: インラインブロック;
    幅: 10em;
    高さ: 10em;
    垂直位置合わせ: 中央;
}

.block_content {
    位置: 絶対;
    上: 0;
    左: 0;
    幅: 100%;
    高さ: 100%;
    テキスト配置: 中央;
    行の高さ: 10em;
    背景: #333;
    色: #FFF;
}
</スタイル>
<p class="text">次のコンテンツ上でマウス ポインターをさまざまな方向から移動します</p>
<p>↓</p>
<span>→ </span>
<div class="block">
    <div class="block_content">
        ホバリングして!
    </div>
</div>
<span>←</span>
<p>↑</p>

効果図は以下のとおりです。

成し遂げる

業務とは全く関係のない、実用的でない質問ばかりでイライラします。中国のフロントエンドはいつになったら立ち上がるのでしょうか? 良い質問をありがとうございます。実装できるよう最善を尽くします。

では、この機能は本当に純粋な CSS で実現できるのでしょうか?

答えは「はい」です。まず、そのアイデアを分解してみましょう。

CSS マウスイベント

まず、質問によると、この質問ではマウス操作を使用する必要があることがわかります。JS にはさまざまなmouseイベントがありますが、同様に、CSS にも:hoverあります。

この質問で使用するセレクターは、hoverです:hover

方向を決める

方向を判断する機能がこの質問の核心です。

タイトル画像から判断すると、実際には方向指示が与えられており、マウスを 4 つの矢印の方向に入力する必要があることがわかります。

次に、純粋な CSS で実装する場合、マウスがキー ノードに触れる必要があり、このノードの特定のパフォーマンスによってこの位置を表現できる必要があります。

これらは質問に示されている 2 つの隠れた条件です。

それでは実装してみましょう。

まず、 :hoverを通じてこのキーノードをタッチする必要があります。タッチは矢印の方向にトリガーされる必要があります。次に、矢印の方向にタッチできるオブジェクトを追加できます。例:

<スタイル>
.block_hoverer {
    位置: 絶対;
    幅: 100%;
    高さ: 100%;
    zインデックス: 1;
}
.block_hoverer:n番目の子(1) {
    背景: 赤;
}

.block_hoverer:n番目の子(2) {
    背景:ライム;
}

.block_hoverer:n番目の子(3) {
    背景: オレンジ;
}

.block_hoverer:n番目の子(4) {
    背景: 青;
}
</スタイル>
<div class="block">
    <div class="block_hoverer">トップ</div>
    <div class="block_hoverer">次へ</div>
    <div class="block_hoverer">左</div>
    <div class="block_hoverer">右</div>
    <div class="block_content">
        ホバリングして!
    </div>
</div>

効果は以下のとおりです。

右のブロックを除いて、他のすべてが覆われていることがわかります。これは正常です。

次に、これらのブロックを端に戻す必要があります。

コードは次のとおりです。

.block_hoverer {
  位置: 絶対;
  zインデックス: 1;
  幅: 100%;
  高さ: 100%;
  遷移: すべて 0.3 秒の緩和;
}
.block_hoverer:n番目の子(1) {
  背景: 赤;
  上限: -90%;
}

.block_hoverer:n番目の子(2) {
  背景:ライム;
  上位: 90%
}

.block_hoverer:n番目の子(3) {
  背景: オレンジ;
  左: -90%;
}

.block_hoverer:n番目の子(4) {
  背景: 青;
  左: 90%;
}

効果は以下のとおりです。

次に、トランジションを追加します。

.block_hoverer {
  遷移: すべて 0.3 秒の緩和;
}
.block_hoverer:ホバー{
  不透明度: 1;
  上: 0;
  左: 0;
}

効果は以下のとおりです。

1 つのステップは非表示にすることです:

。ブロック {
  位置: 相対的;
  表示: インラインブロック;
  オーバーフロー: 非表示;
  幅: 10em;
  高さ: 10em;
  垂直位置合わせ: 中央;
}
.block_hoverer {
  不透明度: 0;
}
.block_hoverer:ホバー{
  不透明度: 1;
}

効果は以下のとおりです。

完全なコードは次のようになります。

<スタイル>
    体 {
        パディング: 2em;
        テキスト配置: 中央;
    }
    。ブロック {
        位置: 相対的;
        表示: インラインブロック;
        オーバーフロー:非表示;
        幅: 10em;
        高さ: 10em;
        垂直位置合わせ: 中央;
        変換: translateZ(0);
    }
    .block_hoverer {
        位置: 絶対;
        zインデックス: 1;
        幅: 100%;
        高さ: 100%;
        不透明度: 0;
        遷移: すべて .3 秒の緩和;
    }

    .block_hoverer:n番目の子(1) {
        背景: 赤;
        上限: -90%;
    }

    .block_hoverer:n番目の子(2) {
        背景:ライム;
        上位: 90%
    }

    .block_hoverer:n番目の子(3) {
        背景: オレンジ;
        左: -90%;
    }

    .block_hoverer:n番目の子(4) {
        背景: 青;
        左: 90%;
    }
    .block_hoverer:ホバー{
        不透明度: 1;
        上: 0;
        左: 0;
    }

    .block_content {
        位置: 絶対;
        上: 0;
        左: 0;
        幅: 100%;
        高さ: 100%;
        テキスト配置: 中央;
        行の高さ: 10em;
        背景: #333;
        色: #FFF;
    }
</スタイル>
<本文>
    <p class="text">次のコンテンツ上でマウス ポインターをさまざまな方向から移動します</p>
    <p>↓</p>
    <span>→ </span>
    <div class="block">
        <div class="block_hoverer">1</div>
        <div class="block_hoverer">2</div>
        <div class="block_hoverer">3</div>
        <div class="block_hoverer">4</div>
        <div class="block_content">
            ホバリングして!
        </div>
    </div>
    <span>←</span>
    <p>↑</p>
</本文>

完全な効果については、Yutouのコードペンをご覧ください。

CSS によるマウス入力方向の決定に関する記事はこれで終わりです。CSS マウス入力方向に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  CSSスタイルで実現されるHTML背景色のグラデーション効果

>>:  よくある CSS エラーと解決策

推薦する

MySql8 WITH RECURSIVE 再帰クエリ親子コレクションメソッド

背景コメントに似た機能を開発する場合は、必要に応じてすべてのコメントのサブセットをクエリする必要があ...

Vue3は画像拡大鏡効果を実現します

この記事の例では、画像拡大鏡効果を実現するためのVue3の具体的なコードを参考までに共有しています。...

Vmvare 仮想マシンを使用して Ubuntu のルート ディレクトリをパーティション分割する方法の紹介

目次序文根拠手順1. CDから仮想マシンを起動する2. GPartedツールを使用してパーティション...

MySQL InnoDBストレージエンジンについて簡単に説明します

序文:ストレージ エンジンはデータベースの中核です。MySQL の場合、ストレージ エンジンはプラグ...

ブラウザのスクロールバーのスタイルを変更するための純粋な CSS の例

CSSを使用してブラウザのスクロールバーのスタイルを変更する ::-webkit-スクロールバー{ ...

Vueプロジェクトのパッケージングと展開の実際のプロセスの記録

目次序文1. 準備 - サーバーとnginxの使用1. サーバーを準備する2. nginxをインスト...

Vue カスタム箇条書きボックス効果 (確認ボックス、プロンプトボックス)

この記事の例では、参考のためにVueカスタムポップアップ効果の具体的なコードを共有しています。具体的...

Nginx の負荷分散と動的および静的分離の原理と構成

目次1. Nginxは負荷分散の原則を実装する2. Nginxの動的および静的分離の原則Nginx ...

MySQLスローログに関する知識のまとめ

目次1. スローログの紹介2. スローログの練習1. スローログの紹介スロー ログの正式名称はスロー...

dig/nslookup コマンドを使用して DNS 解決手順を表示する方法

dig - DNS ルックアップ ユーティリティドメイン名のアクセス障害が発生した場合、ドメイン名の...

MySQL マルチインスタンス構成のアプリケーションシナリオ

目次MySQL 複数インスタンスマルチインスタンスの概要マルチインスタンスとは何ですか?複数のインス...

Firebug ツールを使用して iPad でページをデバッグする

iPad でページをデバッグするにはどうすればいいですか? iOS 5 をご利用の場合、iPad の...

HTML テーブル マークアップ チュートリアル (4): 境界線の色属性 BORDERCOLOR

テーブルを美しくするために、テーブルにさまざまな境界線の色を設定できます。基本的な構文<テーブ...

さまざまなブラウザに対応するためにCSSで指定フォント@font-faceを導入する際の問題

Web ページを作成するときに、特定のフォントを使用したい場合は、 @font-faceを介して参照...

Dockerコンテナのデータボリュームの詳細な説明

何ですかまず、Docker の概念を見てみましょう。アプリケーションと実行環境をコンテナにパッケージ...