作者:WangMin

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

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

实现原理

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

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

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

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

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

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

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

网页效果如下:



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

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

网页效果如下:



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

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

网页效果如下:



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

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

网页效果如下:



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

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

网页效果如下:



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

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

网页效果如下:



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

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

网页效果如下:

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

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

网页效果如下:



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

0deg :颜色从下往上渐变
180deg :颜色从上往下渐变
270deg:颜色从右往左渐变
90deg :颜色从左往右渐变
135deg :颜色从左上角度到右下角渐变
-135deg :颜色从右上角到左下角渐变
45deg :颜色从左下角到右下角渐变
-45deg :颜色从右下角到左上角渐变

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

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

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

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

网页效果如下:



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

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

<div class="box box1"></div>
<div class="box box2"></div>
.box{
width:300px;
height:150px;
}
.box1{
background:linear-gradient(to top,pink,#67f)
}
.box2{
background:linear-gradient(to top,pink 0%,#67f 100%)
}

网页效果如下:



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

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

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

网页效果如下:



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

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

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

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

网页效果如下:



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

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

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

网页效果如下:



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

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

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

网页效果如下:



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

3、存在多个 color stop 颜色值

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

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

网页效果如下:

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

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

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

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

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

网页效果如下:



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

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

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

如下案例17:

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

网页效果如下:

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

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

1、 position [ 渐变的位置 ]

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

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

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

网页效果如下:



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

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

网页效果如下:



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

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

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

网页效果如下:



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

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

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

网页效果如下:



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

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

网页效果如下:

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

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

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

网页效果如下:

以上函数的兼容性

为了兼容各主流浏览器并支持它们的较低版本,在基于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. pycharm:插件translation 更新TTK失败

    解决方案 1.修改C:\Windows\System32\drivers\etc 下hosts文件, 添加 203.208.40.66 translate.google.com 203.208.40. ...

  2. 可实现自动驾驶的飞机大战(C++)

    PS:觉得可以的uu帮忙点个star啦,最近在找工作,希望star多一点能写到简历上 B站演示视频: 基于C++实现的可自动驾驶的飞机大战_单机游戏热门视频 (bilibili.com) Github ...

  3. Codeforces Round #576 (Div. 2)

    A - City Day 题意:给n,x,y和数组a[n],求最小的下标d,使得有a[d-x,d-x+1,--d-1,d+1,d-1,d+1,--d+y-1,d+y]都比a[d]小,若d-x<= ...

  4. WPF 自定义窗体(一)

    .Net默认的窗体样式只有四种:None.SingleBorderWindow.ThreeDBorderWindow.ToolWindow,都比较"丑".而很多时候,我们希望自定义 ...

  5. Conda 命令深入指南

    Conda 命令深入指南 Conda 是一个功能强大的包管理系统,允许您为不同的项目创建和管理隔离的环境,从而更轻松地处理不同的依赖项集. 安装 可以按照 Conda 官方网站 (https://co ...

  6. 《Python魔法大冒险》005 魔法挑战:自我介绍机器人

    魔法师和小鱼坐在图书馆的一扇窗户旁,窗外的星空闪烁着神秘的光芒.魔法师轻轻地拍了拍小鱼的肩膀. 魔法师: 小鱼,你已经学会了编写简单的魔法程序,现在我要教你如何创造一个有自己思想的机器人,让它能够和我 ...

  7. MySQL-通过存储过程来添加和删除分区(List分区)

    1.背景原因 当前MySQL不支持在添加和删除分区时,使用IF NOT EXISTS和IF EXISTS.所以在执行调度任务时,直接通过ADD PARTITION和DROP PARTITION不可避免 ...

  8. 【逆向专题】【危!!!刑】(一)使用c#+Win32Api实现进程注入到wechat

    引言 自从上篇使用Flaui实现微信自动化之后,这段时间便一直在瞎研究微信这方面,目前破解了Window微信的本地的Sqlite数据库,使用Openssl,以及Win32Api来获取解密密钥,今天作为 ...

  9. 2023年Vue开发中的8个最佳工具

    前言 Vue.js,一款当今非常流行的基于JavaScript的开源框架,旨在构建动态的可交互应用. Vue.js以其直观的语法和灵活的架构而广受全球开发者的欢迎和赞誉.随着时间的推移,Vue不断进化 ...

  10. Nacos启动报错:Please set the JAVA_HOME variable in your environment, We need java(x64) jdk8 or later

    可能原因: 1.JDK版本过低(应不低于1.8) 2.未设置jdk环境变量(可能性低) 3.jdk环境变量设置不适配nacos(博主就是这个原因) 解决方案: 1.直接在startup.cmd文件中设 ...