CSSは、入力ボックスのフローティングテキスト効果を実現するために、placeholder-shown疑似クラスを使用します。

CSSは、入力ボックスのフローティングテキスト効果を実現するために、placeholder-shown疑似クラスを使用します。

この記事では、:placeholder-shown 疑似クラスを使用して、純粋な CSS で浮動疑問符効果を作成します。

フローティングテキストラベル

入力ボックスを扱う際には、ユーザーにより良い体験を提供できるよう最善を尽くします。よく使用されるタグ属性は 2 つあります。

ラベル タグは、フォーム要素に関連付けられた説明情報を提供するのに最適な要素です。
入力ボックスのプレースホルダー属性を使用すると、入力が行われていないときに <input> 要素内に表示されるテキストを指定できます。説明やヒントではなく、サンプルテキストを表示するために使用されます。
これら 2 つのラベル プロパティを組み合わせると、「フローティング テキスト ラベル」効果を作成できます。これは具体的には次のことを意味します。

まず、ユーザーには、いくつかのサンプルの質問を表示するプレースホルダー属性を持つ入力タグが表示されます。ラベル要素はデフォルトでは非表示になっています。
入力ボックスがアクティブになり、入力を開始すると、ラベル要素が入力ボックスの上に表示されます。
入力ボックスにテキストがある場合、ユーザーが入力したコンテンツを示すラベル要素が常に入力ボックスの上に表示されます。

フローティングラベルテキストを実現するための純粋なCSS

フォーカス イベントを登録し、入力に値があるかどうかを判断し、要素を非表示にし、入力ボックスにコンテンツがあるかどうかに基づいて要素を表示するかどうかを決定します。これは JavaScript の仕事のように思えますね。あまり!上記の効果を実現できる CSS 疑似クラス: placeholder-shown があるためです。 MDN はこの疑似クラスを次のように説明しています。

:placeholder-shown CSS 疑似クラスは、<input> または <textarea> 要素にプレースホルダー テキストを表示します。

つまり、入力ボックスに値がある場合は、:placeholder-shown 疑似クラスはトリガーされないと想定できます。

この疑似クラスを使用してフローティング ラベルを実装する方法は次のとおりです。

HTML コードを作成し、隣接する兄弟セレクターを通じて入力要素に対応するラベル タグを選択し、2 つの要素を div でラップします。
入力、ラベル、::placeholder 疑似要素のスタイルを設定します。
ラベル要素を先頭に配置し、div 内で垂直方向に中央揃えしてから非表示にします。
:not、:focus、:placeholder-shown 疑似クラスの組み合わせにより、ラベル タグをいつ表示するかが決まります。プレースホルダー テキストが消えた場合はラベルが表示されます — input:not(:placeholder-shown) + label; 入力ボックスにフォーカスが当たり、プレースホルダー テキストが表示されない場合はラベルが表示されます — input:focus:not(:placeholder-shown) + label

上記のアイデアに従って HTML と CSS を完成させましょう。

HTMLとCSS

HTML の構造は実際には非常にシンプルで、次のようになります。

<div class="入力">
  <input type="text" id="input" class="Input-text" placeholder="あなたの名前、例:Nicholas">
  <label for="input" class="Input-label">名</label>
</div>

CSSコード:

.入力{
  /**
   * コンテナの相対的な配置は重要です。ラベル要素のフロート位置はコンテナに対して計算されるからです。*/
  位置: 相対的;
}
.入力テキスト{
  /**
   * 入力ボックスのスタイルを設定します。 フォントサイズと行の高さは、ラベルの正確な位置を決定するために非常に重要です */
  表示: ブロック;
  マージン: 0;
  幅: 100%;
  /**
   * この例では、カスタム プロパティを使用してこれらのプロパティが 1 回設定されます。
   *
   * パディング
   * フォントサイズ
   * 行の高さ
   */
}
.入力テキスト:フォーカス{
  /**
   * フォーカスを取得した際の入力ボックスのスタイル */
}
.入力ラベル{
  /**
   * ラベル要素は絶対位置に設定されており、その位置と移動距離は親要素と入力ボックスに基づいて計算されます*/
  表示: ブロック;
  位置: 絶対;
  不透明度: 0;
  /**
   * この例では、カスタム プロパティを使用してこれらのプロパティが 1 回設定されます。
   *
   * 底
   * 左
   * フォントサイズ
   * 行の高さ
   * 変身
   * 変換元
   * 遷移
   */
}
.Input-text:プレースホルダー表示 + .Input-label {
  /**
   * プレースホルダーテキストが表示されている場合は、ラベルは非表示になります
   */
  可視性: 非表示;
  Zインデックス: -1;
}
.Input-text:not(:placeholder-shown) + .Input-label,
.Input-text:focus:not(:placeholder-shown) + .Input-label {
  /**
   * プレースホルダーが消えると、たとえば入力中は、ラベル要素が表示され、入力ボックスの上に浮かび上がります*/
  可視性: 可視;
  zインデックス: 1;
  不透明度: 1;
  /**
   * これらのプロパティは、カスタムプロパティを使用する例では一度設定されます*
   * 変身
   * 遷移
   */
}

完全なデモンストレーション効果

完全な HTML および CSS コードは、以下のデモ リンクで確認できます。

効果リンク

ブラウザのサポート

ブラウザのサポートは、Edge を除いて、これまでのところかなり良好です。

要約する

上記は、CSS の placeholder-shown 疑似クラスを使用して入力ボックスでフローティング テキスト効果を実現する方法について紹介したものです。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。

<<:  HTML構造化実装方法

>>:  JavaScript は詳細なコードで星座クエリ機能を実装します

推薦する

MySQL でのログインを取り消す

コンセプト紹介: MySQL の redo ログにはトランザクションの動作が記録されることはご存じの...

MySQL InnoDB ストレージ エンジンの詳細

序文MySQL では、InnoDB はストレージ エンジン レイヤーに属し、プラグインとしてデータベ...

位置のいくつかの巧妙な応用の詳細な説明:sticky スティッキーポジショニング

背景: position:sticky はスティッキー配置とも呼ばれます。スティッキー配置の要素は、...

JavaScript が重複したネットワークリクエストを防ぐ方法の例

序文開発中は、インターフェース要求の繰り返しによってさまざまな問題が発生することがよくあります。ネッ...

Web フロントエンドのパフォーマンス最適化の詳細説明: リソースのマージと圧縮

2つの目的のためのリソースの結合と圧縮httpリクエストの数を減らす要求されたリソースのサイズを縮小...

CSS における px、rem、em、vh、vw の違いを簡単に分析します

絶対長さピクセルpx はピクセル値であり、メートルやセンチメートルのような固定の長さです。相対的な長...

複雑なウェブサイトのナビゲーションを簡素化

<br />ナビゲーション設計は構造設計における主要なタスクの 1 つです。ソフトウェア...

Windows で nginx を素早くインストールし、自動的に起動するように設定する

目次1. Windows システムでの Nginx のインストールと起動プロセス: 2. 起動時にN...

Workermanはmysql接続プールのサンプルコードを書きます

まず、接続プールを使用する理由と、接続プールによってどのような問題が解決できるかを理解する必要があり...

Docker+keepalived+nginx を使用してマスタースレーブホットスタンバイを実装する方法の例

序文単一障害点を解決するには、マスター/スレーブ ホット スタンバイ ソリューションを構成する必要が...

Word のコンテンツを Web サイトのエディターに直接コピーすることはお勧めしません。

<br />質問: Word のコンテンツを Web サイトのエディターに直接コピーする...

友達やグループを見つけるためのJavaScriptのLayim

現在、layuiの関係者はlayim友達検索ページの構造とスタイルを提供していません。私は個人的に非...

Vueプロジェクトでページジャンプを実装する方法

目次1. vue-cli デフォルト プロジェクトを作成する (babel のみを含む) 2. 作成...

React+axios は github 検索ユーザー機能を実装します (サンプル コード)

負荷リクエスト成功リクエストに失敗しました cmdをクリックし、ファイルパスでEnterキーを押しま...

ローカルストレージにブール型の値を保存する際の落とし穴を解決する

LocalStorageはブール値を保存します今日、ブール値データを保存するために localsto...