CSS巧用渐变实现高级感背景光动画


Posted in HTML / CSS onDecember 06, 2021

实现

这个效果想利用 CSS 完全复制是比较困难的。CSS 模拟出来的光效阴影相对会 Low 一点,只能说是尽量还原。

其实每组光都基本是一样的,所以我们只需要实现其中一组,就几乎能实现了整个效果。

观察这个效果:

CSS巧用渐变实现高级感背景光动画

它的核心其实就是角向渐变 -- conic-gradient(),利用角向渐变,我们可以大致实现这样一个效果:

<div></div>
div {

    width: 1000px;

    height: 600px;

    background:

        conic-gradient(

            from -45deg at 400px 300px,

            hsla(170deg, 100%, 70%, .7),

            transparent 50%,

            transparent),

            linear-gradient(-45deg, #060d5e, #002268);

}

看看效果:

CSS巧用渐变实现高级感背景光动画

有点那意思了。当然,仔细观察,渐变的颜色并非是由一种颜色到透明就结束了,而是颜色 A -- 透明 -- 颜色 B,这样,光源的另一半并非就不会那么生硬,改造后的 CSS 代码:

div {
    width: 1000px;
    height: 600px;
    background:
        conic-gradient(
            from -45deg at 400px 300px,
            hsla(170deg, 100%, 70%, .7),
            transparent 50%,
            hsla(219deg, 90%, 80%, .5) 100%),
            linear-gradient(-45deg, #060d5e, #002268);
}

我们在角向渐变的最后多加了一种颜色,得到观感更好的一种效果:

CSS巧用渐变实现高级感背景光动画

emm,到这里,我们会发现,仅仅是角向渐变 conic-gradient() 是不够的,它无法模拟出光源阴影的效果,所以必须再借助其他属性实现光源阴影的效果。

这里,我们会很自然的想到 box-shadow。这里有个技巧,利用多重 box-shadow, 实现 Neon 灯的效果。

我们再加个 div,通过它实现光源阴影:

<div class="shadow"></div>
.shadow {
    width: 200px;
    height: 200px;
    background: #fff;
    box-shadow: 
        0px 0 .5px hsla(170deg, 95%, 80%, 1),
        0px 0 1px hsla(170deg, 91%, 80%, .95),
        0px 0 2px hsla(171deg, 91%, 80%, .95),
        0px 0 3px hsla(171deg, 91%, 80%, .95),
        0px 0 4px hsla(171deg, 91%, 82%, .9),
        0px 0 5px hsla(172deg, 91%, 82%, .9),
        0px 0 10px hsla(173deg, 91%, 84%, .9),
        0px 0 20px hsla(174deg, 91%, 86%, .85),
        0px 0 40px hsla(175deg, 91%, 86%, .85),
        0px 0 60px hsla(175deg, 91%, 86%, .85);
}

CSS巧用渐变实现高级感背景光动画

OK,光是有了,但问题是我们只需要一侧的光,怎么办呢?裁剪的方式很多,这里,我介绍一种利用 clip-path 进行对元素任意空间进行裁切的方法:

.shadow {
    width: 200px;
    height: 200px;
    background: #fff;
    box-shadow: .....;
    clip-path: polygon(-100% 100%, 200% 100%, 200% 500%, -100% 500%);
}

原理是这样的:

CSS巧用渐变实现高级感背景光动画

这样,我们就得到了一侧的光:

CSS巧用渐变实现高级感背景光动画

这里,其实 CSS 也是有办法实现单侧阴影的,但是实际效果并不好,最终采取了上述的方案。

接下来,就是利用定位、旋转等方式,将上述单侧光和角向渐变重叠起来,我们就可以得到这样的效果:

CSS巧用渐变实现高级感背景光动画

这会,已经挺像了。接下来要做的就是让整个图案,动起来。这里技巧也挺多的,核心还是利用了 CSS @Property,实现了角向渐变的动画,并且让光动画和角向渐变重叠起来。

我们需要利用 CSS @Property 对代码渐变进行改造,核心代码如下:

<div class="wrap">
    <div class="shadow"></div>
</div>
@property --xPoint {
  syntax: '<length>';
  inherits: false;
  initial-value: 400px;
}
@property --yPoint {
  syntax: '<length>';
  inherits: false;
  initial-value: 300px;
}

.wrap {
    position: relative;
    margin: auto;
    width: 1000px;
    height: 600px;
    background:
        conic-gradient(
            from -45deg at var(--xPoint) var(--yPoint),
            hsla(170deg, 100%, 70%, .7),
            transparent 50%,
            hsla(219deg, 90%, 80%, .5) 100%),
            linear-gradient(-45deg, #060d5e, #002268);
    animation: pointMove 2.5s infinite alternate linear;
}

.shadow {
    position: absolute;
    top: -300px;
    left: -330px;
    width: 430px;
    height: 300px;
    background: #fff;
    transform-origin: 100% 100%;
    transform: rotate(225deg);
    clip-path: polygon(-100% 100%, 200% 100%, 200% 500%, -100% 500%);
    box-shadow: ... 此处省略大量阴影代码;
    animation: scale 2.5s infinite alternate linear;
}
 
@keyframes scale {
    50%,
    100% {
        transform: rotate(225deg) scale(0);
    }
}

@keyframes pointMove {
    100% {
        --xPoint: 100px;
        --yPoint: 0;
    }
}

这样,我们就实现了完整的一处光的动画:

CSS巧用渐变实现高级感背景光动画

我们重新梳理一下,实现这样一个动画的步骤:

  1. 利用角向渐变 conic-gradient 搭出基本框架,并且,这里也利用了多重渐变,角向渐变的背后是深色背景色;
  2. 利用多重 box-shadow 实现光及阴影的效果(又称为 Neon 效果)
  3. 利用 clip-path 对元素进行任意区域的裁剪
  4. 利用 CSS @Property 实现渐变的动画效果

剩下的工作,就是重复上述的步骤,补充其他渐变和光源,调试动画,最终,我们就可以得到这样一个简单的模拟效果:

CSS巧用渐变实现高级感背景光动画

由于原效果是 .mp4,无法拿到其中的准确颜色,无法拿到阴影的参数,其中颜色是直接用的色板取色,阴影则比较随意的模拟了下,如果有源文件,准确参数,可以模拟的更逼真。

完整的代码你可以戳这里:CodePen -- iPhone 13 Pro Gradient

最后

本文更多的是图一乐呵,实际中制作上述效果肯定是有更为优雅的解法,并且利用 CSS 模拟的话,也应该有更好的方法,这里我仅仅是抛砖引玉,过程中的 1、2、3、4 技巧本身有一些还是值得借鉴学习的。

以上就是CSS巧用渐变实现高级感背景光动画 的详细内容,更多关于CSS渐变背景动画的资料请关注三水点靠木其它相关文章!

 
HTML / CSS 相关文章推荐
纯CSS3实现质感细腻丝滑按钮
Mar 09 HTML / CSS
CSS3教程(4):网页边框和网页文字阴影
Apr 02 HTML / CSS
10 套华丽的CSS3 按钮小结
Oct 03 HTML / CSS
纯css3显示隐藏一个div特效的具体实现
Feb 10 HTML / CSS
CSS 3.0 结合video视频实现的创意开幕效果
Jun 01 HTML / CSS
使用CSS3制作版头动画效果
Dec 24 HTML / CSS
Html5新增标签与样式及让元素水平垂直居中
Jul 11 HTML / CSS
检测浏览器对HTML5和CSS3支持度的方法
Jun 25 HTML / CSS
整理HTML5移动端开发的常用触摸事件
Apr 15 HTML / CSS
canvas 实现 github404动态效果的示例代码
Nov 15 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
Mar 15 HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
Sep 19 HTML / CSS
在HTML中引入CSS的几种方式介绍
div与span之间的区别与使用介绍
Unicode中的CJK(中日韩统一表意文字)字符小结
Dec 06 #HTML / CSS
HTML5 新增内容和 API详解
Nov 17 #HTML / CSS
Html5同时支持多端sdk的小技巧
Nov 17 #HTML / CSS
使用canvas仿Echarts实现金字塔图的实例代码
CSS中妙用 drop-shadow 实现线条光影效果
You might like
PHP XML操作类DOMDocument
2009/12/16 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
python使用chardet判断字符串编码的方法
2015/03/13 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
python实现猜拳游戏项目
2020/11/30 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
幼教毕业生自我鉴定
2014/01/12 职场文书
什么样的创业计划书可行性高?
2014/02/01 职场文书
《春雨》教学反思
2014/04/24 职场文书
基层党员公开承诺书
2014/05/29 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
骨干教师考核评语
2014/12/31 职场文书
圆明园观后感
2015/06/03 职场文书
如何利用React实现图片识别App
2022/02/18 Javascript