作者:WangMin

格言:努力做好自己喜欢的每一件事

随着前端技术的发展,单一的背景色已经满足不了客户的需求了,所以在前端开发中我们常常会用到一些渐变色的效果,这样可以使前端页面更加美观。那么渐变色的效果到底是怎么来的?我们应该怎么做才能实现这一效果呢?接下来就一起来看看吧!

实现原理

css要实现渐变,就必须使用线性渐变函数 linear-gradient() 与 径向渐变函数 radial-gradient 来设置 backgroundbackground-imge 属性。那么 它们都需要哪些参数呢?首先应该了解它的语法。

线性渐变函数 linear-gradient() 的语法

  1. linear-gradient(direction / angle, color stop [ <percentage> | <length> ], color stop [ <percentage> | <length> ], ...);

1、 direction [ 渐变的方向 ] / angle [ 渐变的角度 ]

direction [ 渐变的方向 ] 可分为:

1)、to top : 颜色从下往上渐变,如下案例 1 :

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to top,#f00,#67f)
  6. }

网页效果如下:



2)、to bottom : 颜色从上往下渐变,如下案例 2:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to bottom,#f00,#67f)
  6. }

网页效果如下:



3)、to left : 颜色从右往左渐变,如下案例 3:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to left,#f00,#67f)
  6. }

网页效果如下:



4)、to right : 颜色从左往右渐变,如下案例 4:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to right,#f00,#67f)
  6. }

网页效果如下:



5)、to bottom right : 颜色从左上角到右下角渐变,如下案例 5:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to bottom right,#f00,#67f)
  6. }

网页效果如下:



6)、to bottom left : 颜色从右上角到左下角渐变,如下案例 6:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to bottom left,#f00,#67f)
  6. }

网页效果如下:



7)、to top right : 颜色从左下角到右上角渐变,如下案例 7:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to top right,#f00,#67f)
  6. }

网页效果如下:

8)、to top left : 颜色从右下角到左上角渐变,如下案例 8:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to top left,#f00,#67f)
  6. }

网页效果如下:



angle [ 渐变的角度 ]可分为:

  1. 0deg :颜色从下往上渐变
  2. 180deg :颜色从上往下渐变
  3. 270deg:颜色从右往左渐变
  4. 90deg :颜色从左往右渐变
  5. 135deg :颜色从左上角度到右下角渐变
  6. -135deg :颜色从右上角到左下角渐变
  7. 45deg :颜色从左下角到右下角渐变
  8. -45deg :颜色从右下角到左上角渐变

这里列出的是几个常用到的角度,也可以根据自己的需求来设置角度。案例参照上面 direction 参数的案例,只需要把方向改为对应角度 angle 就可以了。

2、color stop [ 渐变的起止颜色 ]

color stop 可以是一个表示颜色的十六进制数,可以是一个表示颜色的单词,也可以是用rgb或者rgba来表示的颜色。 color stop 这个参数可以设置多个来表示多个颜色的渐变色,但是默认至少要设置两个 color stop 来表示渐变色的渐变色的开始颜色和渐变色的结束颜色,所以上面的语法中设置了两个 color stop 来表示两个颜色之间的渐变色。如下案例 9:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to top,pink,#67f)
  6. }

网页效果如下:



如果只存在一个color stop ,也就是说只设置了一个颜色的话元素元素依旧存在但没有任何颜色,更别说实现渐变色的效果了。

另外在语法中,颜色值后面还可以添加百分比或者固定数值来表示某个颜色值距离起点的开始位置 。上面的案例中颜色后面都没有跟百分比或者数值,这里我给颜色添加百分比看看是什么效果,如下案例 10:

  1. <div class="box box1"></div>
  2. <div class="box box2"></div>
  3. .box{
  4. width:300px;
  5. height:150px;
  6. }
  7. .box1{
  8. background:linear-gradient(to top,pink,#67f)
  9. }
  10. .box2{
  11. background:linear-gradient(to top,pink 0%,#67f 100%)
  12. }

网页效果如下:



从以上案例中,我给元素box2的颜色设置了百分比(pink 0%,#67f 100%),没有给元素box1颜色设置百分比,可以看到其实显示出来的效果其实是一样的。所以如果不设置百分比的话,默认是根据颜色的个数来给每个颜色值设置的,最后一个颜色的百分比值就是100%,而起始的值就是0%。

如果给元素box2的颜色设置了百分比(pink 0%,#67f 100%)与不设置效果一样的话,那么重新给元素box2的粉色设置了20%,蓝色设置60%,来看看是什么效果?如下案例 11:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to top,pink 20%,#67f 60%)
  6. }

网页效果如下:



有小伙伴可能会疑惑为什么是这种效果呢?那么就要来看看颜色后面百分比的含义了。百分比是指 某个颜色值距离起点的开始位置 。案例中的渐变方式为从下往上,所以当某个颜色值设置了百分比后,便会从距离底部相应的距离(百分比计算)开始填充实色。与上一个案例截图可以看出元素高度的0%-20% 的位置都是粉色的实体颜色,在元素高度的60%-100%以后都是蓝色的实体颜色,只有在20%—60%之间才是粉色与蓝色的渐变色。

从上面的案例中可以的出一个结论:如果第一个颜色值设置了百分比的话,那么0%-(设置的第一个颜色值的百分比) 的之间的距离就是第一个颜色的实体颜色,第二个颜色值设置了百分比的话,就是从设置的第二个颜色值的百分比开始渲染第二个颜色的实色。那么两个颜色的渐变色的区域就是 第一个颜色值的百分比到第二个颜色值的百分比的区域 ,也就是说 渐变过渡区的百分比为第二个颜色值的百分比减去第一个颜色值的百分比之后剩下的空间。所以说在设置第二个颜色值的百分比时一定要比第一个颜色值的百分比要大,并且两个颜色的百分比不能设置一样,不然的话会出现以下两种情况:

第二个颜色值的百分比比第一个颜色值的百分比小的情况下,如下案例 12:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to top,pink 20%,#67f 10%)
  6. }

网页效果如下:



从上面可以看到0%-20%之间为粉色,给蓝色设置的百分比并没有生效,而是将元素剩余的部分全部渲染为了蓝色,因此我们可以得到一个结论:第二个颜色值的百分比时一定要比第一个颜色值的百分比小的情况下,浏览器会忽略第二个颜色值的百分比,将剩余部分的百分比全部给了第二个颜色值,并且它们之间不存在渐变色。 从例子中可以看出蓝色是从元素高度的20%开始渲染到元素高度的100%,因为蓝色是紧接着粉色开始渲染的,所以它们之间不存在两色之间的渐变色。

第一个颜色值的百分比和第二个颜色值的百分比相等的情况下,如下案例 13:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to top,pink 50%,#67f 50%)
  6. }

网页效果如下:



上面的例子中给第一个颜色值的百分比和第二个颜色值的百分比都设置的50%,所以它们各占元素高度的一半,因为渐变色的区域为第二个颜色值的百分比-第一个颜色值的百分比,这里50%-50%=0,因此它们不存在渐变色。

上面讲到了可以给颜色设置百分比,也可以给颜色设置数值。其实设置颜色值与设置数值是一个道理,也要按照上面给颜色设置百分比的规则来设置,效果是一样的。就将案例 11中样式的百分比设置为相应的数值,如下案例14:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to top,pink 30px,#67f 90px)
  6. }

网页效果如下:



从上图可以看到给颜色设置数值的案例14与给颜色设置百分比的案例11效果一样。当然无论是给颜色设置百分比还是数值都可以根据自己需求来设置。

3、存在多个 color stop 颜色值

上面提到了 color stop 可以设置多个来表示多个颜色之间的渐变色,但是 颜色 至少 要设置两个来表示它们的起止颜色,那么如果存在多个颜色值时,效果又是怎样的呢?如下案例15:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to top,pink,#67f,#f00,#000)
  6. }

网页效果如下:

我在案例 9的基础上有新添加红色和黑色两种颜色,呈现出来的效果如上图所示,那么它们之间各自的着色区域是怎么分配的呢?从图中可以看出,在没有个颜色设置百分比的情况下,似乎它们之间距离差不多,所以我们可以根据公式100/(颜色个数-1)将各自的着色区域求出来。这里以上述案例为例用上述公式将各自的着色区域算出来大约为33.3%,每个颜色的着色区域在上个颜色的基础上加上33.3%,就可以得到每个颜色的着色点。根据这个百分比我们可以将上述案例写为如下形式:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to top,pink 0%,#67f 33.3%,#f00 66.6%,#000 100%);
  6. }

将如上代码运行一下,你会发现呈现出的效果跟案例15的效果一样。

根据上面全部所说的,我们就可以通过一个属性做出一个多重颜色线条的背景,如下案例16:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:linear-gradient(to top,pink 0%,pink 25%,#67f 0%,#67f 50%,#f00 0%,#f00 75%,#000 0%,#000 100%)
  6. }

网页效果如下:



这里设置了4个颜色,因为设置的方向是从下往上渐变,所以最先开始着色的是粉色,这个时候整个元素已经被粉色覆盖,在这里给每个颜色设置着色点的原因是每个颜色需要一个起始着色点都设置为0%,也就是说每个颜色都从元素的(高度或者宽度)的0%开始着色,将相互两个颜色之间的渐变色过渡区域覆盖为后一个颜色的实色,清除过度效果。这样就得到了案例16的效果了。

重复线性渐变:repeating-linear-gradient语法

  1. repeating-linear-gradient(direction / angle, color stop [ <percentage> | <length> ], color stop [ <percentage> | <length> ], ...);

如下案例17:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:repeating-linear-gradient(to top,pink 10%,#67f 20%)
  6. }

网页效果如下:

径向渐变函数 radial-gradient() 的语法

  1. linear-gradient(position, color stop [ <percentage> | <length> ], color stop [ <percentage> | <length> ], ...);

1、 position [ 渐变的位置 ]

position [ 渐变的位置 ] 可分为:

1)、circle 表示圆形渐变,以元素的中心为圆心向四周进行圆形渐变。如下案例18:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:radial-gradient(circle,pink,#67f)
  6. }

网页效果如下:



2)、ellipse 表示把渐变拉伸成椭圆形,以元素的中心为圆心向四周进行椭圆形渐变,如下案例19:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:radial-gradient(ellipse,pink,#67f)
  6. }

网页效果如下:



3)利用第一个参数设置渐变的中心位置

上面提到的两种渐变方式都可以设置渐变的中心位置,第一个参数就要在两种渐变方式后面利用关键字 at 来确定渐变中心点的位置,at 后面需要设置两个数字(百分比或者数字都可以),第一个数字表示的是渐变中心点离元素左边缘的距离,第二个数字表示的是渐变中心点离元素上边缘的距离。如下案例20:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:radial-gradient(ellipse at 60% 40%,pink,#67f)
  6. }

网页效果如下:



2)、color stop [ 渐变的起止颜色 ] 与 线性渐变函数 linear-gradient()color stop 是一样的规则。可以给颜色设置百分比与数值,也可以设置多个颜色的径向渐变。

颜色带有百分比的径向渐变,如下案例21:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:radial-gradient(circle,pink 10%,#67f 60%)
  6. }

网页效果如下:



多个颜色的径向渐变,如下案例22:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:radial-gradient(circle,pink,#67f,#f00,#000)
  6. }

网页效果如下:

重复径向渐变:repeating-radial-gradient()语法
  1. repeating-radial-gradient(position, color stop [ <percentage> | <length> ], color stop [ <percentage> | <length> ], ...);

设置渐变蓝色在10%的位置就结束。然后渐变循环,又以粉色开始。如下案例23:

  1. <div class="box"></div>
  2. .box{
  3. width:300px;
  4. height:150px;
  5. background:repeating-radial-gradient(circle,pink 10%,#67f 20%)
  6. }

网页效果如下:

以上函数的兼容性

为了兼容各主流浏览器并支持它们的较低版本,在基于Webkit的Chrome和Safari等浏览器 上使用以上函数时,需要在函数的名称前加上 -webkit-Firefox浏览器 则需要在属性的名称前加上 -moz-opera浏览器 则需要在属性的名称前加上 -o-IE浏览器 则需要在属性的名称前加上 -ms- 。上述所有案例中我为了方便,没有将几种兼容格式都写上,但是在实际开发中一定要写上几种兼容格式,避免在其他浏览器中无法显示出该效果。


以上仅是个人见解,若有不足之处欢迎在下方评论指出,那就先分享到这里!! 后续继续更新!!

快来让你的网页色彩绚丽--linear-gradient与radial-gradient的更多相关文章

  1. Silverlight中的Path

    原文:Silverlight中的Path 在Silverlight中Path可能由直线.曲线.或者其他简单的图形对象组成.这篇文章旨在介绍如何使用XAML和C#来创建Path. 废话先行 Path可能 ...

  2. 5月9日上课笔记-网页定位、网页动画【HTML5】

    一.网页定位 position: static (默认值) relative 相对定位(相对原来的位置) right left botton top absolute 绝对定位 fixed: 固定定位 ...

  3. PS网页设计教程XXVII——设计一个大胆和充满活力的作品集

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  4. PS网页设计教程XXX——在PS中创建一个漫画书主题网页布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  5. 使用快盘托管Git库

    Dropbox非常好用.可是我如今也没弄明确究竟哪里好用了.不如试试中国的金山快盘..起码不会操心被墙. cd ~/Kuaipan/repo git --bare init //初始化仓库 cd ~/ ...

  6. Gitlab管理网页老是500错误?增加物理内存,增加cpu吧

    上一篇 CentOS 7 系统下 GitLab 搭建 搭建时,是用的是1G内存, 访问gitlab管理网页非常慢,常常出现 500错误 查询后发现: Gitlab的运行对CPU是有要求的:2核心 支持 ...

  7. Jquery 网页转换为图片

    /* html2canvas 0.5.0-alpha1 <http://html2canvas.hertzen.com> Copyright (c) 2015 Niklas von Her ...

  8. 斯坦福CS229机器学习课程笔记 Part1:线性回归 Linear Regression

    机器学习三要素 机器学习的三要素为:模型.策略.算法. 模型:就是所要学习的条件概率分布或决策函数.线性回归模型 策略:按照什么样的准则学习或选择最优的模型.最小化均方误差,即所谓的 least-sq ...

  9. 网页设计简史看设计&代码“隔膜”

    本文来自网易云社区 作者:马宝 设计与代码之间隔膜所在?既然你诚心诚意地问了,我就大发慈悲地告诉你.为了防止地球被破坏,为了维护世界的和平,为了贯彻爱与真实的邪恶~,我是穿梭在前端与设计之间爱与美丽的 ...

  10. http网页性能最佳实践

    你愿意为打开一个网页等待多长时间?我一秒也不愿意等.但是事实上大多数网站在响应速度方面都让人失望.现在越来越多的人开始建立自己的网站,博客,你的网页响应速度如何呢?在这篇文章中我们来介绍一下提高网页性 ...

随机推荐

  1. 2023-07-31:用r、e、d三种字符,拼出一个回文子串数量等于x的字符串。 1 <= x <= 10^5。 来自百度。

    2023-07-31:用r.e.d三种字符,拼出一个回文子串数量等于x的字符串. 1 <= x <= 10^5. 来自百度. 答案2023-07-31: 大体步骤如下: 1.初始化一个字符 ...

  2. 在不修改代码情况下解决 Chrome 浏览器跨域

    前言: 在前后台分离的项目,跨域是经常遇到的问题了.是实际解决方案中,大部分采用服务端配置,而如果只是调试,可以通过配置 Chrome 浏览器实现跨域,以下以 NodeJs 服务为例. 开始: 1. ...

  3. python-gitlab 一个简单demo

    背景 需要收集git仓库信息到数据库供前端展示 包括:仓库信息.仓库所有者.成员列表.提交信息.活跃情况等 需要定时启动.灵活触发 实现简介 使用gitlab v4 restful 接口 使用pyth ...

  4. 你一定要知道的iterator和generator

    generator是一种特殊的iterator,generator可以替代iterator实现,使代码更为简洁 什么是iterator iterator叫做迭代器,是用来帮助某个数据结构进行遍历的对象 ...

  5. [python]从环境变量和配置文件中获取配置参数

    前言 从环境变量和配置文件中获取配置参数,相关库: python-dotenv:第三方库,需要使用pip安装 configparser:标准库 示例代码 test.ini [mysql] host = ...

  6. CentOS7挂载NTFS格式的硬盘

    前言 一些NTFS格式的移动硬盘或U盘插在服务器上可能不会自动挂载,本文为手动挂载的步骤. 步骤 安装相关程序: yum install -y ntfs-3g 使用一些命令查看需要挂载的分区 # 查看 ...

  7. Vue 框架下提升加载速度的一些实战经验分享

    现在前端的框架有很多,甚至两只手已经数不过来,当然也完全没必要全部都学,还是应该深入的学习一两个被广泛使用的就好.其实我和大部分同学的想法一致,认为最值得我们深究的还是主流的 Vue 和 React. ...

  8. 部署属于自己的New bing Ai

    该项目来源 https://github.com/adams549659584/go-proxy-bingai 项目体验地址 https://bing.vcanbb.top/web/#/ 项目介绍 基 ...

  9. Blazor前后端框架Known-V1.2.14

    V1.2.14 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. Gitee: https://gitee.com/known/Known Git ...

  10. UM 百度富文本编辑器自定义图片上传路径

    UM 百度富文本编辑器自定义图片上传路径 因为公司要做图文编辑,选择了UM,但是直接存入Tomcat根目录下,不满足业务需求需要存入服务器上. 一.需要注意的是在um的JSP目录下已经存在了Uploa ...