• CSS渐变效果必须要用两个颜色吗?
  • 发布于 2个月前
  • 202 热度
    0 评论
  • 暮涵
  • 0 粉丝 16 篇博客
  •   
一、渐变通常至少需要两个颜色值
通常情况下,渐变至少需要两个颜色。以linear-gradient线性渐变为例
background: linear-gradient(#FF336F, #FFD75A);
示意效果如下

需要注意的是,即使是「纯色」的,也就是两个颜色都是相同的,也需要都写上
background: linear-gradient(#FF336F, #FF336F);
示意效果如下

如果只写一个颜色,就像这样
background: linear-gradient(#FF336F);
那么,这条语法将直接不合法

那么,有没有办法只写一个颜色也能使渐变合法呢?

二、渐变的双数值颜色范围语法
先举个例子,我们用渐变来实现一个红→黄→蓝的条纹图案
# 堆代码 duidaima.com
background: linear-gradient( #FF336F 33%, #FFD75A 33%, #FFD75A 66%, #0170FE 66%);
示意效果如下

大家可能都知道,每个颜色后面的数值表示颜色断点的位置,下面是 Figma 中的设置

虽然看似只有两个临界点,但其实完整写下来应该是 6 个(包含首尾)
background: linear-gradient( #FF336F 0%,#FF336F 33%,#FFD75A 33%, #FFD75A 66%, #0170FE 66%, #0170FE 100%)
示意效果如下

但是这样太复杂了,同样的颜色都出现了两次,因此这里可以采用双数值颜色范围语法(Double-position color stops)进行简化。简单来讲,就是把相邻、相同颜色的位置合并成一组范围
background: linear-gradient( #FF336F 0%  33%,#FFD75A 33%  66%, #0170FE 66% 100%)
然后将首尾的0%和100%也可以省略
background: linear-gradient( #FF336F 33%,#FFD75A 33%  66%, #0170FE 66%)
这里可以看到,33%和66%都出现了两次,其实还可以再简化一下,「后面渐变的起点只要小于前一个渐变的终点,都可以得到边界清晰的渐变」,因此,还能继续简化
background: linear-gradient( #FF336F 33%,#FFD75A 0 66%, #0170FE 0)
示意效果如下

怎么样?是不是看着非常精简呢

三、纯色渐变的简化
回头再来看开头的问题,如何简化一下纯色渐变?
background: linear-gradient(#FF336F, #FF336F);
我们可以先补全一下,加上颜色位置
background: linear-gradient(#FF336F 0, #FF336F 100%);
然后,我们可以通过前面的双数值颜色范围语法进行合并
background: linear-gradient(#FF336F 0 100%);
因为只有一个颜色,所以这里100%写成任意值都可以,直接简化成0
background: linear-gradient(#FF336F 0 0);
这样就得到了只用一个颜色来表示渐变的最简写法(控制台可以看到,完全是合法的颜色)

示意效果如下

是不是比较容易理解呢?

四、纯色渐变的用处
有人会问,都已经是纯色了,为啥不直接用background-color呢?其实不然,虽然是纯色,但终究是渐变,还有很多是背景色无法做到的事情,比如bakcground-size。

五、兼容性和总结
渐变的双数值颜色范围语法并不是一开始就有的,这是一个在Chrome 71推出的新特性,至今也有四五年了,完整兼容性如下

如果你不放心,还可以使用 postcss 进行兼容一下,下面是一个插件
postcss-double-position-gradients - npm (npmjs.com)

下面总结一下本文的一些要点:
1.渐变通常至少需要两个颜色值,即使是纯色,也需要两个颜色都写上
2.渐变的双数值颜色范围语法可以把相邻、相同颜色的位置合并成一组范围,从而简化渐变语法
3.借助渐变的双数值颜色范围语法,可以将纯色渐变简写成一个颜色
4.后面渐变的起点只要小于前一个渐变的终点,都可以得到边界清晰的渐变

5.纯色渐变有很多是背景色无法做到的事情,比如可以改变bakcground-size


CSS 渐变是 CSS 中最灵活的特性,没有之一。掌握 CSS 渐变的技巧对提升 CSS 水平有很大的帮助,渐变如何学习?就从最基础的语法开始吧,比如文中的这些小技巧。
用户评论