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

推薦する

VUE uni-app でよく使用される API についての簡単な説明

目次1. ルーティングとページジャンプ2. インターフェース要約する1. ルーティングとページジャン...

meta name="" content="の機能の詳細な説明

1. 文法: <meta name="名前" content="...

Ubuntu 18.04の下のディレクトリにディスクをマウントします

導入この記事では、Ubuntu 18.04 デスクトップ システムでディスクを目的のディレクトリにマ...

Reactの簡単な紹介

目次1. CDNの紹介1.1 react (最初にインポート) 1.2 react-dom(後ほど紹...

CSS の overflow: hidden の使い方 (オーバーフローの非表示とフロートのクリア)

オーバーフロー非表示指定された高さを超えるテキストや画像情報を非表示にすることを意味します。 <...

Linux のバックグラウンドで & と nohup を使用する方法

ターミナルやコンソールで作業しているときは、メールを読むなど、もっと重要な作業があるかもしれないので...

shtmlとhtmlの違い

Shtml と asp は似ています。shtml という名前のファイルでは、asp の命令と同様に、...

JSは要素のドラッグとプレースホルダー機能を実装します

このブログ投稿は、ブロガーが数日前に取り組んだプロジェクトで遭遇した困難についてです。これを学んだ後...

JavaScript による Web ページ カルーセルの超詳細な実装

目次HTML ページの作成js部分の機能を実装する1. 左ボタンと右ボタン2. 小さな円を動的に生成...

ダイナミッククロックを実現するJS+CSS

この記事の例では、動的な時計を実装するためのJS + CSSの具体的なコードを参考までに共有していま...

Ubuntu 18.04 で SSH サービスをインストールして設定する方法

sshツールをインストールする1. ターミナルを開き、次のコマンドを入力します。 apt-getアッ...

HTML テーブルタグチュートリアル (19): 行タグ

<TR> タグの属性は、次の表に示すように、テーブル内の各行のプロパティを設定するために...

CentOS に MySQL をインストールしてリモート アクセスを設定する方法

1. MySQLリポジトリソースをダウンロードする$ wget http://repo.mysql....

Vue プロジェクトで axios リクエストを使用する方法

目次1. インストール2. カプセル化に問題はない3. ファイルを作成する4. アドレス設定をリクエ...

XHTML ブロックレベルタグの概要

* 住所 - 住所* blockquote - ブロック引用* center - 中央揃えブロック*...