分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

如何用纯 CSS 创作一颗逼真的土星

发布时间:2023-09-06 02:25责任编辑:熊小新关键词:CSS

效果预览

在线演示

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。


https://codepen.io/comehope/pen/EpbaQX


可交互视频


此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。


请用 chrome, safari, edge 打开观看。


https://scrimba.com/p/pEgDAM/cBdyeTw


源代码下载


本地下载

每日前端实战系列的全部源代码请从 github 下载:


https://github.com/comehope/front-end-daily-challenges


代码解读


定义 dom,容器本身表示土星星球,其中的 ring 元素表示土星环:

<div class="saturn"> ???????<span class="rings"></span> ???</div>

居中显示:

body { ???margin: 0; ???height: 100vh; ???display: flex; ???align-items: center; ???justify-content: center; ???background-color: black;}

定义容器尺寸:

.saturn { ???width: 20em; ???height: 20em; ???font-size: 20px;}

画出土星星球(此为草稿,后面还会细化):

.saturn { ???position: relative;}.saturn::before,.saturn::after { ???content: ''; ???position: absolute; ???width: 9em; ???height: 9em; ???background: linear-gradient( ???????palegoldenrod 0%, ???????tan 10%, ???????burlywood 30%, ???????palegoldenrod 60%, ???????darkgray 100% ???); ???border-radius: 50%; ???left: calc((20em - 9em) / 2); ???top: calc((20em - 9em) / 2);}

画出土星环(此为草稿,后面还会细化):

.rings { ???position: absolute; ???width: inherit; ???height: inherit; ???background: radial-gradient( ???????transparent 35%, ???????dimgray 40%, ???????slategray 50%, ???????transparent 60%, ???????dimgray 60%, ???????slategray 70%, ???????transparent 70% ???);}

改变观察土星环的视角:

.rings { ???transform: rotateX(75deg);}

为了使土星呈现被土星环环绕的效果,把土星分为上下两半,使它们和土星环的图层顺序从底到顶依次为:星球的下半部、土星环、星球的上半部:

.saturn::before { ???clip-path: inset(50% 0 0 0);}.saturn::after { ???clip-path: inset(0 0 50% 0);}

至此,画出了土星的整体结构,接下来完善细节。
为土星环涂上丰富的渐变色:

.rings { ???background: radial-gradient( ???????rgba(24,19,25,0) 0%, ???????rgba(53,52,51,0) 34%, ???????rgba(55,54,52,1) 36%, ???????rgba(56,55,53,1) 37%, ???????rgba(68,67,66,1) 38%, ???????rgba(56,55,53,1) 39%, ???????rgba(68,67,66,1) 40%, ???????rgba(56,55,53,1) 41%, ???????rgba(87,77,76,1) 42%, ???????rgba(87,77,76,1) 44%, ???????rgba(113,110,103,1) 46%, ???????rgba(113,110,103,1) 48%, ???????rgba(113,98,93,1) 49%, ???????rgba(113,98,93,1) 51%, ???????rgba(122,115,105,1) 52%, ???????rgba(113,98,93,1) 53%, ???????rgba(113,98,93,1) 54%, ???????rgba(122,115,105,1) 55%, ???????rgba(106,99,89,1) 56%, ???????rgba(106,99,89,1) 58%, ???????rgba(79,76,76,0) 60%, ???????rgba(65,64,70,1) 61%, ???????rgba(65,64,70,1) 62%, ???????rgba(90,85,89,1) 63%, ???????rgba(78,74,73,1) 65%, ???????rgba(78,73,74,1) 67%, ???????rgba(78,73,74,0) 68%, ???????rgba(78,73,75,1) 69%, ???????rgba(78,73,75,1) 70%, ???????rgba(78,73,76,0) 71%, ???????rgba(77,72,76,0) 72%, ???????rgba(24,19,25,0) 100% ???);}

为星球涂上丰富的渐变色:

.saturn::before,.saturn::after { ???background: ???????linear-gradient( ???????????rgba(212,203,174,1) 0%, ???????????rgba(212,203,174,1) 10%, ???????????rgba(221,203,157,1) 15%, ???????????rgba(221,203,157,1) 17%, ???????????rgba(213,181,143,1) 22%, ???????????rgba(213,181,143,1) 26%, ???????????rgba(208,180,158,1) 32%, ???????????rgba(208,180,158,1) 36%, ???????????rgba(218,188,162,1) 37%, ???????????rgba(218,188,162,1) 39%, ???????????rgba(211,184,157,1) 41%, ???????????rgba(211,184,157,1) 49%, ???????????rgba(205,186,156,1) 51%, ???????????rgba(205,186,156,1) 52%, ???????????rgba(202,176,153,1) 53%, ???????????rgba(202,176,153,1) 65%, ???????????rgba(190,177,145,1) 68%, ???????????rgba(190,177,145,1) 80%, ???????????rgba(150,144,130,1) 91%, ???????????rgba(150,144,130,1) 95%, ???????????rgba(131,129,117,1) 97%, ???????????rgba(131,129,117,1) 100% ???????);}

再为星球增加光照效果:

.saturn::before,.saturn::after { ???background: ???????radial-gradient( ???????????circle at top, ????????????transparent 40%, ???????????black ???????), ???????radial-gradient( ???????????transparent 62%, ???????????black ???????), ???????linear-gradient( ???????????rgba(212,203,174,1) 0%, ???????????rgba(212,203,174,1) 10%, ???????????rgba(221,203,157,1) 15%, ???????????rgba(221,203,157,1) 17%, ???????????rgba(213,181,143,1) 22%, ???????????rgba(213,181,143,1) 26%, ???????????rgba(208,180,158,1) 32%, ???????????rgba(208,180,158,1) 36%, ???????????rgba(218,188,162,1) 37%, ???????????rgba(218,188,162,1) 39%, ???????????rgba(211,184,157,1) 41%, ???????????rgba(211,184,157,1) 49%, ???????????rgba(205,186,156,1) 51%, ???????????rgba(205,186,156,1) 52%, ???????????rgba(202,176,153,1) 53%, ???????????rgba(202,176,153,1) 65%, ???????????rgba(190,177,145,1) 68%, ???????????rgba(190,177,145,1) 80%, ???????????rgba(150,144,130,1) 91%, ???????????rgba(150,144,130,1) 95%, ???????????rgba(131,129,117,1) 97%, ???????????rgba(131,129,117,1) 100% ???????);}

最后,把画面旋转一点角度:

.saturn { ???transform: rotate(-15deg);}

大功告成!

原文地址:https://segmentfault.com/a/1190000015798428

如何用纯 CSS 创作一颗逼真的土星

原文地址:https://www.cnblogs.com/lalalagq/p/10078032.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved