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 エラーと解決策

推薦する

Linux で一般的なソフトウェアを設定する方法

新しいLinuxサーバーを入手する場合、通常は次の5つの構成を実行する必要があります。 HOSTAN...

Mysql インデックスと Redis ジャンプテーブルについての簡単な説明

まとめインタビュー中、MySQL インデックスの問題について議論しているときに、B+ ツリー、B ツ...

MySQLが日付フィールドインデックスを使用しない理由の要約

目次背景探検する要約する背景テーブルでは、dataTime フィールドは varchar 型に設定さ...

Linux /etc/network/interfaces 設定インターフェース方法

Linux の /etc/network/interfaces ファイルは、ネットワーク インターフ...

HTML で dl(dt,dd)、ul(li)、ol(li) を使用する方法

HTML <dl> タグ#定義と使用法<dl> タグは定義リストを定義します...

CSSはクーポンスタイルを実装するために放射状グラデーションを使用します

この記事では、CSS で放射状グラデーションを使用して、次の図に示すクーポン スタイルの効果を実現す...

HTMLは実際にはいくつかの重要なタグを学ぶアプリケーションです

「これは革命になるだろう」という記事が出たあと。業界の皆様に認知され、もちろん内外からの評価もいただ...

JS を使用してバイナリ ツリー トラバーサル アルゴリズムのサンプル コードを実装する

目次序文1. バイナリツリー1.1. 二分木の走査1.2. jsを使用してバイナリツリーを表現する1...

Vue の高度な使用方法チュートリアル 動的コンポーネント

目次基本的な説明AST 解析レンダリング機能通常コンポーネントと動的コンポーネントの比較ファクトリ関...

オンデマンドで Vue コンポーネントを自動的にインポートする方法

目次グローバル登録部分登録ローカル自動登録さまざまなソリューションの比較コンポーネント名について参照...

HTML テーブルタグチュートリアル (35): 列間属性 COLSPAN

複雑なテーブル構造では、一部のセルが垂直方向に複数のセルにまたがるため、列間属性 COLSPAN を...

JSONP クロスドメインシミュレーション Baidu 検索

目次1. JSONPとは何か2. JSONPクロスドメインリクエスト3. Baidu検索をシミュレー...

Docker 大規模プロジェクトのコンテナ化変革

仮想化とコンテナ化は、クラウドベースのプロジェクトでは避けられない 2 つの問題です。仮想化は純粋な...

MySQL 最適化のヒント: 重複削除の実装方法の分析 [数百万のデータ]

この記事では、MySQL 最適化のヒントで重複したエントリを削除する方法を例を使って説明します。ご参...

vue+elementui+vuex+sessionStorage を使用して履歴タグ メニューを実装するためのサンプル コード

一般的には、左側にメニューがあった後、ページの上部に履歴タブ メニューを追加する必要があります。他の...