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.55
        L 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.55
            L 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 是如何应用的:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

真香一个团队协作工具部署

部署 version: "3.4"services:mongo:image: mongocontainer_name: twake-dbvolumes:- /opt/Twake/data:/data/dbnode:image: twaketech/twake-node:latestcontainer_name: twake-webports:- 3345:3000# - 8000:3000environment:- DEVproduction- SEARCH_DRIVERmong…

「 网络安全术语解读 」通用攻击模式枚举和分类CAPEC详解

引言&#xff1a;在网络安全领域&#xff0c;了解攻击者的行为和策略对于有效防御攻击至关重要。然而&#xff0c;攻击模式的描述和分类方式缺乏统一性和标准化。为了解决这个问题&#xff0c;MITRE公司创建了CAPEC标准&#xff0c;以提供一个共享和统一的攻击模式分类框架。 1…

用友U8接口-系统管理(3)

教程目录 部署和简要说明(1) 获取token&数据字段(2) 概括 本文的操作需要正确部署U8HttpApi对本套接口系统管理目录说明 系统管理 获取token 参考获取token 根据sql进行查询 此POST方式接口运行调用者传入SQL语句&#xff0c;或者将SQL语句写到xml文件中&#xff0…

Redis 面试题 | 13.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

如何实现无公网IP实现远程访问MongoDB文件数据库

&#x1f4d1;前言 本文主要是如何实现无公网IP实现远程访问MongoDB文件数据库的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x…

快递对账教程

对企业行政人员来说&#xff0c;快递对账管理&#xff0c;应该是工作中最为头疼之事了。 最开始寄快递还是手写纸质快递单的时候&#xff0c;对企业行政来说&#xff0c;快递对账管理&#xff0c;本来就是一件麻烦事。当时大部分企业采用的都是寄前审批&#xff0c;寄后报销的…

数据结构·顺序表经典例题(双指针)

本节讲解两道顺序表经典例题&#xff0c;运用到了双指针的思想 双指针并不是两个指针&#xff0c;而是用两个类似指针的东西去扫描数组&#xff0c;以达到简化运算的效果 1. 移除元素 OJ链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平…

五、Flask学习之MySQL

五、Flask学习之MySQL 1. 下载MySQL 下载教程&#xff1a;MySQL安装及可视化工具SQLyog下载 2.常用指令 2.1. 查看已有数据库 show databases;2.2. 创建数据库 create database 名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;2.3. 删除数据库 drop database 名字;…

《WebKit 技术内幕》学习之十五(4):Web前端的未来

4 Cordova项目 Cordova是一个开源项目&#xff0c;能够提供将Web网页打包成本地应用格式的可运行文件。读者可能对Cordova项目陌生&#xff0c;但是大家可能对它的前身非常熟悉&#xff0c;那就是PhoneGap项目&#xff0c;它后来被Adobe公司收购。 图15-4描述了Cordova的主要工…

Topaz Video AI:无损放大,让你的视频更清晰!

在当今的数字时代&#xff0c;视频内容的重要性越来越受到人们的关注。无论是在社交媒体上分享生活片段&#xff0c;还是在商业领域中制作宣传视频&#xff0c;人们都希望能够展现出更高质量的视频内容。 然而&#xff0c;由于各种原因&#xff0c;我们经常会面临一个问题&…

港口集装箱堆场温湿度监控MQTT无线传输智能节点

设备互联互通的时代已经到来&#xff0c;不同的设备之间需要实现数据互通&#xff0c;提高生产效率和管理效率。因此&#xff0c;一款功能齐全、性能稳定的设备显得尤为重要。我们来介绍一款4G/5G无线远程io模块。具有8DI兼容干湿节点、4DO继电器、6AI可选电流型4-20mA电压型0-…

常规的管理系统除了适用该有的范儿一定要有!气质上不能输

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 常规的管理系统除了适用该有的范儿一定要有!气质上不能输 在现今快速发展的商业环境中…

HCIA学习作业三

要求&#xff1a; 拓扑图&#xff1a; <AR1>ping 5.5.5.1 <AR1>display ip interface brief <AR1>display ip routing-table <AR1>display ip routing-table protocol static <AR2>ping 5.5.5.1 <AR2>display ip interface brief <…

openssl3.2 - 测试程序的学习

文章目录 openssl3.2 - 测试程序的学习概述笔记openssl3.2 - 测试程序的学习 - test\aborttest.copenssl3.2 - 测试程序的学习 - test\sanitytest.copenssl3.2 - 测试程序的学习 - test\acvp_test.copenssl3.2 - 测试程序的学习 - test\aesgcmtest.cEND openssl3.2 - 测试程序的…

Redis2-事务 连接Java 整合springboot 注解缓存

一、订阅和发布 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可以收到消息 发布订阅的代…

C# 使用 SapNwRfc 调用SAP RFC

好久没写过相关代码&#xff0c;今天又来贡献一篇 C# 使用 SapNwRfc 调用SAP RFC。用VS2022的WINFORM应用程序&#xff0c;使用NuGet中的SapNwRfc类库&#xff0c;call SAP系统中的RFC&#xff0c;传入7个参数&#xff0c;得到RFC返回的2张表的数据。 一、VS2022中新建WINFORM…

【汇总】解决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…

C语言-算法-背包

[USACO07DEC] Charm Bracelet S&#xff08;01背包&#xff09; 题目描述 Bessie has gone to the mall’s jewelry store and spies a charm bracelet. Of course, she’d like to fill it with the best charms possible from the N (1 ≤ N ≤ 3,402) available charms. E…

基于frp工具实现内网穿透,跨局域网远程SSH登录

文章目录 一.概述1.1 为什么要内网穿透&#xff1f;1.2 什么是frp&#xff1f; 二.frp安装管理流程2.1 frp下载2.2 部署2.3 通过systemd系统服务管理启动程序 三.frp配置测试&#xff08;通过SSH访问内网机器C&#xff09;3.1 服务端配置文件frps.toml修改3.2 客户端配置文件fr…

深入解析HTTPS:安全机制全方位剖析

随着互联网的深入发展&#xff0c;网络传输中的数据安全性受到了前所未有的关注。HTTPS&#xff0c;作为HTTP的安全版本&#xff0c;为数据在客户端和服务器之间的传输提供了加密和身份验证&#xff0c;从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的…