马黑黑 发表于 2022-3-31 07:44

CSS:花苞落水起涟漪

<style>
.stage {
        margin: auto;
        position: relative;
        width: 600px;
        min-height: 400px;
        background: linear-gradient(olive, gray, blue);
}
.stage::after {
        content: '';
        width: 40px;
        height: 40px;
        background: transparent;
        border: 1px solid #eee;
        outline: 1px solid #eee;
        outline-offset: 20px;
        border-radius: 50%;
        position: absolute;
        left: calc(50% - 20px);
        top: 300px;
        opacity: 0;
        animation: circle 1.5s 0.75s linear infinite;
}

.wdrop {
        position: absolute;
        left: calc(50% - 10px);
        top: -20px;
        width: 20px;
        height: 20px;
        border-radius: 50%;
        border-radius: 80% 0 55% 50% / 55% 0 80% 50%;
        transform: rotate(-45deg);
        background-image: linear-gradient(45deg, #32c415 0%, #f09 100%);
        animation: drop 1.5s ease-in infinite;
}

@keyframes drop{
        0%                { top: -20px; }
        100%        { top: 300px; }
}
@keyframes circle {
        0%                { opacity: 0; }
        100%        { transform: scale(2, 1.2); opacity: .1; }
}
</style>

<div class="stage">
        <div class="wdrop"></div>
</div>

马黑黑 发表于 2022-3-31 07:53

<p>代码: <br><br></p>
<pre style="font-size: 13px; padding: 10px; border: 1px solid; border-color: deeppink olive magenta navy;">&lt;style&gt;
<span style="color: red;">.stage </span>{
<span style="color: blue;">&nbsp; &nbsp;margin</span>: auto;
<span style="color: blue;">&nbsp; &nbsp;position</span>: relative;
<span style="color: blue;">&nbsp; &nbsp;width</span>: 600px;
<span style="color: blue;">&nbsp; &nbsp;min-height</span>: 400px;
<span style="color: blue;">&nbsp; &nbsp;background</span>: linear-gradient(olive, gray, blue);
}
<span style="color: blue;">.stage</span>::after {
<span style="color: blue;">&nbsp; &nbsp;content</span>: <span style="color: magenta">''</span>;
<span style="color: blue;">&nbsp; &nbsp;width</span>: 40px;
<span style="color: blue;">&nbsp; &nbsp;height</span>: 40px;
<span style="color: blue;">&nbsp; &nbsp;background</span>: transparent;
<span style="color: blue;">&nbsp; &nbsp;border</span>: 1px solid #eee;
<span style="color: blue;">&nbsp; &nbsp;outline</span>: 1px solid #eee;
<span style="color: blue;">&nbsp; &nbsp;outline-offset</span>: 20px;
<span style="color: blue;">&nbsp; &nbsp;border-radius</span>: 50%;
<span style="color: blue;">&nbsp; &nbsp;position</span>: absolute;
<span style="color: blue;">&nbsp; &nbsp;left</span>: calc(50% - 20px);
<span style="color: blue;">&nbsp; &nbsp;top</span>: 300px;
<span style="color: blue;">&nbsp; &nbsp;opacity</span>: 0;
<span style="color: blue;">&nbsp; &nbsp;animation</span>: circle 1.5s 0.75s linear infinite;
}

<span style="color: red;">.wdrop </span>{
<span style="color: blue;">&nbsp; &nbsp;position</span>: absolute;
<span style="color: blue;">&nbsp; &nbsp;left</span>: calc(50% - 10px);
<span style="color: blue;">&nbsp; &nbsp;top</span>: -20px;
<span style="color: blue;">&nbsp; &nbsp;width</span>: 20px;
<span style="color: blue;">&nbsp; &nbsp;height</span>: 20px;
<span style="color: blue;">&nbsp; &nbsp;border-radius</span>: 50%;
<span style="color: blue;">&nbsp; &nbsp;border-radius</span>: 80% 0 55% 50% / 55% 0 80% 50%;
<span style="color: blue;">&nbsp; &nbsp;transform</span>: rotate(-45deg);
<span style="color: blue;">&nbsp; &nbsp;background-image</span>: linear-gradient(45deg, #32c415 0%, #f09 100%);
<span style="color: blue;">&nbsp; &nbsp;animation</span>: drop 1.5s ease-in infinite;
}

<span style="color: red;">@keyframes drop</span>{
<span style="color: blue;">&nbsp; &nbsp;0%&nbsp; &nbsp;&nbsp; &nbsp;{ top</span>: -20px; }
<span style="color: blue;">&nbsp; &nbsp;100%&nbsp; &nbsp;{ top</span>: 300px; }
}
<span style="color: red;">@keyframes circle </span>{
<span style="color: blue;">&nbsp; &nbsp;0%&nbsp; &nbsp;&nbsp; &nbsp;{ opacity</span>: 0; }
<span style="color: blue;">&nbsp; &nbsp;100%&nbsp; &nbsp;{ transform</span>: scale(2, 1.2); <span style="color: blue;">opacity</span>: .1; }
}
&lt;/style&gt;

&lt;<span style="color:darkred">div</span> <span style="color: red">class</span><span style="color: blue">=</span><span style="color: magenta">"stage"</span>&gt;
&nbsp; &nbsp;&lt;<span style="color:darkred">div</span> <span style="color: red">class</span><span style="color: blue">=</span><span style="color: magenta">"wdrop"</span>&gt;&lt;<span style="color: darkred">/div</span>&gt;
&lt;<span style="color: darkred">/div</span>&gt;

</pre>

马黑黑 发表于 2022-3-31 08:06

本帖最后由 马黑黑 于 2022-3-31 08:08 编辑

一、涟漪的模拟

① 主窗体伪元素40*40,圆形,背景透明,边框1px 加 外边框 1px 做双圆圈,二者间距20px。
② 用 transform(scale(2, 1.2)) 令伪元素大小放大,不要太圆,所以sy半径值不同;
③ 不透明度 opacity 从 0 到 .1,不可见到可见,.1可以改大一点点。

二、两个动画的配合

两个动画都没有分步,我的设想是通过另一个动画的延时来达到花苞落到“水面”时涟漪泛起。涟漪的动画设计是单一的两种状态的变化,比方说可见与不可见,那么,理论上它的延时可以是另一个动画周期时长的一半。注意,两个动画周期时长是一样的。

效果可能存在细微误差,可以进一步调节直到达到目的为止。另,CSS模拟的效果通常难以逼真,差不多就行了,不死磕。

加林森 发表于 2022-3-31 08:26

来学习

红影 发表于 2022-3-31 10:05

真漂亮,黑黑辛苦了{:4_187:}

红影 发表于 2022-3-31 10:07

为什么涟漪外面的圈我这里看着是方的?

马黑黑 发表于 2022-3-31 12:18

红影 发表于 2022-3-31 10:07
为什么涟漪外面的圈我这里看着是方的?

有些浏览器是这样。

outline的形状,在不同的浏览器呈现的外观是不一样的,通常为矩形,但先进的浏览器识别为与 border-radius 属性一致。

不管怎么说,outline不太合适涟漪使用,因为涟漪不是方的,而有的浏览器没能将 border-radius 继承到外边框里

红影 发表于 2022-3-31 13:30

马黑黑 发表于 2022-3-31 12:18
有些浏览器是这样。

outline的形状,在不同的浏览器呈现的外观是不一样的,通常为矩形,但先进的浏览 ...

嗯嗯,应该是我的浏览器的问题。

马黑黑 发表于 2022-3-31 13:31

红影 发表于 2022-3-31 13:30
嗯嗯,应该是我的浏览器的问题。

目前也没几个浏览器不是方的

红影 发表于 2022-3-31 20:27

马黑黑 发表于 2022-3-31 13:31
目前也没几个浏览器不是方的

滴落还有气球都很漂亮,空了都能用来做帖子玩呢{:4_187:}

马黑黑 发表于 2022-3-31 20:48

红影 发表于 2022-3-31 20:27
滴落还有气球都很漂亮,空了都能用来做帖子玩呢

哦,那就不能用outline

红影 发表于 2022-3-31 22:18

马黑黑 发表于 2022-3-31 20:48
哦,那就不能用outline

这句没看懂呢{:4_173:}

马黑黑 发表于 2022-3-31 23:02

红影 发表于 2022-3-31 22:18
这句没看懂呢

就是外边框,以前介绍过的

红影 发表于 2022-4-1 23:48

马黑黑 发表于 2022-3-31 23:02
就是外边框,以前介绍过的

哦哦,对的,只把效果搬过去就行了,外边框就不用了。

马黑黑 发表于 2022-4-2 08:06

红影 发表于 2022-4-1 23:48
哦哦,对的,只把效果搬过去就行了,外边框就不用了。

嗯嗯,就这么办吧

红影 发表于 2022-4-2 12:40

马黑黑 发表于 2022-4-2 08:06
嗯嗯,就这么办吧

这两天反正闲着,我找个图图试试{:4_173:}

马黑黑 发表于 2022-4-2 12:48

红影 发表于 2022-4-2 12:40
这两天反正闲着,我找个图图试试

( ^_^ )不错嘛

红影 发表于 2022-4-2 13:54

马黑黑 发表于 2022-4-2 12:48
( ^_^ )不错嘛

还没去找了啊{:4_173:}

马黑黑 发表于 2022-4-2 16:07

红影 发表于 2022-4-2 13:54
还没去找了啊

不急慢慢来

红影 发表于 2022-4-2 19:39

马黑黑 发表于 2022-4-2 16:07
不急慢慢来

总觉得在比较大的图里,这个涟漪可能看不出来呢。
页: [1] 2 3
查看完整版本: CSS:花苞落水起涟漪