svg 属性详解:填充与边框

svg 属性详解:填充与边框

  • 1 颜色和透明度
  • 2 填充规则 fill-rule
  • 3 边框样式
    • 3.1 stroke-width
    • 3.2 stroke-linecap
    • 3.3 stroke-linejoin
    • 3.4 stroke-dasharray

1 颜色和透明度

颜色和透明度

图像都有颜色,svg 中可以使用属性 fillstroke 来修改图形的颜色。fill 属性设置对象的内部颜色,stroke 属性设置绘制对象的线条的颜色。
颜色的取值可以参考 HTML 中 CSS 颜色命名方案,包括颜色名(比如“blue”),rgb 值(比如 rgb(0,0,255))、十六进制(比如 #0000FF) 等,参考 Colors Home 中颜色的定义。
透明度是另一个常见的图像属性, svg 中可以使用 opacity 属性来控制整个图像的透明度,也可以通过 fill-opacitystroke-opacity 来分别定义填充色和边框的透明度。

<?xml version="1.0" standalone="no"?>
<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" version="1.1"><g stroke-width="5"> <rect x="70" y="95" width="80" height="90" fill="#FF0000" stroke="#00008B" /><rect x="125" y="145" width="100" height="80"fill="Gold" fill-opacity="0.8" stroke="Lavender" /><rect x="80" y="45" width="140" height="60"fill="rgb(255,102,255)" stroke="rgb(0,0,255)" stroke-opacity="0.4" /><rect x="20" y="150" width="75" height="60"fill="Purple" stroke="DeepPink" opacity="0.5"/>
</g></svg>

上面的代码分别绘制了下面四个矩形,设置边框宽度为 4 以便查看边框透明效果:
在这里插入图片描述

2 填充规则 fill-rule

对于一个简单的、没有交错的路径来说,判断它的内部区域是很容易的。但是一些复杂的路径,比如与自身相交的路径,或者路径的其中一段包围着另一段,要判断它的内部区域,就没那么容易了。
fill-rule 是一个表现属性,用来定义一个多边形内部区域的算法。该属性为如何确定一个图形的内部提供了两个可选值:
fill-rule
下面图示也许更浅显易懂,箭头显示路径的方向:
fill-rule 图形解释
如何为图形设置 fill-rule 属性,这里给出一个例子,绘制上面图示 A 组的两个五角星:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg"><path d="M 100 20 L 129.39 110.45 L 52.45 54.55L 147.55 54.55 L 70.61 110.45 Z"fill="Red" stroke="Black" />
<g transform="translate(150,0)"><path d="M 100 20 L 129.39 110.45 L 52.45 54.55L 147.55 54.55 L 70.61 110.45 Z"fill="Red" fill-rule="evenodd" stroke="Black"/>
</g></svg>

3 边框样式

边框除了有颜色属性,还有几何属性,参考下面的表格:
stroke 相关属性

3.1 stroke-width

stroke-width 用来定义边框的宽度,注意,边框的宽度是以路径为中心向两边伸展的,可以参考下面的例子:

<?xml version="1.0" standalone="no"?>
<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" version="1.1"><circle cx="85" cy="85" r="50" fill="Red"stroke="Blue" stroke-opacity="0.5" stroke-width="20"/></svg>

这里设置了边框不透明度为 stroke-opacity=20,可以清楚得看到边框是如何绘制的:
在这里插入图片描述

3.2 stroke-linecap

stroke-linecap 用于控制边框终点的形状。

<?xml version="1.0" standalone="no"?>
<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" version="1.1"><rect width="180" height="170" fill="none" stroke-dasharray="3,3" stroke="black" />
<g stroke-width="20" stroke="Darkgray"><line x1="40" y1="40" x2="140" y2="40" stroke-linecap="butt" /><line x1="40" y1="80" x2="140" y2="80" stroke-linecap="square"/><line x1="40" y1="120" x2="140" y2="120" stroke-linecap="round"/>
</g><g stroke="Black"><line x1="40" y1="40" x2="140" y2="40" /><line x1="40" y1="80" x2="140" y2="80" /><line x1="40" y1="120" x2="140" y2="120" />
</g></svg>

为了方便看清效果,这里画出了没有设置 stroke-linecap 属性的线段(中间的黑色线条):

butt 是默认的效果,用直边来结束线段,线段边界 90 度垂直于描边的方向。square 和 butt 的效果差不多,只是两端会稍微超出实际路径的范围,超出的大小取决于 stroke-width。round 用于绘制圆角,圆角的半径也是取决于 stroke-width。

3.3 stroke-linejoin

stroke-linejoin 用于表达两段路径之间用什么方式来连接。

<?xml version="1.0" standalone="no"?>
<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" version="1.1"><g stroke-width="16" stroke="Darkgray" fill="none"><path d="M 20 60 L 100 60 A 40 40 0 0 0 180 60" stroke-linejoin="miter" /><path d="M 20 160 L 100 160 A 40 40 0 0 0 180 160" stroke-linejoin="round"/><path d="M 20 260 L 100 260 A 40 40 0 0 0 180 260" stroke-linejoin="bevel"/><rect x="260" y="40" width="100" height="70" stroke-linejoin="miter" /><rect x="260" y="140" width="100" height="70" stroke-linejoin="round" /><rect x="260" y="240" width="100" height="70" stroke-linejoin="bevel" />
</g><g stroke="Black" fill="none"><path d="M 20 60 L 100 60 A 40 40 0 0 0 180 60" /><path d="M 20 160 L 100 160 A 40 40 0 0 0 180 160" /><path d="M 20 260 L 100 260 A 40 40 0 0 0 180 260" /><rect x="260" y="40" width="100" height="70" /><rect x="260" y="140" width="100" height="70" /><rect x="260" y="240" width="100" height="70" />
</g></svg>

在不显式指定 stroke-linejoin 的值时,默认使用 miter。miter 表示用方向笔在连接处形成尖角,round 表示用圆角连接,实现平滑效果。bevel 会在连接处形成一个斜接。需要注意的是,stroke-linejoin 不仅可以用于path,也可以用于 rect 元素。

与 stroke-linejoin 相关的还有 stroke-miterlimit 属性,我们已经知道,miter 会在路径的连接处形成一个尖角,尖角的样式取决于 stroke-width 和两路径的夹角。
stroke-miterlimit
参考下面图示:
斜接和夹角
事实上,没有显式指定 stroke-miterlimit 的情况下,在 stroke-linejoin=“miter” 时,默认 stroke-miterlimit=4,如果需要在任意情况下保留斜接,可以给 stroke-miterlimit 赋一个很大的值。
关于如何设置斜接限制,这里给了一个例子:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<rect width="275" height="200" fill="none" stroke-dasharray="3,3" stroke="black" />
<path d="M 40 40 L 20 100 H 100 A 50 50 30 0 0 85 163.3" fill="none" stroke-width="10" stroke="DimGray" stroke-linejoin="miter" stroke-miterlimit="2" />
<rect x="170" y="40" width="80" height="100"fill="none" stroke-width="10" stroke="DimGray" stroke-linejoin="miter" stroke-miterlimit="1" /></svg>

上面的代码绘制了如下两个图形,可以看到,同一个 path 的多个路径连接处,storke-miterlimit 只对符合限制条件的斜接转换为斜角。stroke-miterlimit 也同样适用于 rect 元素。

3.4 stroke-dasharray

stroke-dasharray 用于将虚线类型应用与边框上。通过用一组以逗号分隔的数字来定义虚线的样式(注意与 path 的 d 属性进行区分,path 中 d 的参数用空格来进行区分)。每一组数字,第一个数字用来表示填色区域的长度,第二个用来表示非填色区域的长度,若还有其他数字,则跟前两个数字代表的含义一致。参考下面一个简单的例子:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg"><line x1="20" y1="50" x2="220" y2="50" stroke-dasharray="40,20" stroke="Pink"stroke-width="10" /><line x1="20" y1="50" x2="220" y2="50" stroke="Black" />
</svg>

上面的代码在同一位置上绘制了两条线,其中一条设置了虚线样式,下面图示展示了虚线是如何应用到图形上:
设置虚线样式
注意虚线最后一段填充区域,因为图形在这里绘制完毕,所以最后一段只有20。
使用 stroke-dashoffset 可以自定义虚线开始的位置,参考下面的例子:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg"><path d="M 40 60 L 180 60 L 250 70" stroke-dashoffset="15" stroke-dasharray="40,25" stroke="Red" stroke-width="4" fill="none" />
<path d="M 40 60 L 180 60 L 250 70" stroke="Black" fill="none" />
<path d="M 40 60 h 50" stroke-width="10" stroke="Green" opacity="0.3" /><path d="M 40 180 L 180 180 L 250 190"stroke-dashoffset="95" stroke-dasharray="40,25"stroke="Red" stroke-width="4" fill="none" />
<path d="M 40 180 L 180 180 L 250 190"stroke="Black" fill="none" />
<path d="M 40 180 h 35" stroke-width="10"stroke="Green" opacity="0.3" /</svg>

下面图示展示 strokke-dashoffset 是如何应用的:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/650646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

九州金榜|家庭教育中孩子厌学原因及解决办法

作为家长我们希望自己的孩子热爱学习&#xff0c;并取得优异成绩。但是&#xff0c;在现实中&#xff0c;孩子往往会出现厌学情绪&#xff0c;作为家长为此感到非常困扰。如何帮助孩子克服厌学情绪&#xff0c;九州金榜家庭教育将会带大家找出背后的原因&#xff0c;并寻找有效…

Tortoise-tts Better speech synthesis through scaling——TTS论文阅读

笔记地址&#xff1a;https://flowus.cn/share/a79f6286-b48f-42be-8425-2b5d0880c648 【FlowUs 息流】tortoise 论文地址&#xff1a; Better speech synthesis through scaling Abstract: 自回归变换器和DDPM&#xff1a;自回归变换器&#xff08;autoregressive transfo…

SpringSecurity(15)——OAuth2密码模式

工作流程 将用户和密码传过去&#xff0c;直接获取access_token&#xff0c;用户同意授权动作是在第三方应用上完成&#xff0c;而不是在认证服务器&#xff0c;第三方应用申请令牌时&#xff0c;直接带用户名和密码去向认证服务器申请令牌。这种方式认证服务器无法判断用户是…

网站服务器中毒或是被入侵该怎么办?

随着互联网的普及和发展&#xff0c;网站服务器已经成为了企业和个人存储数据、展示信息的重要平台。然而&#xff0c;网络安全问题也日益突出&#xff0c;其中网站服务器中毒或被入侵的事件时有发生。一旦发生这种情况&#xff0c;不仅会导致网站无法正常运行&#xff0c;还可…

阿里云负载均衡对接

1 、开通负载均衡产品 2 、ALB / NLB / CLB ALB&#xff1a; 应用型负载均衡 &#xff0c; 给定对应服务域名与当前实例DNS绑定之后即可使用 支持&#xff1a; HTTP/HTTPS/QUIC等应用层流量协议 NLB&#xff1a; 网络型负载均衡 支持&#xff1a; TCP / UDP / TCPSSL C…

浏览器——HTTP缓存机制与webpack打包优化

文章目录 概要强缓存定义开启 关闭强缓存协商缓存工作机制通过Last-Modified If-Modified-Since通过ETag If-None-Match 不使用缓存前端利用缓存机制&#xff0c;修改打包方案webpack 打包webpack 打包名称优化webpack 默认的hash 值webapck其他hash 类型配置webpack打包 web…

STM32连接阿里云物联网平台

文章目录 引言一、STM32连接阿里云物联网平台思路二、ESP8266烧录固件三、使用AT指令连接阿里云物联网平台四、STM32环形串口缓冲区驱动程序五、STM32连接阿里云驱动程序 引言 连续写了两篇关于阿里云连接的文章&#xff0c;都是使用Arduino ESP8266 & Arduino ESP32的方式…

什么是网络安全?网络安全概况

网络安全涉及保护我们的计算机网络、设备和数据免受未经授权的访问或破坏。 这个领域包括多种技术、过程和控制措施&#xff0c;旨在保护网络、设备和数据免受攻击、损害或未授权访问。网络安全涉及多个方面&#xff0c;包括但不限于信息安全、应用程序安全、操作系统安全等 …

Chain-of-Thought Prompting Elicits Reasoning in Large Language Models导读

通过生成一系列中间推理步骤&#xff08;即“思维链”&#xff09;显著提高大型语言模型进行复杂推理的能力 这篇论文探讨了如何通过生成一系列中间推理步骤&#xff08;即“思维链”&#xff09;显著提高大型语言模型进行复杂推理的能力。研究人员使用一种简单的方法——思维…

【PyTest】玩转HTML报告:修改、汉化和优化

前言 Pytest框架可以使用两种测试报告&#xff0c;其中一种就是使用pytest-html插件生成的测试报告&#xff0c;但是报告中有一些信息没有什么用途或者显示的不太好看&#xff0c;还有一些我们想要在报告中展示的信息却没有&#xff0c;最近又有人问我pytest-html生成的报告&a…

重磅!讯飞星火V3.5马上发布!AI写作、AI编程、AI绘画等功能全面提升!

讯飞星火大模型相信很多友友已经不陌生了&#xff0c;可以说是国内GPT相关领域的龙头标杆&#xff0c;而对于1月30日即将在讯飞星火发布会发出的V3.5新版本来说&#xff0c;讯飞星火V3.5与之前版本相比&#xff0c;性能提升方面相当明显&#xff0c;在提示语义理解、内容生成、…

代码随想录算法训练营29期|day32 任务以及具体安排

第八章 贪心算法 part02 122.买卖股票的最佳时机II // 贪心思路 class Solution {public int maxProfit(int[] prices) {int result 0;for (int i 1; i < prices.length; i) {result Math.max(prices[i] - prices[i - 1], 0);}return result;} } 思路&#xff1a;将股票问…

shell脚本登录dlut-lingshui并设置开机连网和断网重连

本文提供了一个用于无图形界面linux系统自动连接dlut-lingshui校园网的shell脚本&#xff0c;并提供了设置开机联网以及断网重连的详细操作步骤。本文的操作在ubuntu 22.04系统上验证有效&#xff0c;在其他版本的linux系统上操作时遇到问题可以自行百度。 1. 获取校园网认证界…

单片机学习笔记---独立按键控制LED显示二进制

这节我们来实现独立按键的第三个功能&#xff0c;独立按键控制LED显示二进制 新创建一个工程文件&#xff0c;然后上来我们就要把基本框架写好&#xff0c;这是基本的习惯 老规矩&#xff0c;然后把Delay 1ms的代码复制过来 复制过来后改造一下&#xff1a; 把1ms删掉&#x…

数据结构和算法笔记5:堆和优先队列

今天来讲一下堆&#xff0c;在网上看到一个很好的文章&#xff0c;不过它实现堆是用Golang写的&#xff0c;我这里打算用C实现一下&#xff1a; Golang: Heap data structure 1. 基本概念 满二叉树&#xff08;二叉树每层节点都是满的&#xff09;&#xff1a; 完全二叉树&a…

微信小程序(十二)在线图标与字体的获取与引入

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.从IconFont获取图标与文字的样式链接 2.将在线图标配置进页面中&#xff08;源码&#xff09; 3.将字体配置进页面文字中&#xff08;源码&#xff09; 4.css样式的多文件导入 获取链接 1.获取图标链接 登入…

ABAP 状态栏排除某些按钮

ABAP 状态栏排除某些按钮 GUI State状态栏 在状态栏这里有这些按钮&#xff0c;现在在导出界面要排除掉这些按钮&#xff1a; 将要排除的按钮追加到gt_code内表&#xff1a; gt_fcode功能码内表的定义 DATA:gt_fcode TYPE TABLE OF sy-ucomm,完整程序 *&---------…

上位机图像处理和嵌入式模块部署(python opencv)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们谈到了qt&#xff0c;谈到了opencv&#xff0c;也谈到了嵌入式&#xff0c;但是没有说明python在这个过程当中应该扮演什么样的角色。open…

【Linux】Linux进程间通信

Linux进程间通信 一、进程间通信介绍1、概念2、进程间通信目的3、进程间通信的本质4、进程间通信分类 二、管道1、什么是管道2、匿名管道&#xff08;1&#xff09;匿名管道原理&#xff08;2&#xff09;pipe函数&#xff08;3&#xff09;匿名管道的使用步骤i、父进程调用pip…

【汇总】解决Spring-Web与Spring-WebFlux冲突

【汇总】解决Spring-Web与Spring-WebFlux冲突 问题发现问题解决问题一&#xff1a;The bean requestMappingHandlerMapping, defined in class path resource [org/springframework/web/reactive/config/DelegatingWebFluxConfiguration.class],问题二&#xff1a;The Java/XML…