作者: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. FAQ:zabbix 频繁丢失数据问题分析处理

    问题描述 在grafana上看到历史数据的绘图断断续续. 问题分析 1 性能瓶颈 一开始以为是哪里的性能遇到瓶颈,把服务器和zabbix的监控数据看了一遍,各个指标都没有问题. 2 上网百度 没有找到 ...

  2. 可托拉拽的WPF选项卡控件,强大好用!

    推荐一个简单易用的WPF选项卡控件. 项目简介 这是一个基于WPF开发的,可扩展.高度可定制.轻量级的UI组件,支持拖拉拽功能,可以让开发人员快速实现需要选项卡窗口的系统. 特色功能 1.拖拉拽标签: ...

  3. vs code 上传代码到码云

    git init //初始化git仓库 git add . //添加所有文件到git暂存区 git add README.md(如果项目中没有这个文件,会在后面几个操作中报错,解决方法是通过命令合并: ...

  4. spring-mvc 系列:注解开发(SpringMVCConfig、SpringConfig、AbstractAnnotationConfigDispatcherServletInitializer详细配置)

    目录 一.创建初始化类,代替web.xml 二.创建SpringConfig配置类,代替Spring的配置文件 三.创建SpringMVC配置类,代替SpringMVC的配置文件 四.测试功能 使用配 ...

  5. 知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - Python 操作

    数据基于: 知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - CQL - 太极拳传承谱系表 这是一个非常简单的web应用程序,它使用我们的Movie图形数据集来提供列表 ...

  6. 标题:在Godot中使用Node2D创建自定义的Label

    在Godot游戏引擎中,我们经常需要在游戏中显示文本信息.通常,我们可以使用Label节点来实现这一点.但是,在某些情况下,你可能希望更灵活地控制文本的显示和样式.在本篇博客中,我们将学习如何通过使用 ...

  7. MindSponge分子动力学模拟——软件架构(2023.08)

    技术背景 在前面一篇文章中,我们介绍了MindSponge的两种不同的安装与使用方法,让大家能够上手使用.这篇文章主要讲解MindSponge的软件架构,并且协同mindscience仓库讲解一下二者 ...

  8. 修改内置框架css 样式

    <style scoped> 1 <style scoped> 2 .info /deep/ .video{ // info 外层便签 /deep/ 可以理解为连接桥 .vid ...

  9. 多重断言插件之pytest-assume的简单使用

    背景: pytest-assume是Pytest框架的一个扩展,它允许在单个测试用例中多次断言.通常情况下,当一个断言失败时,测试会立即停止执行,而pytest-assume允许我 们继续执行剩余的断 ...

  10. 【项目源码】基于Spring + Spring MVC + MyBatis的图书馆管理系统

    基于Spring + Spring MVC + MyBatis的图书馆管理系统.主要功能包括:图书查询.图书管理.图书编辑.读者管理.图书的借阅与归还以及借还日志记录等​,非常适合学习研究. 运行配置 ...