CSSで検索ボックスを非表示にする機能を実装します(アニメーション順方向と逆方向のシーケンス)

CSSで検索ボックスを非表示にする機能を実装します(アニメーション順方向と逆方向のシーケンス)

上部のメニュー バーに検索ボックスを配置するのは一般的なシナリオですが、検索機能がそれほど頻繁に使用されておらず、メニュー バーのコンテンツがすでに混雑している場合は、そこに完全な検索ボックスを配置しても見た目があまり美しくありません。したがって、次の図に示すように、検索アイコンのみを配置し、必要なときに検索ボックス全体を表示するのが一般的です。

実装のアイデア

検索ボックスは初期状態では表示されません。マウスが移動すると右からスライドインします。そのため、検索ボックス自体のhidden属性やtransparency属性は使用できません。親要素のoverflow: hidden使用して非表示にし、入力ボックスを親要素の表示範囲外に移動させ、必要に応じて元に戻す必要があります。

CSS でアニメーション効果を実現するには、 transitionanimation 2 つの方法があります。ここでは、検索ボックスが移動し、アイコンの透明度が変化するという 2 つの単純な効果しかないため、 transitionで十分です。

これら 2 つのアニメーションの実装はシンプルですが、いくつか細かい点があります。

  • 2 つのアニメーションは同時に実行されるのではなく、順番に実行されます。2 つの効果のシーケンスを実現するには、 transition-delayを使用する必要があります。
  • 表示と非表示の 2 つのプロセスはまったく同じに見えますが、よく見るとアニメーションの順序が異なることがわかります。表示の場合は、最初にアイコンが消えて検索ボックスが移動します。非表示の場合は、最初に検索ボックスが移動して、後からアイコンが表示されます。そのため別途設定が必要となります。

コードの実装

完全なスタイルシートは記事の最後に添付されています。具体的なアイデアを読みたくない場合は、このセクションをスキップして直接コピーできます。

基本スタイル

まずは基本的なスタイルから始めましょう。ここで使用されているアイコンはマテリアル デザインのアイコンです。

<div class="検索">
  <input class="bar" placeholder="コンテンツを入力してください" />
  <span class="material-icons icon">検索</span>
</div>
.アイコン {
  幅: 24px;
  高さ: 24px;
}

。バー {
  高さ: 26px;
  幅: 200ピクセル;
  パディング: 1px 9px;
  境界線: #fff 1px 実線;
  境界線の半径: 3px;
  背景色: 透明;
  色: #fff;
}
::プレースホルダー{
  color: #ccc; /* 入力内のプレースホルダーの色を変更します*/
}

。検索 {
  高さ: 30px;
  ディスプレイ: フレックス;
  アイテムの位置を中央揃えにします。
} 

検索ボックスを非表示

検索ボックスを移動するには、絶対位置や相対位置を使用するなど、さまざまな方法があります。

  • 検索ボックスが絶対position: absolute )に設定されている場合、検索ボックスは入力ストリームから抽出されます。簡単に言えば、親要素は存在しないかのようにレンダリングされます。このように、親要素の幅と検索アイコンの位置は個別に指定する必要があります。
  • 対照的に、相対配置 ( position: relative ) は、他の要素に影響を与えずに要素の位置を移動するだけなので、ここで使いやすくなります。

より直接的な方法として、 transform プロパティもあります。このプロパティを使用すると、他の要素に影響を与えずに、要素の移動、回転、スケーリングなどの変換操作を実装できます。ここで使用されるtranslateX()属性は、要素を X 軸に沿って指定された距離 (水平方向) に移動します。翻訳の観点からのみ見ると、相対的な配置を使用する場合と比較して効果に明らかな違いはありません。

追記: transition、transform、translate の違いが分からないのは私だけではないはずです。

。検索 {
  オーバーフロー: 非表示;
}
。バー {
  変換: translateX(224px);
  /* 
    前の文は、同じ効果の位置: relative; を持つ次の 2 つの文に置き換えることもできます。
    左: 224px;
  */
}

アニメーションシーケンス

アニメーションは transition プロパティを通じて実現されます。 transition は、transition-property、transition-duration、transition-timing-function、および transition-delay の略語です (例: border: red 1px solid; )。4 つのプロパティは、それぞれトランジション アニメーションの継続時間、タイミング カーブ、および遅延時間を指定します。

  • プロパティは、遷移アニメーションが適用されるプロパティです。
  • 時間カーブとは、最初はゆっくり、途中で速く、最後はゆっくりといったアニメーションの速度変化のことです。均一な動きよりも見栄えがよく、滑らかになります。
  • 遅延時間は、トリガー条件が満たされた後、一定時間アニメーションを遅延させるものです。複数のアニメーションを順次実行するために使用できます。

トランジション属性は、基本的には小学校のコンピュータの授業で習った Flash トゥイーン アニメーションです。属性の開始状態と終了状態を指定し、その間のトランジション アニメーションを自動的に完了します。要素の元の属性は開始状態、マウスが移動した後のアニメーション、自然な要素の:hover疑似クラス属性は終了状態です。

.アイコン {
  不透明度: 1;
  transition: opacity 0.3s easy; /* delay プロパティのデフォルト値は 0 です */
}
.search:hover .icon {
  不透明度: 0;
}

。バー {
  変換: translateX(224px);
  遷移: transform 0.3s、ease-in-out 0.3s;
}
.search:hover .bar {
  変換: translateX(24px);
}

逆順

基本的には、目的のアニメーション効果を実現できますが、検索ボックスが非表示になっている場合は、最初にアイコンが表示され、検索ボックスの後にスライドアウトするため、美しさが足りません。解決策も非常に簡単で、ホバー疑似クラスに異なる遅延属性を設定するだけです。

注目すべき点は、ホバー疑似クラスの delay 属性はマウスが上に移動したときの遅延に対応し、要素自体の属性の delay はマウスが外に出たときのアニメーション再開の遅延に対応することです。最初の反応と同じではないかもしれませんが(よく考えれば意味がわかります)、逆に書かないでください。

.アイコン {
  遷移: 不透明度 0.3 秒、緩和 0.3 秒;
}

.search:hover .icon {
  遷移遅延: 0秒;
}

。バー {
  遷移: transform 0.3s、ease-in-out 0s;
}

.search:hover .bar {
  遷移遅延: 0.3秒;
}

トリガーエリア

実際、上記の手順で目的のアニメーション効果が得られます。しかし、まだ小さな問題が残っています。アニメーションは親要素 .search のホバー状態によってトリガーされるため、マウスが検索ボックスがあるはずの検索アイコンの左側 (現在は何もなく、非表示になっています) に移動すると、検索ボックスを表示するアニメーションがトリガーされます。これは実際には受け入れられないことではありません。

マウスがアイコンの上に移動したときのみアニメーションをトリガーしたい場合は、トリガー条件を .icon のホバー状態に変更するだけです。ただし、CSS には後続要素セレクターしかなく、先行要素セレクターがないため (DOM レンダリング CSS の原則ではバックトラックが発生しないため)、HTML でアイコンと検索ボックスの順序を調整する必要があります。

<div class="検索">
  <span class="material-icons icon">検索</span>
  <input class="bar" placeholder="コンテンツを入力してください" />
</div>

次に、対応するスタイルとセレクターを変更します。

.icon:hover {
  不透明度: 0;
  遷移遅延: 0秒;
}

.icon:hover + .bar { /* + 隣接兄弟セレクター*/
  変換: translateX(24px);
  遷移遅延: 0.3秒;
}

。検索 {
  ディスプレイ: フレックス;
  flex-direction: row-reverse; /* 検索ボックスをアイコンの左側に残す*/
}

付録: 完全なスタイルシート

<div class="検索">
  <span class="material-icons icon">検索</span>
  <input class="bar" placeholder="コンテンツを入力してください" />
</div>
.アイコン {
  幅: 24px;
  高さ: 24px;
  不透明度: 1;
  遷移: 不透明度 0.3 秒、緩和 0.3 秒;
}

.icon:hover {
  不透明度: 0;
  遷移遅延: 0秒;
}

。バー {
  高さ: 26px;
  幅: 180ピクセル;
  パディング: 1px 9px;
  境界線: #fff 1px 実線;
  境界線の半径: 3px;
  背景色: 透明;
  色: #fff;
  変換: translateX(224px);
  遷移: transform 0.3s、ease-in-out 0s;
}

.icon:hover + .bar {
  変換: translateX(24px);
  遷移遅延: 0.3秒;
}

::プレースホルダー{
  色: #ccc;
}

。検索 {
  高さ: 30px;
  ディスプレイ: フレックス;
  flex-direction: 行を反転します。
  アイテムの位置を中央揃えにします。
  オーバーフロー: 非表示;
}

CSSを使用して隠し検索ボックス機能(アニメーション順方向と逆方向シーケンス)を実装する方法についての記事はこれで終わりです。より関連性の高いCSSアニメーション順方向と逆方向シーケンスのコンテンツについては、123WORDPRESS.COMの以前の記事を検索するか、次の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMを応援してください。

<<:  レスポンシブなカードホバー効果を実現するための HTML+CSS

>>:  HTML+CSS+JSはナビゲーションバーのスクロールグラデーション効果を実現します

推薦する

純粋なCSSを使用してスクロールシャドウ効果を実現します

端的に言うと、スクロール可能な要素には非常によくある状況があります。通常、スクロールすると、要素が現...

Linuxのbasenameコマンドの使い方

01. コマンドの概要basename - ファイル名からディレクトリとサフィックスを削除しますba...

Ckeditor + Ckfinderを使用したJavaScriptファイルアップロードケースの詳細な説明

目次1. 準備2. 減圧3. 統合を開始する1. 準備Ckeditor_4.5.7_full + C...

nginx が動的と静的の分離を実装する方法の例

目次server1にnginxをデプロイするサーバーにlnmpを展開するノード3にhttpdをデプロ...

ネイティブ js カスタム右クリック メニュー

この記事の例では、参考のためにjsカスタム右クリックメニューの具体的なコードを共有しています。具体的...

ウェブデザインの詳細分析に関する詳細な議論

設計業務では、設計者がレビューに参加したり、リーダーの一部が設計案の詳細が足りないと言っているのをよ...

nginxプロセスロックの実装の詳細な説明

目次1. nginxプロセスロックの役割2. エントリーレベルのロックの使用3. nginxプロセス...

DockerにRocketMQをインストールするための実装手順

目次1. 画像を取得する2. ブローカーサーバーを作成する3. ブローカーを作成する4. Rocke...

Net Core実装プロセス分析のDoc​​kerインストールと展開

1. Dockerのインストールと設定 #CentOS をインストールし、Docker パッケージを...

JS でオブジェクトを作成する 4 つの方法

目次1. リテラル値でオブジェクトを作成する2. 新しいキャラクターを使ってオブジェクトを作成する3...

Json の長所と短所、使用方法の紹介

目次1. JSONとは何か1.1 配列リテラル1.2 オブジェクトリテラル1.3 混合リテラル1.4...

Vite と Vue CLI の長所と短所

Vue エコシステムには Vite と呼ばれる新しいビルド ツールがあり、Vue CLI よりも 1...

純粋な CSS ドロップダウン メニュー

成果を達成する実装コードhtml <div id="コンテナ"> &...

Docker構成 Alibaba Cloud Container Serviceの操作

Alibaba Cloud Dockerコンテナサービスの設定Alibaba Cloud Image...

MySQL ビューの原理と基本操作例

この記事では、例を使用して、MySQL ビューの原理と基本操作を説明します。ご参考までに、詳細は以下...