Skip to content

线性渐变 ​

CSS 3 为我们提供了一个渐变生成器,专门用来生成渐变图片。

css
 .test {
            width: 100px;
            height: 100px;
            background-image: linear-gradient(green, yellow);
        }

e25542840e4f3365e38102ede6497dc0_MD5

通过 linear-gradient 这个渐变生成器,就可以生成一个线性渐变的,里面传入的就是渐变的颜色,可以看见,默认是从上往下的渐变,我们也可以改变其方向

css
 .test {
            width: 100px;
            height: 100px;
            background-image: linear-gradient(to right,green, yellow);
        }

8561040a8036ab8ffd054722a8988262_MD5

通过第一个参数,就可以改变其方向,很显然,如果不写第一个参数,默认值应该是 to bottom。当然,我们可以写两个方向让它斜过来。

css
 .test {
            width: 100px;
            height: 100px;
            background-image: linear-gradient(to right bottom,green, yellow);
        }

c870f82d0d78ba46f850e0e62da8c6a4_MD5

这样就形成了一个朝右下的渐变

除了填写方向以外,我们还可以填写度数

css
 .test {
            width: 100px;
            height: 100px;
            background-image: linear-gradient(0deg,green, yellow);
        }

6f9a6060f0f7c5a1d950db39791f4631_MD5

通过 deg 单位可以写具体度数,显然,0deg 就是朝上,这个和钟表的方向其实是一样的,0 度朝上,90 度朝右,180 度朝下,270 度朝右,当然也可以为负,负 90 度和 270 度是等价的。

我们看到,这个过渡是从头到尾均匀过渡的,其实还可以这样写

css
 .test {
            width: 100px;
            height: 100px;
            background-image: linear-gradient(270deg, green 20px, yellow 40px);
        }

这样写就是说从 0 到 20 像素全是绿色,20 到 40 像素是过渡色,40 像素以后全是黄色

css
 .test {
            width: 100px;
            height: 100px;
            background-image: linear-gradient(270deg, green 20px, yellow 40px,blue 60px, pink 80px);
        }

这样写很多颜色,其实就是从 0 到 20 像素全是绿色,从 20 到 40 像素过渡到黄色,从 40 到 60 像素过渡到蓝色,从 60 到 80 像素过渡到粉色,然后 80 像素以后全是粉色。这个其实就很像那种关键帧,规定几个像素点的颜色值,然后 CSS 就会自动去渐变。

如果要保持一个颜色,只需要设置两个相同的值即可,比如让 20 px 和 40 px 都设置为一个颜色,就可以在 20 和 40 之间保持这个颜色,除此之外,还有一种方式,就是在颜色参数填入两个值:background-image: linear-gradient(270deg, green 20px 50px,blue 60px, pink 80px);,在这个例子中,20 像素到 50 像素将会是纯绿色

css
.box {
	width: 100px;
	height: 100px;
	background-image: linear-gradient(green 0%, red 100%);
}

像这样设置百分比也是可以的

除了基础的现象渐变外,还有重复线性渐变

css
.box {
	width: 100px;
	height: 100px;
	background-image: linear-gradient(skyblue 0%, yellow 10%);
}

这里推荐三个渐变配色网站,以帮助我们写出好看的渐变配色:

径向渐变 ​

除了这种线性的渐变,还有一种是径向渐变,即 radial-gradient()

css
 .test {
            width: 100px;
            height: 100px;
            background-image: radial-gradient(green 20px, yellow 30px, blue 40px, pink 50px);
        }

2a871b3f7c4db0271d15fa0d653b2508_MD5

可以看到,这是一个从内向外的渐变,是这种扩散渐变,这其实就是一个从一个点向外扩散的渐变,既然是一个圆,那我们就一定可以设置圆心。

css
 .test {
            width: 100px;
            height: 100px;
            background-image: radial-gradient(at left top ,green 20px, yellow 30px, blue 40px, pink 50px);
        }

9555bb970a036f9bdf157ac8ec890ed0_MD5

使用 at 关键字可以设置圆心位置,可以使用这样的单词,也可以使用百分比或者像素

css
.test {
            width: 100px;
            height: 100px;
            background-image: radial-gradient(at 10% 20%, green 20px, yellow 30px, blue 40px, pink 50px);
        }

325a39fb68286384dc2edae94974bd99_MD5

我们将这个东西调成长方形,它就会变成一个椭圆

5c16f8f0e3acba6ae9a8cec2d60cfd75_MD5

如果我要让它保持一个圆形,就可以在 at 前面加上 circle

css
.test {
            width: 100px;
            height: 100px;
            background-image: radial-gradient(circle at 10% 20%, green 20px, yellow 30px, blue 40px, pink 50px);
        }

867bbe295d0db0091eb879aa38fd67f1_MD5

除此之外,在 circle 和 at 中间,还可以填入放射半径,或者说放射到哪里结束,实际上第一个参数就规定了放射形状、放射半径、放射开始位置这些信息,而后面的参数则是一个一个颜色游标,规定到哪里应该是什么颜色。

关于放射半径,如果填入的是一个值,例如 50 px,那么此时由于只有一个,所以一定是圆形,如果是两个值,那么一定是椭圆,所以放射半径实际上就可以替代 circle 关键字。

b90b6db2ec6a319ae4c14cad39840bbc_MD5

除了这两个渐变之外,还有 repeating-linear-gradient(),和 repeating-radial-gradient(), 这两个的参数和前面的一模一样,唯一的区别就是 repeating,如果是 linear-gradient,在最后一个颜色之后会一直保持这个颜色,但如果使用 repeating-linear-gradient(),则会不断重复这个渐变效果,就像下图这样。
![Pasted image 20240119230954](/notes-assets/04.CSS3/assets/Pasted image 20240119230954.png)

关于颜色的写法

CSS 3 提供了 rgba 这种颜色写法,这个相信读者都用过,除此之外还提供了 hsl 和 hsla 这种写法,有兴趣自己看文档
hsl() - CSS:层叠样式表 | MDN

currentColor

currentColor 是 CSS 3 提供的一个变量,它表示的就是当前元素的 color 属性的值,如果我要在某个地方使用到当前元素的 color 值,就直接写 currentColor。
<color> - CSS:层叠样式表 | MDN

锥形渐变 ​

css
.box {
	width: 100px;
	height: 100px;
	background-image: conic-gradient(skyblue, white);
}

![Pasted image 20240506134037](/notes-assets/04.CSS3/assets/Pasted image 20240506134037.png)

这是一个最简单的锥形渐变,实际上,锥形渐变就像是一个转圈的圆进行渐变,默认以中心点为原点,从 12 点钟方向开始,沿着顺时针进行渐变。

像渐变原点,起始角度,这些都是可以手动设置的,如下

css
.box {
	width: 100px;
	height: 100px;
	background-image: conic-gradient(from 45deg at 20px 20px, skyblue, white);
}

![Pasted image 20240506134438](/notes-assets/04.CSS3/assets/Pasted image 20240506134438.png)

既然这个渐变是一个圆形的轨迹,那就需要用角度来表示渲染区间,如下所示

css
.box {
	width: 100px;
	height: 100px;
	background-image: conic-gradient(skyblue 0deg, white 45deg, purple 360deg);
}

![Pasted image 20240506134631](/notes-assets/04.CSS3/assets/Pasted image 20240506134631.png)

当然,也可以用百分比

css
.box {
	width: 100px;
	height: 100px;
	background-image: conic-gradient(skyblue 0%, white 80%, purple 100%);
}

![Pasted image 20240506134728](/notes-assets/04.CSS3/assets/Pasted image 20240506134728.png)

我们可以利用线性渐变做一个选色盘

css
.box {
	width: 100px;
	height: 100px;
	border-radius: 50%;
	background: radial-gradient(closest-side, white, transparent),
		conic-gradient(red, magenta, blue, aqua, lime, yellow, red);
}

![Pasted image 20240506140009](/notes-assets/04.CSS3/assets/Pasted image 20240506140009.png)

使用径向渐变,可以非常方便地实现棋盘格效果,这也是棋盘格效果的最简单的实现方案

css
.box {
	width: 400px;
	height: 400px;
	background-size: 40px 40px;
	background-image: conic-gradient(white 0deg 90deg, #ccc 90deg 180deg, white 180deg 270deg, #ccc 270deg 360deg);
}

![Pasted image 20240506140755](/notes-assets/04.CSS3/assets/Pasted image 20240506140755.png)

conic-gradient 存在兼容性问题

以笔记为镜,可以知得失