純粋な 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 のデッドロック チェックとデッドロック除去の例の詳細な説明

推薦する

CSS3 のエラスティック レイアウトでの em の使用の概要: 1em は何ピクセルですか?

私は長い間 CSS を使用してきましたが、Web 要素の関連属性を設定するために常に「px」を使用し...

Vue 大画面データ表示例

効率的に要件を満たし、コンポーネント ライブラリの肥大化や車輪の再発明を避けるために、私は以前、大画...

uni-appがNFC読み取り機能を実装

この記事では、参考までに、NFC読み取り機能を実装するためのuni-appの具体的なコードを紹介しま...

シンプルなCSSアニメーションのtransition属性の詳しい説明

1. 遷移属性の理解1. transition 属性は、次の 4 つの遷移プロパティを設定するために...

JS でパブリッシュ サブスクライブ モデルを作成する

目次1. シーン紹介2 コードの最適化2.1 ファンを増やす問題を解決する2.2 作品追加の問題を解...

Linux サーバーのクイックアンインストールとノード環境のインストール (簡単に始められます)

1.まずnpmをアンインストールする sudo npm アンインストール npm -g 2. ノー...

MySQLは文字列の連結、インターセプション、置換、位置検索操作を実装しています

MySQL 文字列の連結、インターセプト、置換、および検索位置。よく使用される文字列関数:関数例示す...

type="file" の入力ボックスのスタイル変更の概要

入力タイプ「file」とは何ですか?これが何なのかは説明する必要はないと思います。誰もが知っているこ...

Nginx ベースの HTTPS ウェブサイトを設定する手順

目次序文:暗号化アルゴリズム: 1. HTTPS の概要2. NginxはHTTPSウェブサイト設定...

Vue のすべてのカプセル化方法の簡単な概要

目次1. カプセル化API 2. グローバルツールコンポーネントを登録する3. グローバル関数をカプ...

MySQL インデックスが失敗するいくつかの状況の概要

1. インデックスはnull値を保存しないより正確に言うと、単一列インデックスには null 値は格...

MySQLクエリが遅い場合の理由と解決策

Python プログラムを書き、Mysql ライブラリを集中的に操作したためです。データ量が多くない...

トップに戻るボタンを実装するJavaScript

この記事では、トップに戻るボタンを実装するためのJavaScriptの具体的なコードを参考までに紹介...

インストールされていないバージョンの MySQL を使用する手順とパスワードを忘れた場合の解決策

最初のステップは、圧縮されたパッケージを対応するディスクに解凍することです。 2 番目の手順は、cm...

MySQL 5.x 以降を使用している場合のエラー #1929 列 ''createtime'' の日付時刻値が正しくありません: '''' の簡単な解決方法

MySQL をインストールした後、テーブル データを保存および削除しようとすると、常にエラー メッセ...