使用CSS巧妙地制作背景色渐变动画实例

解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS属性,赶紧去补习一下吧。

不断更新,不断更新,不断更新,重要的事情说三遍。

正文从这里开始。有的时候,嗯,应该说某些特定场合,我们可能需要下面这样的动画效果,渐变 + animation :

使用CSS巧妙地制作背景色渐变动画实例

假设我们渐变的写法如下:

p {    background: linear-gradient(90deg,  #ffc700 0%, #e91e1e 100%);}

按照常规想法,配合 animation ,我们首先会想到在 animation 的步骤中通过改变颜色实现颜色渐变动画,那么我们的 CSS 代码可能是:

p {    background: linear-gradient(90deg,  #ffc700 0%, #e91e1e 100%);    animation: gradientChange 2s infinite;}@keyframes gradientChange  {    100% {        background: linear-gradient(90deg,  #e91e1e 0%, #6f27b0 100%);    }}

上面我们用到了三种颜色:

#ffc700 黄色

#e91e1e 红色

#6f27b0 紫色

最后,并没有我们预期的结果,而是这样的:

使用CSS巧妙地制作背景色渐变动画实例

我们预期的补间动画,变成了逐帧动画。 

也就是说,线性渐变是不支持动画 animation 的,那单纯的由一个颜色,变化到另外一个颜色呢?像下面这样:

p {    background: #ffc700;    animation: gradientChange 3s infinite alternate;}@keyframes gradientChange  {    100% {        background: #e91e1e;    }}

发现,单纯的单色值是可以发生渐变的:

So

总结一下,线性渐变(径向渐变)是不支持 animation 的,单色的 background 是支持的。

查找了下文档,在 background 附近区域截图如下:

使用CSS巧妙地制作背景色渐变动画实例

哪些 CSS 属性可以动画?,上面的截图是不完整的支持 CSS 动画的属性,完整的可以戳左边。

对于 background 相关的,文档里写的是支持 background 但是没有细说不支持 background: linear-gradient()/radial-gradient() 。猜测原因,可能是由于渐变中加入 animation 的变化对过于消耗性能。

那么是否我们想要的背景色渐变动画就无法实现了呢?下面我们就发散下思维看看有没有其他方式可以达到我们的目标。

通过 background-position 模拟渐变动画

上面哪些 CSS 属性可以动画的截图中,列出了与 background 相关还有 background-position ,也就是 background-position 是支持动画的,通过改变 background-position 的方式,可以实现渐变动画:

p {    background: linear-gradient(90deg,  #ffc700 0%, #e91e1e 50%, #6f27b0 100%);    background-size: 200% 100%;    background-position: 0 0;    animation: bgposition 2s infinite linear alternate;}@keyframes bgposition {    0% {        background-position: 0 0;    }    100% {        background-position: 100% 0;    }}

这里我们还配合了 background-size。首先了解下:

background-position:指定图片的初始位置。这个初始位置是相对于以 background-origin 定义的背景位置图层来说的。

background-size:设置背景图片大小。当取值为百分比时,表示指定背景图片相对背景区的百分比大小。当设置两个参数时,第一个值指定图片的宽度,第二个值指定图片的高度。

通过 background-size: 200% 100% 将图片的宽度设置为两倍背景区的宽度,再通过改变 background-position 的 x 轴初始位置来移动图片,由于背景图设置的大小是背景区的两倍,所以 background-position的移动是由 0 0 -> 100% 0 。最终效果如下:

通过 background-size 模拟渐变动画

既然 background-position 可以,那么另一个 background-size 当然也是不遑多让。与上面的方法类似,只是这次 background-position 辅助 background-size ,CSS 代码如下:

p {    background: linear-gradient(90deg,  #ffc700 0%, #e91e1e 33%, #6f27b0 66%, #00ff88 100%);    background-position: 100% 0;    animation: bgSize 5s infinite ease-in-out alternate;}@keyframes bgSize {    0% {        background-size: 300% 100%;    }    100% {        background-size: 100% 100%;    }}

效果如下:

通过改变 background-size 的第一个值,我将背景图的大小由 3 倍背景区大小向 1 倍背景区大小过渡,在背景图变换的过程中,就有了一种动画的效果。

而至于为什么要配合 background-position: 100% 0 。是由于如果不设置 background-position ,默认情况下的值为 0% 0%,会导致动画最左侧的颜色不变,像下面这样,不大自然:

使用CSS巧妙地制作背景色渐变动画实例

通过 transform 模拟渐变动画

上面两种方式虽然都可以实现,但是总感觉不够自由,或者随机性不够大。

不仅如此,上述两种方式,由于使用了 background-position 和 background-size,并且在渐变中改变这两个属性,导致页面不断地进行大量的重绘(repaint),对页面性能消耗非常严重,所以我们还可以试试 transfrom 的方法:

使用伪元素配合 transform 进行渐变动画,通过元素的伪元素 before 或者 after ,在元素内部画出一个大背景,再通过 transform 对伪元素进行变换:

p {    background: linear-gradient(90deg,  #ffc700 0%, #e91e1e 33%, #6f27b0 66%, #00ff88 100%);    background-position: 100% 0;    animation: bgSize 5s infinite ease-in-out alternate;}@keyframes bgSize {    0% {        background-size: 300% 100%;    }    100% {        background-size: 100% 100%;    }}

实现原理如下图所示:

使用CSS巧妙地制作背景色渐变动画实例

我们可以在任意 animation 动画过程中再加入 scale 、skew 、roate 等变换,让效果看上去更加逼真随机。效果如下:

上面列出来的只是部分方法,理论而言,伪元素配合能够产生位移或者形变的属性都可以完成上面的效果。我们甚至可以运用不同的缓动函数或者借鉴蝉原则,制作出随机性十分强的效果。

当然,本文罗列出来的都是纯 CSS 方法,使用 SVG 或者 Canvas 同样可以制作出来,而且性能更佳。感兴趣的读者可以自行往下研究。

运用背景色渐变动画

背景色渐变动画具体可以运用在什么地方呢,稍微举个例子。

背景色渐变过渡实现按钮的明暗变化

使用css巧妙地制作背景色渐变动画实例

效果如下:

除此之外,在背景板凸显文字,让一些静态底图动起来吸引眼球等地方都有用武之地。

到此本文结束,如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

以上就是使用CSS巧妙地制作背景色渐变动画实例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1608228.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月23日 21:37:25
下一篇 2025年12月23日 21:37:35

相关推荐

  • CSS全兼容的多列均匀布局问题解决方法

    解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 css 属性,赶紧去补习一下吧。 不断更新,不断更新,不断更新,重要的事情说三遍。 6、全兼容的多列均匀布局问题 如何实现下列这种多列均匀布局(图中直线为了展示容器宽度,不算在内): 法一:display:flex CSS3…

    2025年12月23日 好文分享
    000
  • CSS巧妙的实现CSS斜线的方法

    解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 css 属性,赶紧去补习一下吧。 不断更新,不断更新,不断更新,重要的事情说三遍。   8、纯CSS的导航栏Tab切换方案 不用 Javascript,使用纯 CSS 方案,实现类似下图的导航栏切换: 立即学习“前端免费学习…

    2025年12月23日
    000
  • 解析CSS3 transition浏览器兼容性

    1、兼容性 根据canius,transition 兼容性如下图所示: p{width:100px;height:100px;background:blue;transition:width 2s;-moz-transition:width 2s; /* Firefox 4 */-webkit-tr…

    2025年12月23日 好文分享
    000
  • 利用CSS实现div水平垂直居中

    实现居中的方案有很多,这里介绍下纯css使用absolute配合margin的方案。 1. p宽高固定 width: 400px;height: 200px;position: absolute;top: 50%;left: 50%;margin-top: -100px;margin-left: -…

    好文分享 2025年12月23日
    000
  • css中background相关属性

    background-origin: 规定 background-position 属性相对于容器的哪一部分来定位。   padding-box 背景图像相对于内边距框来定位;(默认)   border-box背景图像相对于边框盒来定位;   content-box背景图像相对于内容框来定位。 ba…

    好文分享 2025年12月23日
    000
  • CSS中清除浮动的几种方法

    一、clear:both; 这种方法有一个问题:margin失效。 二、隔墙法 /*墙*/ cl{ clear: both; } .hl{ height: 16px; } 演化出的“内墙法” /*两个p都浮动,所以p不会被撑出高*/ /*在家里建一堵墙就能让儿子给p撑出高*/ 注意:一般不使用此方法…

    好文分享 2025年12月23日
    000
  • CSS常用的一些属性详解

    text-align: center”>CSS常用属性 ☛关于css属性个人建议查看手册更加详细方便,我这里就几种常用属性进行分类并简单取几个常用属性值,仅供跟我一样刚学习前端的人作为入门而用。  1.字体样式 字体的缩写,写法是font:font-style|| font-var…

    好文分享 2025年12月23日
    000
  • 关于CSS的优先级和继承问题

    text-align: center”>CSS的优先级和继承问题 ★css的冲突,即优先级  css本身的设置可以同时应用多个样式在同一个元素,此时样式之间可能出现冲突而达不到用户所想要的效果。★解决css冲突的优先级规则:  ● css层叠样式表引入方法的优先级:内联式>内…

    好文分享 2025年12月23日
    000
  • CSS如何实现两端对齐详解

    前面的话   两端对齐在导航nav的制作中非常常用。本文将详细介绍css两端对齐的3种实现方式 flex   弹性盒模型flex作为强大的弹性布局方式,可以hold住大部分的布局效果,当然也包括两端对齐。可以使用主轴对齐justify-content的两端对齐属性space-between just…

    好文分享 2025年12月23日
    000
  • css样式之border-radius详解

    border-radius 属性设置边框的园角     可能的值:像素,百分比 扩展延伸 html代码 css代码 p { height: 200px; width: 200px; border: 2px solid #a72525; border-radius: 10px;} 结果 立即学习“前端…

    好文分享 2025年12月23日
    000
  • 使用css新单位vw,vh在响应式设计中的应用方法

    考虑到未来响应式设计的开发,如果你需要,浏览器的高度也可以基于百分比值调整。但使用基于百分比值并不总是相对于浏览器窗口的大小定义的最佳方式,比如字体大小不会随着你窗口改变而改变,如今css3引入的新单位明确解决这一问题。 css3引入的”vw”和”vh”基于宽度/高度相对于窗口大小,”vw”=”vi…

    好文分享 2025年12月23日
    000
  • 使用css给未知宽高的元素添加背景图片方法

    给页面的某一元素添加背景图片,当没有指定具体的宽高时,是无法显示效果的 1、添加背景图 HTML代码: *{margin:0; padding:0;} #wrap{ width:100%; height:auto; background:url(‘images/page.jpg’) no-repea…

    2025年12月23日 好文分享
    000
  • CSS进阶之CSS的技巧分享

    如何设置水平居中? 分两种情况 行内元素与块级元素     1.行内元素(如图片 文字) div.textcenter{ text-align:center; } hello joe!     2.块级元素     块级元素的水平居中又分为两种 定宽块状元素 和 非定宽块状元素 立即学习“前端免费学…

    2025年12月23日
    000
  • CSS进阶之布局模型实例详解

    css中含有三种布局模型 流动模型flow 浮动模型float 层模型layer 流动模型 网页默认的布局模型 特点有两个   1.块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%。实际上,块状元素都会以行的形式占据位置。 h1,p,div{ b…

    2025年12月23日 好文分享
    000
  • box-shadow IE8兼容处理方法介绍

    根据canisue(http://caniuse.com/#search=box-shadow),box-shadow兼容性如下图所示: 测试代码: * { margin: 0; padding: 0; } #header { width: 400px; height: 400px; margin:…

    2025年12月23日 好文分享
    000
  • border-radius IE8兼容处理方法介绍

    根据canisue(http://caniuse.com/#search=border-radius),border-radius兼容性如下图所示: 测试代码: * { margin: 0; padding: 0; } #header { width: 400px; height: 400px; m…

    2025年12月23日 好文分享
    000
  • CSS左边竖条的实现方法代码

    解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS 属性,赶紧去补习一下吧。 不断更新,不断更新,不断更新,重要的事情说三遍。 题目1、下面这个图形,只使用一个标签,可以有多少种实现方式: 假设我们的单标签是一个 p: Studio Global Studio Glo…

    2025年12月23日 好文分享
    000
  • 使用CSS完美实现垂直水平居中的6种方法介绍

    前言 由于HTML语言的定位问题,在网页中实现居中也不是如word中那么简单,尤其在内容样式多变,内容宽高不定的情况下,要实现合理的居中也是颇考验工程师经验的。网上讲居中的文章很多,但是都不太完整,所以小茄今天就来总结下纯CSS实现居中的各种方案。学疏才浅,文中如有不当之处,万望指出! 6种方案 1…

    2025年12月23日 好文分享
    000
  • 使用CSS创建各种不同的图形形状的方法

    介绍 我们学习如何使用简单的CSS来创建不同类型的平面图形。 使用代码 矩形 .rectangle { width: 250px; height: 150px; background-color: #6DC75F;} 三角形 .triangleUp { border-left: 75px solid…

    2025年12月23日 好文分享
    000
  • 分享12个CSS牛逼的技巧

    下面这些css高级技巧 left-2 list-paddingleft-2″> 使用 :not() 在菜单上应用/取消应用边框 给body添加行高 所有一切都垂直居中 逗号分隔的列表 使用负的 nth-child 选择项目 对图标使用SVG 优化显示文本 对纯CSS滑块使用 max…

    好文分享 2025年12月23日
    000

发表回复

登录后才能评论
关注微信