純粋な CSS 実装 (スクリプトなし) HTML コマンド スタイルのツールチップ テキスト プロンプト効果

純粋な CSS 実装 (スクリプトなし) HTML コマンド スタイルのツールチップ テキスト プロンプト効果

実行プロセスを分析します。マウスをノードに移動して、ノードにツールチップ実装を開くための識別子 (クラス名、属性など) があるかどうかを検出します。主題と場所 (クラス名、属性など) を検出します。バブルを生成/表示します。他の人から学びます。

まずelement-uiのツールチップスタイルを見てみましょう

明らかに、バブルの位置はJavaScriptスクリプトによって追加されます

さっそく、期待値を設定しましょう。JavaScript は不要、純粋な CSS実装。新しい要素を追加する必要はありません** (after、before 疑似要素を使用)** クラス名を一致させる必要はありません。属性セレクタを直接使用します** ([attr])** デフォルトのスタイルをサポートします** (タグがテーマや位置を定義していない場合)** ディレクティブ** (タグ内で定義し、CSS で一致させます)** sassプリプロセッサを使用してバブルのテーマと位置を実装します (理解できない人はCSSに変換できます) HTML 定義ディレクティブ仕様

命令宣言

<button tooltip='私はコンテンツダックです' effect='light' placement='top-left'>左上</button>
  • ツールチップ — バブル内に表示されるコンテンツ。
  • 効果 — バブルのテーマ(暗い / 明るい)、デフォルトでは暗い。
  • 配置 — 親要素に対するバブルの位置 (上 / 左上 / 右上 / 右 / 右上 / 右下...)。デフォルトは上です。

まずはボタンをいくつか書いてみる

このスタイルはelement-uiにインスパイアされています

<div class="コンテナ">
  <div class="top">
    <button tooltip="上" placement="top-left" effect="light">左上</button>
    <button tooltip="左上 左上" placement="top">上</button>
    <button tooltip="右上" placement="右上">右上</button>
  </div>
  <div class="left">
    <button tooltip="左上、左上、左上、左上、左上、左上、左上、左上、左上、左上" placement="left-top">左上</button>
    <button tooltip="左" placement="left" effect="light">左</button>
    <button tooltip="Left-right" placement="left-bottom">左下</button>
  </div>
  <div class="right">
    <button tooltip="右上 右上 右上 右上 右上 右上 右上 右上 右上" placement="right-top">右上</button>
    <button tooltip="右" placement="right" effect="light">右</button>
    <button tooltip="右下" placement="right-bottom">右下</button>
  </div>
  <div class="bottom">
    <button tooltip="左下" placement="左下">左下</button>
    <button tooltip="bottom" placement="bottom" effect="light">下</button>
    <button tooltip="右下" placement="右下">右下</button>
  </div>
</div>

CSSコアコードロジックの実装

ホバーはマウスの動きを監視し、**[ツールチップ]** はこの属性を持つタグと一致し、後にはバブル、前には三角形が表示されます。

/* ツールチップ属性を持つ要素に一致します */
[ツールチップ]
  位置: 相対的;
  /* バブルのデフォルトスタイル */
  &::後 {
    表示: なし;
    コンテンツ: attr(ツールチップ);
  }
  /* 三角形のデフォルトスタイル*/
  &::前に {
    表示: なし;
    コンテンツ: '';
  }
  /* この要素にマウスを移動すると、バブルと三角形が表示されます*/
  &:ホバー{
    &::後 {
      表示: ブロック;
    }
    &::前に {
      表示: ブロック;
    }
  }
}

マウスを動かすと効果を発揮します

効果をより簡単に確認するために、テストではバブルと三角形をデフォルトでブロックするように設定できます。

/* バブルのデフォルトスタイル */
&::後 {
  表示: ブロック;
  コンテンツ: attr(ツールチップ);
}

/* 三角形のデフォルトスタイル*/
&::前に {
  表示: ブロック;
  コンテンツ: '';
}

現在の効果は以下のとおりです

バブルと三角形のデフォルトのスタイルを設定する

コアディスプレイは当然絶対位置に設定されている

/* バブルのデフォルトスタイル */
&::後 {
  表示: ブロック;
  コンテンツ: attr(ツールチップ);
  位置: 絶対;
  空白: ラップなし;
  オーバーフロー: 非表示;
  テキストオーバーフロー: 省略記号;
  パディング: 8px 15px;
  最大幅: 200px;
  境界線の半径: 4px;
  ボックスの影: 0 10px 20px -5px rgba(0, 0, 0, 0.4);
  zインデックス: 100;
  @extend .tooltip-theme-dark; /* デフォルトのテーマを継承します (背景は黒、テキストは白) */
 }

/* 三角形のデフォルトスタイル*/
&::前に {
  表示: ブロック;
  コンテンツ: '';
  位置: 絶対;
  境界線: 5px 透明実線;
  zインデックス: 100;
  @extend .triangle-theme-dark; /* デフォルトのテーマ(黒の背景)を継承します */
}

現在の効果は以下のとおりです

バブルと三角形のテーマカラーをカスタマイズする

2つのテーマを定義する

$白: #fff;
$黒: #313131;

/* バブルテーマ */
.tooltip-theme-dark {
  色: $white;
  背景色: $black;
}

.tooltip-theme-light {
  色: $black;
  背景色: $white;
  境界線: 1px 実線 $black;
}

/* 三角形のテーマ*/
.triangle-theme-dark {
  上の境界線の色: $black;
}

.三角形テーマライト{
  border-top-color: $black; /* 今のところ dark と同じ*/
}

バブルと三角形の位置をカスタマイズします(1方向のみ表示されます)

/* バブルの位置 */

/* -  - 優れた -  - */
.tooltip-placement-top {
  下部: calc(100% + 10px);
  左: 50%;
  変換: translate(-50%, 0);
}

.tooltip-placement-top-right {
  下部: calc(100% + 10px);
  左: 100%;
  変換: translate(-100%, 0)
}

.tooltip-placement-top-left {
  下部: calc(100% + 10px);
  左: 0;
  変換: translate(0, 0)
}

/* 三角形の位置 */

/* -  - 優れた -  - */
.三角形の配置トップ {
  下部: calc(100% + 5px);
  左: 50%;
  変換: translate(-50%, 0);
}

.三角形の配置-左上{
  下部: calc(100% + 5px);
  左: 10px;
}

.三角形の配置-右上{
  下部: calc(100% + 5px);
  右: 10px;
}

撮影場所、被写体

これもコア コードです。属性セレクターを使用してタグの値を一致させ、さまざまなスタイルを設定します。

バブルを合わせる、三角形のテーマ

&[効果="ライト"] {
  &::後 {
    ツールチップテーマを拡張します。
  }

  &::前に {
    テーマを拡張します。
  }
}

バブルと三角形の位置を一致させる、12の位置

@各$placementを上、右上、左上、
右、右上、右下、
下、右下、左下、
左、左上、左下 {
  &[placement="#{$placement}"] {
    &::後 {
      ツールチップの配置を拡張します。
    }

    &::前に {
      三角形の配置を拡張します。
    }
  }
}

タグ内に配置属性が存在しないか空の場合、デフォルトで最上位の位置が継承されます。

&:not([配置]),
&[配置=""] {
  &::後 {
    ツールチップの配置を上に拡張します。
  }

  &::前に {
    三角形の配置を上に拡張します。
  }
}

現在の効果は以下のとおりです

テキストを長くして、バブルと三角形のデフォルトのスタイルに display:none を追加しましょう。

アニメーションを追加する

上下左右の4方向に分かれた4つのアニメーション

@keyframesアニメトップ{
  から {
    不透明度: .5;
    下部: 150%;
  }
}

@keyframesアニメボトム{
  から {
    不透明度: .5;
    上: 150%;
  }
}

@keyframesアニメ左{
  から {
    不透明度: .5;
    右: 150%;
  }
}

@keyframesアニメ右{
  から {
    不透明度: .5;
    左: 150%;
  }
}

バブルの位置を一致させて、実行するアニメーションを決定します。左上や右上などを選択するには、**[attr^=]** を使用します。

/* アニメーションを設定する */
上部の各$placement、
 右、
底、
左
  &[placement^="#{$placement}"] {

    &::後、
    &::前に {
      アニメーション: anime-#{$placement} 300ms 前方へのイーズアウト;
    }
  }
}

最終的な効果は次のようになります

codepen アドレス codepen.io/anon/pen/yR を添付してください…

要約する

上記は、エディターによって導入された HTML ディレクティブ ツールチップ テキスト プロンプト効果の純粋な CSS 実装 (スクリプトなし) です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。エディターがすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

<<:  Flutterを使用して移動可能なスタックウィジェット機能を作成する

>>:  MySQL のデッドロック チェックとデッドロック除去の例の詳細な説明

推薦する

Ubuntu 19でdockerソースをインストールできない問題を共有する

主要な Web サイトと個人的な習慣に従って、Docker ソースを追加するには次の方法を使用します...

Alibaba Cloud ECS サーバーでポート 8080 を開く方法

セキュリティ上の理由から、Alibaba Cloud Server ECS にはデフォルトで独自のセ...

ネイティブ JS を使用してタッチスライド監視イベントを実装する方法

序文今日はちょっとしたデモを書きました。左右にスワイプするロジックに関わる部分があります。当初はプラ...

mysql replace into の使用法の詳細な説明

replace ステートメントは、一般的に insert ステートメントに似ています。ただし、テーブ...

MacOS に MySQL 8.0 をインストールして MySQL にログインする方法

公式チュートリアルに従って、インストール パッケージをダウンロードし、[インストール] をクリックし...

CSS を使用して物流の進行状況のスタイルを実装するためのサンプルコード

効果: CSS スタイル: <スタイル タイプ="text/css">...

VMware での Ubuntu 16.04 イメージの完全インストール チュートリアル

この記事では、VMware 12でのUbuntu 16.04イメージのインストールチュートリアルを参...

Raspberry Pi 4b ubuntu19 サーバーへの docker-ce のインストール手順

Raspberry Pi モデルは 4b、1G RAM です。システムはubuntu19.10サーバ...

Nginx+Tomcat 負荷分散クラスタのインストールと構成のケースの詳細な説明

目次序文1. Nginx+Tomcat 2. Nginxサーバーを構成する3. Tomcatアプリケ...

MySQLの再帰問題

MySQL自体は再帰構文をサポートしていませんが、自己接続を通じていくつかの単純な再帰を実現できます...

CSSスプライト技術は複数の背景を1つのPNG画像に統合しますCSSポジショニング

アメリカのYAHOOがページ制作で使用している画像統合技術。これらのアイコン、列背景、画像ボタンを定...

Linuxダイナミックリンクライブラリの使用

通常のプログラムと比較すると、ダイナミック リンク ライブラリにはメイン関数がなく、一連の関数の実装...

一般的な Linux の問題に対する解決策の概要

1. VMwareでCentos7を接続し、固定IPを設定する1) まず、仮想イメージ名を右クリック...

Java で ffmpeg を呼び出してビデオ形式を flv に変換する方法の詳細な説明

Java で ffmpeg を呼び出してビデオ形式を flv に変換する方法の詳細な説明注:以下のプ...

nuxt.js 複数の環境変数の設定

目次1. はじめに2. シナリオ3. 環境を整える3.1 環境変数の挿入4. 最後に1. はじめに一...