序文 こういう特殊効果ってよく見かけますよね。すごくかっこいいですよね。 これは、Google では、 アイデア 実際、これはアニメーションであり、完全な円が小さいものから大きいものへと成長します。これは サンプルコード @keyframes リップル{ から { 変換: スケール(0); 不透明度: 1; } に { 変換: スケール(1); 不透明度: 0; } } サンプルコード var btn = document.getElementById('btn'); btn.addeventlistener('click',function(){ addClass(btn,'アニメーション') }、間違い) btn.addeventlistener('transitionend',function(){//CSS3 アニメーションの終了をリッスンします。removeClass(btn,'animate') }、間違い) では、CSS を通じてアニメーションをトリガーするにはどうすればよいでしょうか? CSS実装
多くの場合、ページ上の効果は まずは試してみましょう。 構造 これは私たちが書いたページの構造とスタイルです <スタイル> .btn{ 表示: ブロック; 幅: 300ピクセル; アウトライン: 0; オーバーフロー: 非表示; 位置: 相対的; 遷移: .3秒; カーソル: ポインタ; ユーザー選択: なし; 高さ: 100px; テキスト配置: 中央; 行の高さ: 100px; フォントサイズ: 50px; 背景:トマト; 色: #fff; 境界線の半径: 10px; } </スタイル> <a class="btn">ボタン</a> 非常にシンプルで、普通のボタンスタイルです 次に、ボタンに必要な完全な円を追加します。 これを実現するために疑似要素を使用します .btn:後{ コンテンツ: ''; 位置: 絶対; 幅: 100%; パディング上部: 100%; 背景: 透明; 境界線の半径: 50%; 左: 50%; 上位: 50%; 変換: translate(-50%,-50%) } 上に 次に、スケーリングアニメーションを作成します @keyframes リップル{ から { 変換: translate(-50%,-50%) スケール(0); /** 変換属性はデフォルトで記述されているので、ここで translate(-50%,-50%) を追加する必要があります。そうしないと、置き換えられてしまいます**/ 背景: rgba(0,0,0,.25); } に { 変換: translate(-50%,-50%) スケール(1); 背景: 透明; } } ホバー小さなインタラクティブ体験 マウスをかざしてみますか? .btn:hover:after{ アニメーション: リップル 1 秒; } 効果は良いのですが、マウスを速く動かしすぎると、拡大した円がすぐに縮小してしまうので、少し不安定です。 しかし、これは私たちが望んでいる効果ではありません。私たちが望んでいるのは、単にそこに置いて二度とトリガーされないようにするのではなく、クリックごとに 1 回トリガーされることです。 アクティブトライ 日常業務では、 .btn:active:after{ アニメーション: リップル 1 秒; } 効果も不十分で、マウスを押したままにしているのと少し似ていて、完全にトリガーするにはマウスを押したままにする必要があります。たとえば、上記の例では、アニメーションは フォーカスエクスペリエンス 任意の要素にフォーカスを当てる必要がある場合は、その要素に <a class="btn" tabindex="1">ボタン</a> .btn:focus:after{ アニメーション: リップル 1 秒; } 解決策はないのでしょうか? もちろんいくつかあります。最後のが間違いなく解決策です、ハハハ チェック済み
<ラベルクラス="btn"> <input type="checkbox"><span>ボタン</span> </ラベル> ここでは スタイルを追加する .btn>span:after{ /**セレクタを変更する**/ } .btn>入力[type=チェックボックス]{ 表示: なし } .btn>input[type=checkbox]:checked+span:after{ アニメーション: リップル 1 秒; } これによってアニメーションをトリガーすることもできますが、問題は、もう一度クリックすると選択が解除されることです。アニメーションをトリガーするにはどうすればよいでしょうか? 実際、それは .btn>input[type=checkbox]:not(:checked)+span:after{ アニメーション: リップル 1 秒; } 一見すると、かなり巧妙に思えますが、よく考えてみると、表裏両方にアニメーションが書かれているので、 .btn>input[type=checkbox]+span:after{ アニメーション: リップル 1 秒; } 無限サイクル… この問題は長い間私を悩ませてきましたが、神は一生懸命働く人を失望させません。その後、2つの状態で異なるアニメーションをトリガーしようとしましたが、次のように個別にトリガーできます。 .btn>input[type=checkbox]:checked+span:after{ アニメーション: リップル1 1秒; } .btn>input[type=checkbox]:not(:checked)+span:after{ アニメーション: リップル2 1秒; } これは簡単に理解できるはずです。 さて、ここからがポイントです。ripple1 と これは非常に簡単です。デフォルトの状態を設定し、状態を選択して、異なる名前のアニメーションをトリガーするだけです。 .btn>input[type=checkbox]+span:after{ アニメーション: リップルイン 1 秒; } .btn>input[type=checkbox]:checked+span:after{ アニメーション: リップルアウト 1 秒; } @keyframes リップルイン{ から { 変換: translate(-50%,-50%) スケール(0); 背景: rgba(0,0,0,.25); } に { 変換: translate(-50%,-50%) スケール(1); 背景: 透明; } } @keyframes ripple-out{/*名前だけが異なります*/ から { 変換: translate(-50%,-50%) スケール(0); 背景: rgba(0,0,0,.25); } に { 変換: translate(-50%,-50%) スケール(1); 背景: 透明; } } 効果は記事の冒頭で示した通り、完璧です 完全なデモは次のとおりです https://codepen.io/xboxyan/pen/Jmvyex/ いくつかの欠点 上記のアニメーション スタイルはデフォルトでトリガーされるため、ページが読み込まれるとボタン上の水滴アニメーションが 1 回移動するのがわかりますが、特に目立つわけではなく、受け入れられるものではありません。 第二に、実際の効果は、マウスがクリックされたポイントから広がるはずです。私たちの CSS では、これは確かにできず、中心から広がることしかできず、これも妥協点です。ここでアイデアがあります。CSS 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 |
<<: MySQLからOracleへのリアルタイム同期ソリューションの詳細な説明
序文: Vueプロジェクトで透かし効果を使用するには、コンテナを指定できます効果画像: 1. コンテ...
MySQL は、myisam、innodb、memory、archive、example など、多く...
目次再実行ログディスクデータを直接更新するのではなく、最初にメモリデータを更新する必要があるのはなぜ...
MySQL でカーソルを宣言する方法: 1. 変数とカーソルを宣言する 結果をvarchar(300...
目次1. MySQL ワイルドカード ファジー クエリ (%,_) 1-1. ワイルドカードの分類1...
序文この記事では、私が手動で実装したフロントエンドの一般的な SMS 認証コード入力コンポーネントと...
目次01 コンテナの本質とは何か? 02 Cgroupテクノロジーと名前空間テクノロジーの概要03 ...
SSHFS の機能: FUSE(Linux向けの最高のユーザー空間ファイルシステムフレームワーク)を...
まず、テーブルを分割する必要がある理由について説明します。データシートが数百万に達すると、1 回のク...
1. インデックスの重要性インデックスは、列に特定の値を持つ行をすばやく見つけるために使用されます。...
1. Dockerがイメージをプルするdocker pull mysql (デフォルトで最新バージョ...
MySQL データベースのバージョンを 5.6.28 から 8.0.11 にアップグレード中にプロジ...
目次序文レンダリングサンプルコード要約する序文ダイアログ ボックスは非常に一般的なコンポーネントであ...
1. 仮想マシンとgit bashウィンドウを開き、接続の準備をします2. 仮想マシンでifconf...
問題の説明:デスクトップ コンピューターとキャンパス ネットワークを使用して、有線モードでインターネ...