Skip to main content

渐变

前言

CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡,linear-gradient/radial-gradient 函数用于创建一个表示两种或多种颜色线性渐变的 图片

以前,你必须使用图像来实现这些效果。但是,通过使用 CSS3 渐变(gradients),你可以减少下载的时间和宽带的使用。此外,渐变效果的元素在放大时看起来效果更好,因为渐变(gradient)是由浏览器生成的。

CSS3 定义了两种类型的渐变(gradients):

  • 线性渐变(Linear Gradients)- 向下/向上/向左/向右/对角方向
  • 径向渐变(Radial Gradients)- 由它们的中心定义

一定要注意,linear-gradient/radial-gradient 返回的是一个 图片,因此我们可以把它赋值给:

  • background-image
  • border-image
  • list-style-image

线性渐变 linear-gradient

linear-gradient(<angle>?, <color1> <percentage>?, <color2> <percentage>?, ...)
  • <angle> 可选项,默认为 180deg,表示后续的颜色从上到下进行渐变
  • <color> 必选项,指定过渡色
  • <percentage> 可选项,指定纯色点在图片中的位置

对于 <angle> 的理解可以参考下图:

pic.sm

圆内部的箭头方向就是颜色渐变方向,默认状态就是 180deg,即从上往下渐变,此时我们往顺时针转动,渐变方向也会顺时针转动,经过圆顶部相当于过了一周期,则回到 0deg,此时相当于从下往上渐变。

对于 percentage 的理解可以参考下面:

div {
border: 1px solid black;
width: 300px;
height: 300px;

background-image: linear-gradient(red, green, skyblue);

/* 等价于 */
background-image: linear-gradient(180deg, red 0%, green 50%, skyblue 100%);
}

当我们没有指定渐变色后面的 <percentage> 时,每个渐变色纯色点之间的距离会根据 渐变方向 等分整个盒子,默认情况下,第一个渐变色的纯色点为 0%,最后一个渐变色纯色点为 100%

pic.sm

如果我们指定第一个渐变色的纯色点大于 0%,那么从 0% 到指定的位置都是第一个渐变色的纯色范围:

div {
background-image: linear-gradient(red 50%, green, skyblue);
}

0% ~ 50% 的区域都是纯红色:

pic.sm

同理,如果我们修改了最后一个渐变色的纯色点小于 100%,那么从指定位置到 100% 都是纯色范围:

div {
background-image: linear-gradient(red 50%, green, skyblue 50%);
}

50%100% 都是纯蓝色:

pic.sm

另外,这里再补充一下过渡点,过渡点意味着从上一个颜色过渡到下一个颜色的瞬间,过渡点的位置一般就是两个纯色点的中间位置,比如:

div {
background-image: linear-gradient(red, green, skyblue);
}

25% 就是红色和绿色之间的过渡点,该点是红色完全过渡到绿色的瞬间,可以看看之前贴的第一张图。

径向渐变 radial-gradient