SVG颜色、渐变和填充

简介:

SVG颜色、渐变和填充

颜色

RGB和HSL都是CSS3支持的颜色表示方法,一般普遍使用是RGB。PS:HSL浏览器兼容。

RGB

RGB即是代表红、绿、蓝三个通道的颜色,通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的。

表示方式 取值范围 优点 缺点
rgb(r, g, b)
[0, 255]
每个分量
显示器容易分析,
目前的显示器大都是采用了RGB颜色标准
不符合人类描述颜色的习惯
#rrggbb 00 - FF
十六进制正整数
   

例子:

 

HSL

HSL即是代表色相,饱和度,亮度三个通道的颜色,通过对色相(H)、饱和度(S)、亮度(L)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色。

表示方式 取值范围 优点
hsl(h, s%, l%)
h:[0, 359]
s,l:[0, 100]
符合人类描述颜色的习惯

例子:

 

互相转换的原理

互相转换的原理挺复杂,就不多说。

用js实现RGB与HSL的互相转换,可查看:http://www.zhangxinxu.com/wordpress/2010/03/javascript-hex-rgb-hsl-color-convert/

透明度

设置颜色的透明度,有两种方法:

1. rgb(r, g ,b ,a)和hsl(h, s%, l%, a) 表示带透明度的颜色。

2. opacity属性表示元素的透明度。

PS:a和opacity的取值范围:[0, 1]

渐变

渐变是一种从一种颜色到另一种颜色的平滑过渡,两种主要渐变是线性渐变和径向渐变。

线性渐变

<linearGradient> 可用来定义 SVG 的线性渐变,主要是定义方向和颜色。
<linearGradient> 标签一般嵌套在 <defs> 的内部。 (SVG的<defs>元素用于预定义(不会显示)一个元素使其能够在SVG图像中重复使用。)

渐变方向

方向 参数
水平 当 y1 和 y2 相等,而 x1 和 x2 不同时
垂直 当 x1 和 x2 相等,而 y1 和 y2 不同时
角形 当 x1 和 x2 不同,且 y1 和 y2 不同时

示例:

复制代码
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
     <defs>
          <linearGradient id="orange_red" x1="0%" y1="0%" x2="100%" y2="0%">
               <stop offset="0%" stop-color="blue"/>
               <stop offset="50%" stop-color="orange"/>
               <stop offset="100%" stop-color="red"/>
          </linearGradient>
     </defs>
     <ellipse cx="200" cy="190" rx="80" ry="50" style="fill:url(#orange_red)"/>
</svg>
复制代码

效果:

代码解析:

1. <linearGradient> 标签的 id 属性可为渐变定义一个唯一的名称。
2. fill:url(#orange_red) 属性把ellipse元素链接到此渐变。
3. <linearGradient> 标签的 x1、x2、y1、y2 属性可定义渐变的开始和结束位置。
4. 渐变的颜色范围可由两种或多种颜色组成。每种颜色通过一个 <stop> 标签来规定。offset 属性用来定义渐变的开始和结束位置。

注意:

gradientUnits,它定义了渐变使用的坐标单位。这个属性有2个可用值:userSpaceOnUse和objectBoundingBox(默认值)。

名称 单位 使用坐标系 描述
objectBoundingBox(默认值) 百分比 自身坐标系 基于渐变元素的长宽的百分比。
userSpaceOnUse 数值 原始坐标系 相对原始坐标系的数值(绝对值)。

为了让userSpaceOnUse的效果跟objectBoundingBox一致,那上面代码需变成

复制代码
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
     <defs>
          <linearGradient id="orange_red" x1="120" y1="120" x2="300" y2="120" gradientUnits="userSpaceOnUse">
               <stop offset="0%" stop-color="blue"/>
               <stop offset="50%" stop-color="orange"/>
               <stop offset="100%" stop-color="red"/>
          </linearGradient>
     </defs>
     <ellipse cx="200" cy="200" rx="80" ry="50" style="fill:url(#orange_red)"/>
</svg>
复制代码
PS:不同的部分是橙色部分,这部分需要根据图形在原始坐标系的位置算出来,还是比较麻烦。

径向渐变

<radialGradient> 可用来定义 SVG 的径向渐变,主要是定义方向和颜色。

渐变方向

cx、cy 和 r 属性定义外圈,而 fx和fy 定义内圈(可认为是往哪聚焦) 。

名称 描述 默认值
cx 渐变的中心点x位置 50%
cy 渐变的中心点y位置 50%
r 渐变的半径 50%
fx 渐变的焦点 0%
fy 渐变的焦点 0%

示例:

复制代码
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
     <defs>
          <radialGradient id="orange_red" cx="20%" cy="40%" r="50%" fx="50%" fy="50%">
               <stop offset="0%" stop-color="blue"/>
               <stop offset="50%" stop-color="orange"/>
               <stop offset="100%" stop-color="red"/>
          </radialGradient>
     </defs>
     <circle cx="200" cy="200" r="80" style="fill:url(#orange_red)"/>
</svg>
复制代码

效果:

 

PS:radialGradient也有gradientUnits参数。

填充

SVG的填充可以用一个SVG元素,也可以是位图图像,通过<pattern>元素在x轴或y轴方向以固定的间隔平铺。

示例:

复制代码
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
     <defs>
          <pattern id="grid" x="100" y="100" width="0.2" height="0.2">
               <circle cx="10" cy="10" r="5" fill="red"></circle>
               <polygon points="30 10 60 50 0 50" fill="green"></polygon>
          </pattern>
     </defs>
    <rect x="100" y="100" width="400" height="300" fill="url(#grid)" stroke="blue"></rect>
</svg>
复制代码

效果:

参数

名称 描述 默认值
x 填充图案的x偏移量,来自左上角 0
y 填充图案的y偏移量,来自左上角 0
width 填充图案的宽度 0
height 填充图案的高度 0
patternUnits 设置pattern的使用单位 objectBoundingBox
patternContentUnits 设置pattern内图案的使用单位 userSpaceOnUse

PS:patternUnits和patternContentUnits的取值都一样,userSpaceOnUse和objectBoundingBox,只不过默认值不一样。

使用位图示例

复制代码
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
     <defs>
          <pattern id="pattern-image" x="0" y="0" width="0.2" height="0.2">
               <image xlink:href="face.gif" x="0" y="0" width="50" height="50"></image>
          </pattern>
     </defs>
    <rect x="100" y="100" width="400" height="300" fill="url(#pattern-image)" stroke="blue"></rect>
</svg>
复制代码

效果:

 

代码地址

想看文章的代码示例,可以到我的Github下载:https://github.com/codingforme/code-learn/tree/master/svg

 

参考文献

1. http://www.w3school.com.cn/svg/svg_grad_linear.asp

2. http://www.cnblogs.com/lhweb15/p/5489699.html

3. https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Patterns

 

本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

本文地址 :http://www.cnblogs.com/lovesong/p/5971781.html

分类:  1.前端基础

本文转自 海角在眼前 博客园博客,原文链接:http://www.cnblogs.com/lovesong/p/5971781.html    ,如需转载请自行联系原作者
相关文章
|
Linux iOS开发 MacOS
typora下载和破解(仅供学习)
Typora 一款 Markdown 编辑器和阅读器 风格极简 / 多种主题 / 支持 macOS,Windows 及 Linux 实时预览 / 图片与文字 / 代码块 / 数学公式 / 图表 目录大纲 / 文件管理 / 导入与导出 ……
165116 12
typora下载和破解(仅供学习)
|
5月前
|
Shell 测试技术 API
Claude Code 官方内部团队最佳实践!
Immerse,独立开发者、内容创作者、AGI实践者,分享编程、AI、开源等内容。关注公众号“沉浸式趣谈”及个人网站获取更新。欢迎点赞、评论、转发支持!本文介绍Claude Code——智能编程命令行工具及其使用技巧。
3227 0
|
关系型数据库 数据库 文件存储
【赵渝强老师】PostgreSQL的表空间
本文介绍了PostgreSQL中的表空间概念及其操作方法,包括查看现有表空间、创建新表空间、在特定表空间上创建表、设置默认表空间以及查询表空间信息等步骤,并提供了相应的命令示例。
559 1
|
存储 SQL Java
JAVA实现一个数据库
它支持简单的CRUD操作和事务。这个实现中,每一个表都是一个Table对象。每个表都有一个名字、一组列名和列类型,以及一些行。每个行是一个对象数组,其中每个元素都是一个字段的值。表可以被创建、插入行和选择。对于选择,可以选择所有列或只选择特定列。
627 1
|
机器学习/深度学习 编解码 监控
深度学习实战】行人检测追踪与双向流量计数系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、双向计数、行人检测追踪、过线计数(1)
深度学习实战】行人检测追踪与双向流量计数系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、双向计数、行人检测追踪、过线计数
|
JavaScript
Vue 监听输入框(input、textarea ...)粘贴事件获取图片、视频、文件、文件夹
Vue 监听输入框(input、textarea ...)粘贴事件获取图片、视频、文件、文件夹
1397 0
|
JavaScript 前端开发 Java
Keycloak快速上手指南(二)
Keycloak快速上手指南
849 0
|
JSON 数据库 数据安全/隐私保护
Django系列:Django应用(app)的创建与配置
应用是Django项目的组成部分,一个Django项目可以分为多个应用,本文讲解Django应用(app)的创建,并实际完成一个简单应用的配置和开发。
772 0
|
存储 开发工具 对象存储
OSS(Object Storage Service)
OSS(Object Storage Service)是阿里云提供的对象存储服务,是一种海量、安全、低成本、高可靠的云存储服务。OSS 可以存储和管理各种类型的非结构化数据,例如图片、音频、视频、文档等。
922 0
|
JavaScript Android开发 Windows
OpenHarmony应用开发之全局配置参数解析
一般的项目都有全局模块的配置,OpenHarmony系统的应用同样也有这样的一个模块config.json,类似安卓中的AndroidManifest.xml,作用是相似的,配置应用板块,带大家来进一步解析其中的参数,以下给出一般的结构,正文即将开始~~
542 0
OpenHarmony应用开发之全局配置参数解析