CSS渐变的简单使用

前言

重拾css后的文章,在观看了慕课网上的视频《重拾CSS的乐趣》中,看到了一些有意思的css效果。想起当初自己初学CSS3时画的哆啦A梦,总结了一番css制作的各种图形。渐变效果是在实现弧边三角的时候学习

一、渐变简介

渐变是两种或多种颜色之间的平滑过渡。在创建渐变的过程中,可以指定多个中间颜色值,这个值称为色标。每个色标包含一种颜色和一个位置,浏览器从每个色标的颜色淡出到下一个,以创建平滑的渐变。

渐变可以应用于任何使用背景图片的地方。这意味着在CSS样式中,渐变相当于背景图片,在理论上可在任何使用url() 值的地方采用,比如最常见的background-image、list-style-type以及前面介绍的CSS3的图像边框属性border-image。但直到目前为止,仅在背景图片中得到最完美的支持。

二、线性渐变

沿着一条直线的颜色过渡效果:从左侧到右侧、从右侧到左侧、从顶部到底部、从底部到顶部或着沿任何任意轴:

1. 基础语法

最新的浏览器都已经支持标准写法

1
2
3
4
5
-webkit-linear-gradient([<point>||<angle>,]?<stop>,<stop>[,<stop>]*) //webkit引擎Chrome
-moz-linear-gradient([<point>||<angle>,]?<stop>,<stop>[,<stop>]*) //Gecko引擎Firefox
-o-linear-gradient([<point>||<angle>,]?<stop>,<stop>[,<stop>]*) //Presto引擎Opera
-ms-linear-gradient([<point>||<angle>,]?<stop>,<stop>[,<stop>]*) //Trident引擎IE
linear-gradient([[<angle> | to <side-or-corner> ],]?<color-stop>[,<color-stop>]+)//w3c标准

其中,point指向、angle角度代表方向,stop、color-stop代表各个颜色。

关键字写法

1
2
3
4
5
background-image: -webkit-linear-gradient(left,blue,white);
background-image: -moz-linear-gradient(left,blue,white);
background-image: -o-linear-gradient(left,blue,white);
background-image: -ms-linear-gradient(left,blue,white);
background-image: linear-gradient(to right,blue,white);

有前缀的,第一个参数表示起点,第二个参数表示起点颜色,第三个参数表示终点颜色
标准写法,第一个参数表示方向,第二个参数表示起点颜色,第三个参数表示终点颜色

关键字有:left、right、top、bottom 对两者都有效
left top、left bottom、right top、right bottom等组合只对标准有效

角度写法

有前缀的:

  1. 0deg、360deg、-360deg→left
  2. 90deg、-270deg →bottom
  3. 180deg -180deg → right
  4. 270deg -90deg → top

标准写法:

  1. 0deg、360deg、-360deg→to top
  2. 90deg、-270deg →to right
  3. 180deg -180deg → to bottom
  4. 270deg -90deg → to left

多色渐变

在第二与第三个参数之间,即起点颜色与终点颜色之间,添加多个颜色参数

1
2
3
4
5
background-image: -webkit-linear-gradient(left,blue,red,white);
background-image: -moz-linear-gradient(left,blue,red,white);
background-image: -o-linear-gradient(left,blue,red,white);
background-image: -ms-linear-gradient(left,blue,red,white);
background-image: linear-gradient(to right,blue,red,white);

2. 渐变长度

语法

只需在你定义的颜色后面加上空格,再加上长度,如百分比、px等。

1
background-image: linear-gradient(270deg,blue 0%,red 14%,green 100%);

效果如下:

0%到14%是蓝到红的渐变,14%到100%是红到绿的渐变。

注意:如果定义的长度没有占满整个宽度或高度,那么起点或终点位置的空缺会由最近的颜色的纯色填满。

如:

1
background-image: linear-gradient(270deg,blue 10%,red 14%,green 80%);

效果如下:

3. 特殊思考

颜色点被称为色标。

  • 如果两个色标颜色是一样的,那么,就不会发生渐变,而是纯色。
  • 如果两个不同颜色的点,不断接近,直至重叠,渐变也就逐渐消失了。

由此,得出了类似斑马线的彩色条纹,中间没有渐变效果。

1
2
3
4
5
6
7
8
background-image: linear-gradient(
270deg,
blue 0%,blue 20%,
red 20%,red 40%,
green 40%,green 60%,
orange 60%,orange 80%,
yellow 80%,yellow 100%
);

效果如下:

实践CodePen例子:线性渐变

三、径向渐变

CSS3径向渐变是圆形或椭圆形渐变。颜色不再沿着一条直线轴变化,而是从一个起点朝所有方向混合。比线性渐变更复杂。

1. 基础语法

最新的浏览器都已经支持标准写法

1
2
3
4
5
-webkit-radial-gradient([<position> || <angle>,]?[<shape> || <size>,]?<color-stop>,<color-stop>[,<color-stop>]*);//webkit引擎Chrome
-moz-radial-gradient([<position> || <angle>,]?[<shape> || <size>,]?<color-stop>,<color-stop>[,<color-stop>]*);//Gecko引擎Firefox
-o-radial-gradient([<position> || <angle>,]?[<shape> || <size>,]?<color-stop>,<color-stop>[,<color-stop>]*); //Presto引擎Opera
-ms-radial-gradient([<position> || <angle>,]?[<shape> || <size>,]?<color-stop>,<color-stop>[,<color-stop>]*); //Trident引擎IE
radial-gradient([[<shape> || <size>] [at <position>]?,| at <position>,]?<color-stop>[,<color-stop>]+);//w3c标准

其中,postion、angle代表方向,shape、size代表形状大小,color-stop代表各个颜色。

参数

  • position
    :用长度值指定径向渐变圆心的横坐标或纵坐标。可以为负值。
    :用百分比指定径向渐变圆心的横坐标或纵坐标。可以为负值。
    left:设置左边为径向渐变圆心的横坐标值。
    center:设置中间为径向渐变圆心的横坐标值或纵坐标。
    right:设置右边为径向渐变圆心的横坐标值。
    top:设置顶部为径向渐变圆心的纵标值。
    bottom:设置底部为径向渐变圆心的纵标值。

  • shape
    没有默认值,会根据容器选择。
    circle:如果大小相等,那么径向渐变是一个圆形,也就是用来指定圆形的径向渐变。
    ellipse:如果大小不相等,那么径向渐变是一个椭圆形,也就是用来指定椭圆形的径向渐变。

  • size
    closest-side:指定径向渐变的半径长度为从圆心到离圆心最近的边;
    closest-corner:指定径向渐变的半径长度为从圆心到离圆心最近的角;
    farthest-side:指定径向渐变的半径长度为从圆心到离圆心最远的边;
    farthest-corner:指定径向渐变的半径长度为从圆心到离圆心最远的角;默认值
    :指定圆的直径或椭圆的水平和垂直直径。

用法

  • 最简单
    标准写法与加前缀一样
    1
    background-image: radial-gradient(red,blue);

注意:此时形状会根据你的容器来选择圆形或者椭圆。

  • 加上形状
    标准写法与加前缀一样
    1
    2
    background-image: radial-gradient(circle,red,blue);//圆形
    background-image: radial-gradient(ellipse,red,blue);//椭圆

注意:只加形状的话,在正方形容器中都会显示为圆形

  • 加上大小
    加前缀写法测试无法添加长度或百分比大小,会与position设置位置的方式冲突,只能添加关键字。
    下面以标准写法为例,大小可以使用长度,百分比,关键字。
    1
    2
    background-image: radial-gradient(20px,red,blue);
    background-image: radial-gradient(20px 50px,red,blue);

一个值表示圆形直径,两个值表示水平和垂直直径。

注意:这时,添加关键字circle和ellipse的话,在大小的前面后面是一样的,但是必须以空格形式,如ellipse 20px 50px,且circle对应一个值和ellipse两个值,不然会出错。个人认为没必要添加。

  • 加上方向
    标准写法与加前缀写法有所差别,方向可以使用长度,百分比,关键字。
    1
    2
    background-image:-webkit-radial-gradient(20px 20px,red,blue);
    background-image: radial-gradient(20px at 20px 20px,red,blue);

注意:加前缀写法的形状要写在方向的后面,如:20px 20px,circle,以逗号隔开。标准写法的形状大小写在方向的前面,如:ellipse 20px 50px at 20px 20px,以空格隔开。

位置图

  • 多色渐变
    标准写法与加前缀写法一样
    1
    background-image: radial-gradient(circle,red,blue,yellow,orange,green);

渐变长度

同前面的线性渐变。

特殊的思考

如前面的线性渐变,通过设置色标的距离,能够做出特别的效果。

  • 同心彩环
    1
    2
    3
    4
    5
    6
    7
    8
    background-image: radial-gradient(
    circle,
    red 0%,red 20%,
    blue 20%,blue 40%,
    yellow 40%,yellow 60%,
    orange 60%,orange 80%,
    green 80%,green 100%
    );

效果如下:

  • 挖掉圆
    1
    2
    3
    4
    5
    background-image: radial-gradient(
    circle,
    rgba(255,255,255,0) 0%,rgba(255,255,255,0) 50%,
    rgba(0,255,0,1) 50%,rgba(0,255,0,1) 100%
    );

设置透明度使得其不会覆盖其他元素。

效果如下:

  • 弧边三角形
    1
    2
    3
    4
    5
    background-image: radial-gradient(
    at top right,
    rgba(0,0,0,0) 71%,rgba(0,0,0,0) 71%,
    blue 0,blue 0
    );

效果如下:

实践CodePen例子:径向渐变

四、重复渐变

通过repeating-linear-gradientrepeating-radial-gradient可以直接实现重复的渐变效果。

在没有重复渐变的属性之前,主要通过重复背景图像(使用background-repeat)创建线性重复渐变,但是没有创建重复的径向渐变的类似方式。

1. 重复线性渐变

语法跟线性渐变是一样的,但是使用百分比设置色标的位置没有多大的意义,但使用像素和其他的单位,重复线性渐变可以创建一些很酷的效果。

1
background-image: repeating-linear-gradient(red,green 40px, orange 80px);

效果如下图所示:

2. 重复径向渐变

1
background-image: repeating-radial-gradient(red,green 40px, orange 80px);

效果如下图所示:

3. 实例——制作记事本纸张效果

每张纸都有横线条,左边有两条竖线从顶部延伸到底部。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
html,
body {
margin: 0;
padding: 0;
height: 100%;
}
body {
background: -webkit-repeating-linear-gradient(to top, #f9f9f9, #f9f9f9 29px, #ccc 30px);
background: repeating-linear-gradient( to top, #f9f9f9, #f9f9f9 29px, #ccc 30px );
background-size: 100% 30px;
position: relative;
}
body:before {
content: "";
display: inline-block;
height: 100%;
width: 4px;
border-left: 4px double #FCA1A1;
position: absolute;
left: 30px;
}

效果如下:

参考

大漠老师的文章:1. 再说CSS3渐变——线性渐变 2. 再说CSS3渐变——径向渐变

说明:原文年代较为久远,有部分不符合实践,已经在本文中修改,望采纳。

生命的意义不仅是活着,而是我们给别人的生命带来了何种不同。

----------本文结束感谢您的阅读----------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%