CSS3 Gradient 渐变还能这么玩
浏览器支持两种类型的渐变:线性渐变 (linear-gradient),径向渐变 (radial-gradient)
渐变在 CSS 中属于一种 Image 类型,可以结合 background-image 属性使用
和图片不同的是,渐变不需要引入,而是由代码直接生成的,所以比图片更高效易用
一、简单线性渐变
基础语法:linear-gradient( angle, start-color, end-color )
其中 start-color 是渐变的初始颜色,end-color 是结束的颜色,这些颜色统称为色标
angle 是渐变的角度,可以是具体的角度(45deg),也可以是 to + 方向(to bottom right)
如:

background: linear-gradient(70deg, red, yellow);
渐变的色标也可以是多个:

background: linear-gradient(90deg, red, yellow, green, blue, black);
从上图可以看到,这些颜色会均匀的分布开
如果需要自定义间距,可以在色标后面接具体的位置
background: linear-gradient(90deg, red 40px, yellow 15%, green 95%, blue );

虽然位置可以用具体的长度(px),但为了自适应,最好是使用百分比
二、多图层的线性渐变
渐变作为一种 Image 类型,在 background-image 中使用的时候,是可以叠加的
如:
background-image: linear-gradient(90deg,rgba(255,0,0,.5), rgba(255,255,0,0.5)), linear-gradient(180deg,rgba(0,0,255,.5), rgba(0,255,0,0.5));

当然通常不需要叠加两个线性渐变
但如果是渐变结合底图的话...

background-image: linear-gradient(to right, rgba(255,255,255,0), rgba(255,255,255,1)), url(/assets/image.jpg);
就能实现这种图片的渐隐效果了
三、径向渐变
径向渐变和线性渐变的语法类似,添加两个色标就可以得到一个渐变
基础语法:radial-gradient( start-color, end-color )
如:

background-image: radial-gradient(red 5%, yellow 50%, green 90%);
径向渐变不需要定义方向,但可以定义的参数还有很多,比如形状、圆心位置、大小
比如上面径向渐变的容器是一个正方形,如果改成长方形,但采用同样的渐变:

可以看到渐变的形状变成了一个轴对齐的椭圆,如果希望依旧保持正圆,可以设定其形状
形状(shape)有两个可选参数:ellipse - 椭圆 (默认值)、circle - 正圆
background-image: radial-gradient(circle, red 5%, yellow 50%, green 90%);

还可以使用 形状(shape) + at + 位置(position) 的语句来描述圆心的位置
background-image: radial-gradient(circle at right bottom, red, yellow, green );

上面代码中的 right bottom 就是设置的圆心位置,也可以设置为具体的数值:circle at 0px 50px
四、径向渐变的半径
我们可以用下面四个关键字来描述渐变的半径:
| closest-side | 从圆心到最近的边之间的距离作为半径 |
| closest-corner | 从圆心到最近的角之间的距离作为半径 |
| farthest-side | 从圆心到最远的边之间的距离作为半径 |
| farthest-corner | 从圆心到最远的角之间的距离作为半径 |

除了这四个关键字之外,也可以使用具体的数值(百分数除外)作为半径的长度,比如 30px, 40vw
background-image: radial-gradient(30px 70px at center,red, yellow, green );

到这里已经介绍了径向渐变的三种参数:形状(shape)、圆心位置(position)、半径长度(length)
在使用的时候需要注意:圆心位置需要用 at 衔接,而形状和半径不用
1. 形状 + 圆心位置: radial-gradient( circle at center,red, yellow )
2. 形状 + 半径长度: radial-gradient( circle closest-side,red, yellow )
3. 半径长度 + 圆心位置: radial-gradient( closest-side at center, red, yellow )
4. 形状 + 半径长度 + 圆心位置: radial-gradient( ellipse farthest-side at right bottom ,red, yellow )
五、重复的渐变
如果需要实现一个重复的渐变,可以使用 repeating-linear-gradient 和 repeating-radial-gradient
先通过两张图来看看 repeating-linear-gradient 和 linear-gradient 的区别:
background-image: linear-gradient(90deg, red, yellow 20px, black 40px);

background-image: repeating-linear-gradient(90deg, red, yellow 20px, black 40px);

所谓重复渐变就是将原本的渐变无限循环,但如何判断从什么位置开始循环呢?或者说如何判断一段渐变的长度呢?
其关键因素在于色标的位置,比如上面的 red, yellow 20px, black 40px
就是在 0px 位置加了一个颜色为 red 的标记,20px 的位置加了一个 yellow 标记,40px 的位置加了一个 black 标记
所以这段渐变的长度为最后一个标记的位置,即 40px
基于这一点,就可以设计出很多好玩的渐变:

background-image: repeating-linear-gradient(45deg, white, white 5px, black 5px, black 10px);

background-image: repeating-radial-gradient(circle, white, white 5px, black 5px, black 10px);

background-image:
repeating-linear-gradient(45deg, #b50642, #b50642 10px, transparent 10px, transparent 20px),
repeating-linear-gradient(-45deg, #b50642, #b50642 10px, transparent 10px, transparent 20px),
linear-gradient(#9bdaf3, #9bdaf3);

background-color: #000;
background-image: repeating-linear-gradient(90deg, transparent, transparent 50px,
rgba(255, 127, 0, 0.25) 50px, rgba(255, 127, 0, 0.25) 56px, transparent 56px, transparent 63px,
rgba(255, 127, 0, 0.25) 63px, rgba(255, 127, 0, 0.25) 69px, transparent 69px, transparent 116px,
rgba(255, 206, 0, 0.25) 116px, rgba(255, 206, 0, 0.25) 166px),
repeating-linear-gradient(0deg, transparent, transparent 50px, rgba(255, 127, 0, 0.25) 50px,
rgba(255, 127, 0, 0.25) 56px, transparent 56px, transparent 63px, rgba(255, 127, 0, 0.25) 63px,
rgba(255, 127, 0, 0.25) 69px, transparent 69px, transparent 116px, rgba(255, 206, 0, 0.25) 116px,
rgba(255, 206, 0, 0.25) 166px),
repeating-linear-gradient(-45deg, transparent, transparent 5px, rgba(143, 77, 63, 0.25) 5px,
rgba(143, 77, 63, 0.25) 10px),
repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(143, 77, 63, 0.25) 5px,
rgba(143, 77, 63, 0.25) 10px);
// 上面这个渐变转自《使用CSS渐变》
六、用渐变做一个进度条
通常项目中需要使用 CSS 变量的时候,都会通过 Sass 和 Less 来定义
不过 CSS 本身也可以通过 -- 来声明变量(和 Sass 的 $ 类似),然后通过 var() 来调用
body {
--bg: red;
background-color: var(--bg);
}
在使用 -- 声明变量名时,需要注意区分变量名的大小写
而且 -- 只能用来声明属性值,不能作用属性名
var() 函数还可以接受第二个参数,作为第一个参数的默认值
如果我们将进度条的加载进度用一个 CSS 变量来表示,然后通过 js 实时修改这个变量,就能实现进度条的效果
话不多说,直接上干货:
// 这种方案是在掘金上看到的,可惜写博客的时候已经找不到链接,如果有知道的小伙伴请给我留言

--color: #67e035;
--position: 60%;
height: 30px;
background-color: #e4e4e4;
border-radius: 15px;
background-repeat: no-repeat;
background-size: 100%, var(--position);
background-image:
radial-gradient(closest-side circle at var(--position), var(--color), var(--color) 100%, transparent),
linear-gradient(var(--color), var(--color));
在项目中应用的时候,只需要实时修改 --position 的值,就可以实现进度条效果
参考文章:
CSS3 Gradient 渐变还能这么玩的更多相关文章
- CSS3 Gradient 渐变
转载自:http://www.w3cplus.com/content/css3-gradient CSS3发布很久了,现在在国外的一些页面上常能看到他的身影,这让我羡慕已久,只可惜在国内为了兼容IE, ...
- 深入理解CSS3 gradient斜向线性渐变——张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3639 一.问题没有想 ...
- CSS3的渐变-gradient
CSS3 Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变). CSS3的线性渐变 一.线性渐变在Mozilla下的应用 语法: -moz-li ...
- CSS3 Gradient线性渐变
废话小说,看代码 <!DOCTYPE html > <html > <head> <meta charset="utf-8"> &l ...
- CSS3之渐变Gradient
渐变是CSS3中比较好玩的属性,学会了渐变,那么可以做出非常炫的东东哟.CSS3 中渐变——Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变). ...
- 【01】CSS3 Gradient 分为 linear-gradient(线性渐变)和 radial-gradient(径 向渐变)(转)
CSS3 Gradient 分为 linear-gradient(线性渐变)和 radial-gradient(径 向渐变).而我们今天主要是针对线性渐变来剖析其具体的用法.为了更好的应用 CSS3 ...
- CSS3 Gradient
CSS3CSS3发布很久了,现在在国外的一些页面上常能看到他的身影,这让我羡慕已久,只可惜在国内为了兼容IE,让这一项技术受到很大的限制,很多Web前端人员都望而止步.虽然如此但还是有很多朋友在钻研C ...
- CSS 3 属性学习 —— 1. Gradient 渐变
CSS3 中渐变分为: 线性渐变(linear-gradient)和径向渐变(radial-gradient)两种. 1. 线性渐变 参数: <linear-gradient> = li ...
- CSS3 Gradient渐变效果
最近看到一遍关于渐变的文章,感觉很好,只是收藏感觉太可惜了,就转载了,好好学习! CSS3 Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变). ...
随机推荐
- php实现仿百度分页
本文主要和大家分享php实现仿百度分页的实例,先来看一下效果图. 基本策略 1, 首先要查询总记录数 2, 设置每页显示的数量并计算总页数 3, 增加一个get传值num代表当前访问的是哪一页,如果没 ...
- U-Mail企业邮箱如何导入授权文件
首先,由于U-Mail有Linux版本与Windows版本的区别,并且都非常简单,所以就有了下面的步骤: Windows版本 <点击快速跳转> Linux版本 <点击快速跳转> ...
- 用c语言基本实现wc.exe功能
网址:https://github.com/3216005214/wc.exe wc项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿 ...
- Java:编码与乱码问题
一.为什么要编码? 由于人类的语言太多,因而表示这些语言的符号太多,无法用计算机的一个基本的存储单元----byte来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解. byte一个字节即8 ...
- Java————迷宫问题
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. package algorithm_java; import java. ...
- 第50章:Java操作MongoDB-MongoDB和Spring
① Spring通过Spring Data MongoDB模块来集成和支持MongoDB ②Maven加入lib包 <dependency> <groupId>org.spri ...
- 第47章:MongoDB-用户管理
①用户管理 在MongoDB里面默认情况下只要是进行连接都可以不使用用户名与密码,因为要想让其起作用,则必须具备以下两个条件: ·条件一:服务器启动的时候打开授权认证: ·条件二:需要配置用户名和密码 ...
- Linux-VMware Workstation&CentOS-5.5-i386-bin-DVD安装
[2018年6月24日 22:55:47]VM7+CentOS5.5使用NAT方式连接互联网1.在VMWare的菜单:“VM→Setting...” 2.在VMWare的菜单:“Edit→Virtua ...
- <<君主论>>读后感
“<君主论>与<圣经>齐名,被称为邪恶的圣经,这本书的立论基础是人性本恶论,他所描述的人性之恶,主要是以西欧资本原始积累背景下的现实社会中人的各种丑恶现象为蓝本的.” 要是高中 ...
- ServiceStack.OrmLite 入门(一)
软件环境: Win7 x64 SP1 SQL Server 2008r2 Visual Studio 2017 Professional 目标:取出示例数据库 ReportServer 的表 Role ...