検索
ホームページウェブフロントエンドCSSチュートリアル純粋な CSS を使用してマテリアル デザインでボタンの水滴アニメーション効果を実現する方法

この記事の内容は、マテリアル デザインでボタンの水滴アニメーション効果を実現するための純粋な CSS の使用方法についてです。必要な方は参考にしていただければ幸いです。 。

このような特殊効果はよく見かけますよね、とてもかっこいいですよね

純粋な CSS を使用してマテリアル デザインでボタンの水滴アニメーション効果を実現する方法

これが最も一般的ですGoogle マテリアル デザインの特殊効果では、この特殊効果をシミュレートする既製の JS ライブラリが市場に多数存在します。しかし、実際には、既存のプロジェクトでは、ユーザー エクスペリエンスを向上させるためにこのようなボタンを追加する必要がある場合があります。同時に、これらの JS ライブラリは少し大きすぎるように思えます。これらは js で実装されているため、読み込みの問題にも注意が必要です。

それでは、CSS を使用してこの特殊効果を実現する方法はありますか?

アイデア

実際、これはアニメーションであり、完全な円が小さいものから大きいものへと成長します。 css3# を使用 ## のアニメーションは簡単に実装できます

サンプル コード

@keyframes ripple{
    from {
        transform: scale(0);
        opacity: 1;
    }
    to {
        transform: scale(1);
        opacity: 0;
    }
}
通常は

js を使用して実装します非常に簡単な方法で、A class を追加し、class

サンプル コード

var btn = document.getElementById('btn');
btn.addeventlistener('click',function(){
  addClass(btn,'animate')
},false)
btn.addeventlistener('transitionend',function(){//监听css3动画结束
  removeClass(btn,'animate')
},false)
## を削除します。 #それでは、CSS を介してそれを行うにはどうすればよいですか? アニメーションをトリガーするにはどうすればよいですか?

CSS の実装

css でマウスと対話する疑似クラスには、主に

    hover# が含まれます。 ##マウス後
  • :active

    マウスプレス
  • :focus

    マウス フォーカス
  • :checked

    マウスが選択されました
  • 多くの場合、ページ上の効果は hover

    によって実現されます。これを実現するには、マウスを上に置くとエフェクトがトリガーされ、アニメーションが終了します。ただし、マウスを上に置いてすぐに離れると、アニメーションはすぐに終了します。
まずは試してみましょう。

構造

これは私たちが書いたページの構造とスタイルです

<style>
.btn{ 
  display: block; 
  width: 300px; 
  outline: 0; 
  overflow: hidden;  
  position: relative; 
  transition: .3s; 
  cursor: pointer; 
  user-select: none; 
  height: 100px; 
  text-align: center; 
  line-height: 100px; 
  font-size: 50px; 
  background: tomato; 
  color: #fff;  
  border-radius: 10px;
}
</style>
<a>button</a>
非常にシンプルで、普通のボタンのスタイルです

次に、ボタンに必要な正円を追加します。 純粋な CSS を使用してマテリアル デザインでボタンの水滴アニメーション効果を実現する方法これを実現するために疑似要素を使用します

.btn:after{
    content: '';
    position: absolute;
    width: 100%;
    padding-top: 100%;
    background: transparent;
    border-radius: 50%;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%)
}
オーバーフローを削除します: 上に隠れており、円を少し縮小して効果を確認します

次に、ズーム アニメーションを作成します

@keyframes ripple{
    from {
        transform:translate(-50%,-50%) scale(0);
        /**由于我们默认写了变换属性,所以这里要补上translate(-50%,-50%),不然就会被替换了**/
        background: rgba(0,0,0,.25);
    }
    to {
        transform:translate(-50%,-50%) scale(1);
        background: transparent;
    }
}
純粋な CSS を使用してマテリアル デザインでボタンの水滴アニメーション効果を実現する方法ホバーの小さなインタラクティブ エクスペリエンス

マウスを渡してみますか?

.btn:hover:after{
  animation: ripple 1s;
}

効果はまだ良好ですが、マウスがあまりにも早く離れると、新しく拡張された円がすぐに縮小してしまい、少し一貫性がありません。 純粋な CSS を使用してマテリアル デザインでボタンの水滴アニメーション効果を実現する方法しかし、これは私たちが望んでいる効果ではありません。私たちが望んでいるのは、単に装着するだけで再度トリガーされなくなるのではなく、1 回クリックして 1 回トリガーすることです。

active try

日常業務では、

active

も、通常はクリック効果のために使用されることが多いので、試してみましょう。

.btn:active:after{
  animation: ripple 1s;
}

この効果も満足のいくものではなく、マウス ホールド 純粋な CSS を使用してマテリアル デザインでボタンの水滴アニメーション効果を実現する方法 に少し似ています。完了するにはマウスを押し続ける必要があります。たとえば、上記の例では、アニメーションの実行中の実装は 1s

です。その後、完全なアニメーション効果を確認するには、そのボタンをクリックして

1s を続行する必要があります。そうでない場合は、上記のようなものです マウスが離れるとすぐに、アニメーションはすぐに撤回されます フォーカスエクスペリエンス 任意の要素にフォーカスする必要がある場合は、tabindex

属性を指定できます

<a>button</a>
.btn:focus:after{
  animation: ripple 1s;
}

foucs もトリガーできますが、トリガーされた後は、フォーカスを失った後にのみ再度トリガーできます。実際の操作パフォーマンスは、一度クリックした後、外側の空間純粋な CSS を使用してマテリアル デザインでボタンの水滴アニメーション効果を実現する方法をクリックする他に方法はありませんか?

もちろんまだいくつかありますが、最後のものが間違いなく解決策です。笑checked

checked

は直接トリガーできません。 form 要素 選択後にトリガーされます。これを行うには、ページ構造

<label>
  <input><span>button</span>
</label>

lable

に変更し、input[type=checkbox] を含めます。 tag 。主に、ボタンがクリックされたときに

input

の選択をトリガーします。 ちょっとしたスタイルを追加する<pre class="brush:php;toolbar:false">.btn&gt;span:after{   /**换一下选择器**/ } .btn&gt;input[type=checkbox]{   display: none } .btn&gt;input[type=checkbox]:checked+span:after{   animation: ripple 1s; }</pre> <p>这样也能触发动画,但问题是,当再次点击的时候就成了非选中状态了,怎么触发动画呢?</p> <p>其实可以用<code>:not来实现

.btn>input[type=checkbox]:not(:checked)+span:after{
  animation: ripple 1s;
}

乍一看好像挺聪明的,仔细一想,正反两个都写了动画,不就跟:checked没关系了?还不如直接

.btn>input[type=checkbox]+span:after{
  animation: ripple 1s;
}

无限轮回中...

这个问题困扰了我好久,不过皇天不负有心人,后来试着在两种状态下触发不同的动画是可以分别触发的,如下

.btn>input[type=checkbox]:checked+span:after{
  animation: ripple1 1s;
}
.btn>input[type=checkbox]:not(:checked)+span:after{
  animation: ripple2 1s;
}

这个应该很好理解吧。

那么,重点来了,现在把动画ripple1ripple2里面的动画过程都改成一样,也是可以分别触发的,也就是说,只要动画名称不一样,css都会当成不同的动画来处理

这样就简单了,我们只需要默认一个状态,选中一个状态,然后分别触发名称不同的动画就行了~

.btn>input[type=checkbox]+span:after{
  animation: ripple-in 1s;
}
.btn>input[type=checkbox]:checked+span:after{
  animation: ripple-out 1s;
}
@keyframes ripple-in{
    from {
        transform:translate(-50%,-50%) scale(0);
        background: rgba(0,0,0,.25);
    }
    to {
        transform:translate(-50%,-50%) scale(1);
        background: transparent;
    }
}
@keyframes ripple-out{/*仅仅名称不同*/
    from {
        transform:translate(-50%,-50%) scale(0);
        background: rgba(0,0,0,.25);
    }
    to {
        transform:translate(-50%,-50%) scale(1);
        background: transparent;
    }
}

效果就如文章一开始所示,完美

完整demo如下

https://codepen.io/xboxyan/pe...

一些不足

由于上述动画样式在默认情况下就会被触发,所以页面加载进来就会看到按钮上的水滴动画运动一次,不过也不是特别明显,还可以接受。

其次,实际效果肯定是希望鼠标点击哪里,就以该点为中心扩散,我们css肯定是做不到这点的,只能从中心扩散,这也只能妥协了。这里提供一个思路,可以使用css的变量,每次点击的时候吧相应的值存在style里面,这样css中也能用上。

希望能用css今后挖掘出更多有趣的效果^

以上が純粋な CSS を使用してマテリアル デザインでボタンの水滴アニメーション効果を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はsegmentfault思否で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
アンカーポジショニングは、ソースの順序を気にしませんアンカーポジショニングは、ソースの順序を気にしませんApr 29, 2025 am 09:37 AM

アンカーの位置決めがHTMLソースの順序を避けているという事実は、コンテンツとプレゼンテーションの間の懸念の別の分離のため、非常にCSS-Yです。

マージンは何ですか:40px 100px 120px 80pxは意味しますか?マージンは何ですか:40px 100px 120px 80pxは意味しますか?Apr 28, 2025 pm 05:31 PM

記事では、CSSマージンプロパティ、特に「マージン:40px 100px 120px 80px」、そのアプリケーション、およびWebページレイアウトへの影響について説明します。

さまざまなCSSボーダープロパティとは何ですか?さまざまなCSSボーダープロパティとは何ですか?Apr 28, 2025 pm 05:30 PM

この記事では、カスタマイズ、ベストプラクティス、および応答性に焦点を当てたCSSボーダープロパティについて説明します。主な議論:Border-Radiusは、レスポンシブデザインに最も効果的です。

CSSの背景とは何ですか、プロパティをリストしますか?CSSの背景とは何ですか、プロパティをリストしますか?Apr 28, 2025 pm 05:29 PM

この記事では、CSSのバックグラウンドプロパティ、Webサイトの設計の強化における使用、および避けるべき一般的な間違いについて説明します。重要な焦点は、バックグラウンドサイズを使用したレスポンシブデザインです。

CSS HSLの色とは何ですか?CSS HSLの色とは何ですか?Apr 28, 2025 pm 05:28 PM

記事では、CSS HSLの色、Webデザインでの使用、およびRGBよりも利点について説明します。主な焦点は、直感的な色の操作を通じて設計とアクセシビリティを向上させることです。

CSSにコメントを追加するにはどうすればよいですか?CSSにコメントを追加するにはどうすればよいですか?Apr 28, 2025 pm 05:27 PM

この記事では、CSSでのコメントの使用について説明し、シングルラインとマルチラインのコメント構文を詳述しています。コメントはコードの読みやすさ、保守性、コラボレーションを強化するが、適切に管理されていないとウェブサイトのパフォーマンスに影響を与える可能性があると主張しています。

CSSセレクターとは何ですか?CSSセレクターとは何ですか?Apr 28, 2025 pm 05:26 PM

この記事では、HTML要素のスタイリングのCSSセレクター、その種類、および使用法について説明します。 IDとクラスのセレクターを比較し、複雑なセレクターでパフォーマンスの問題に対処します。

どのタイプのCSSが最優先事項を保持していますか?どのタイプのCSSが最優先事項を保持していますか?Apr 28, 2025 pm 05:25 PM

この記事では、CSSの優先順位について説明し、特異性が最も高いインラインスタイルに焦点を当てています。 CSS競合を管理するための特異性レベル、オーバーライド方法、およびデバッグツールを説明します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール