设计一个简单的套娃小播
本帖最后由 马黑黑 于 2025-7-5 13:31 编辑 <br /><br /><style>.wrap { margin: auto; width: 100%; height: 460px; display: grid; place-items: center; position: relative; }
.player { position: absolute; width: 200px; height: 200px; border-radius: 50%; border: 2px solid green; border-color: orange red green transparent; filter: drop-shadow(0 0 30px gray); transition: width .45s, height .45s; cursor: pointer; display: grid; place-items: center; animation: rot 4s linear infinite; --deg: 1turn; }
.player::before, .player::after { position: absolute; content: ''; width: 90%; height: 90%; border: inherit; border-radius: inherit; border-color: inherit; animation: rot 4s linear infinite; --deg: 2turn; }
.player::after { width: 80%; height: 80%; --deg: 3turn; }
.player:hover { width: 210px; height: 220px; }
.player > div { width: 70%; height: 70%; background: url('https://638183.freep.cn/638183/small/2025/b2.png') no-repeat center/80% 80%; border-color: transparent purple transparent cyan; --deg: 2turn; }
@keyframes rot { to { transform: rotate(var(--deg)); } }
</style>
<div class="wrap">
<div class="player">
<div class="player"></div>
</div>
</div> 本帖最后由 马黑黑 于 2025-7-5 12:16 编辑
代码:
<style>
.player {
position: absolute;
width: 200px;
height: 200px;
border-radius:
50%;
border: 2px solid green;
border-color: orange red green transparent;
filter: drop-shadow(0 0 30px gray);
transition: width .45s, height .45s;
cursor: pointer;
display: grid;
place-items: center;
animation: rot 4s linear infinite;
--deg: 1turn;
}
.player::before, .player::after {
position: absolute;
content: '';
width: 90%;
height: 90%;
border: inherit;
border-radius: inherit;
border-color: inherit;
animation: rot 4s linear infinite;
--deg: 2turn;
}
.player::after {
width: 80%;
height: 80%;
--deg: 3turn;
}
.player:hover {
width: 210px;
height: 220px;
}
.player > div {
width: 70%;
height: 70%;
background: url('https://638183.freep.cn/638183/small/2025/b2.png') no-repeat center/80% 80%;
border-color: transparent purple transparent cyan;
--deg: 2turn;
}
@keyframes rot { to { transform: rotate(var(--deg)); } }
</style>
<div class="player">
<div class="player"></div>
</div>
本帖最后由 马黑黑 于 2025-7-5 12:16 编辑
可以考虑将阴影部分仅放在最里层的div,像这样:
<style>
.player { position: absolute; width: 200px; height: 200px; border-radius: 50%; border: 2px solid green; border-color: orange red green transparent; transition: width .45s, height .45s; cursor: pointer; display: grid; place-items: center; animation: rot 4s linear infinite; --deg: 1turn; }
.player::before, .player::after { position: absolute; content: ''; width: 90%; height: 90%; border: inherit; border-radius: inherit; border-color: inherit; animation: rot 4s linear infinite; --deg: 2turn; }
.player::after { width: 80%; height: 80%; --deg: 3turn; }
.player:hover { width: 210px; height: 220px; }
.player > div { width: 70%; height: 70%; background: url('https://638183.freep.cn/638183/small/2025/b2.png') no-repeat center/80% 80%; border-color: transparent purple transparent cyan; filter: drop-shadow(0 0 30px gray); --deg: 2turn; }
@keyframes rot { to { transform: rotate(var(--deg)); } }
</style>
<div class="player">
<div class="player"></div>
</div>
那些圆环转得太快了,开始还以为是一样转着的,实际快慢完全不同,同样的时间里,有的转2圈有的转3圈呢,圈数越多的,转得越快。{:4_204:} 除了外面三色的三道,感觉里面双色的就一道,结果出现了三道,这个是.player > div 里的设置和html里设置相结合得出的结果么? 红影 发表于 2025-7-5 13:16
那些圆环转得太快了,开始还以为是一样转着的,实际快慢完全不同,同样的时间里,有的转2圈有的转3圈呢,圈 ...
@keyframes动画里 --deg 变量都是以 turn 或 360 的倍数为旋转目标圈数,需要控制速度的将 animation 里的 4s 改为长一点的秒数。 红影 发表于 2025-7-5 13:22
除了外面三色的三道,感觉里面双色的就一道,结果出现了三道,这个是.player > div 里的设置和html里设置相 ...
小播使用两个嵌套 div 做成,每一个带两个伪元素,所以共 6 个边框。
外层和里层的 div 都是用 class="player",外层的有个id(便于控制) 马黑黑 发表于 2025-7-5 13:39
小播使用两个嵌套 div 做成,每一个带两个伪元素,所以共 6 个边框。
外层和里层的 div 都是用 class= ...
原来是这么来的,我就说么,感觉边框多出来了{:4_173:} 马黑黑 发表于 2025-7-5 13:36
@keyframes动画里 --deg 变量都是以 turn 或 360 的倍数为旋转目标圈数,需要控制速度的将 animation 里 ...
嗯嗯,我已经去把它弄慢点了,为了弄清楚有多少个边框{:4_173:} 漂亮!谢谢马老师精彩分享{:4_191:} 杨帆 发表于 2025-7-5 16:54
漂亮!谢谢马老师精彩分享
{:4_190:} 红影 发表于 2025-7-5 14:53
嗯嗯,我已经去把它弄慢点了,为了弄清楚有多少个边框
最简单的是把 animate 里的 rot 改为不存在的名称,比如 rot1,或者,把 @keyframes 的 rot 改为 rot1,这样,CSS动画就不会运行,可以慢慢数了 红影 发表于 2025-7-5 14:52
原来是这么来的,我就说么,感觉边框多出来了
两个 div 的边框,还可以继续套 马黑黑 发表于 2025-7-5 18:44
最简单的是把 animate 里的 rot 改为不存在的名称,比如 rot1,或者,把 @keyframes 的 rot 改为 rot1, ...
这方法太好了,一下子看清楚了结构。。
先是画了个原始的,再伪元素整出90.80各一层,这三层为一个单位。又套出一个70的{:4_173:}
加上动画之后,几根线条就可以画出这么漂亮的效果。。这构思也是绝了 本帖最后由 花飞飞 于 2025-7-5 20:52 编辑
马黑黑 发表于 2025-7-5 18:45
两个 div 的边框,还可以继续套
又套了一个不过连背后的小球体一起套显示出来了。。{:4_173:}
这样的效果转动起来特别漂亮。。
多套几层还真都能成功。。直接加DIV就可以了,乐得很 马黑黑 发表于 2025-7-5 11:10
可以考虑将阴影部分仅放在最里层的div,像这样:
阴影效果差别不是很大。。等会回来再看看{:4_173:} 花飞飞 发表于 2025-7-5 20:51
又套了一个不过连背后的小球体一起套显示出来了。。
这样的效果转动起来特别漂亮。。
多套几 ...
要改装一下:只有最里层的 div 带图,比如第三个——
.player > div > div { background: url('图片地址') no-repeat center/cover } 花飞飞 发表于 2025-7-5 20:47
这方法太好了,一下子看清楚了结构。。
先是画了个原始的,再伪元素整出90.80各一层,这三层为一个单位 ...
CSS 貌似熟悉一点{:4_189:} 花飞飞 发表于 2025-7-5 20:55
阴影效果差别不是很大。。等会回来再看看
效果不同的 马黑黑 发表于 2025-7-5 20:57
要改装一下:只有最里层的 div 带图,比如第三个——
.player > div > div { background: url('图片地 ...
看出来了,这个底图可以改成不同的图形。。
多套几层自然往里缩小,你这创意是真的很厉害啊