svg 属性详解:填充与边框

news2024/11/16 17:36:57

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

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

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

相关文章

第十六讲_HarmonyOS应用程序包介绍

HarmonyOS应用程序包介绍 1. 应用程序包概述1.1 多 Module 设计的好处1.2 Module 的类型 2. 应用程序包结构2.1 应用的配置文件2.2 资源目录 3. 应用程序编译后包结构 1. 应用程序包概述 官方推荐基于Stage模型开发HarmonyOS应用程序&#xff0c;一个应用可以包含一个或多个Mo…

计算机基础之微处理器简介

微处理器 微处理器定义 微型计算机的CPU也被称为微处理器&#xff0c;是将运算器、控制器和高速缓存集成在一起的超大规模集成电路芯片&#xff0c;是计算机的核心部件。能完成取指令、执行指令&#xff0c;以及与外界存储器和逻辑部件交换信息等操作。 微处理器发展 CPU从…

研发日记,Matlab/Simulink避坑指南(七)——数据溢出钳位Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结归纳 前言 见《研发日记&#xff0c;Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》 见《研发日记&#xff0c;Matlab/Simulink避坑指南(三)——向上取整Bug》 见《研发日记&#xff0c;Matlab/Simulink避坑…

【CSS】实现鼠标悬停图片放大的几种方法

1.背景图片放大 使用css设置背景图片大小100%&#xff0c;同时设置位置和过渡效果&#xff0c;然后使用&#xff1a;hover设置当鼠标悬停时修改图片大小&#xff0c;实现悬停放大效果。 <!DOCTYPE html> <html lang"en"> <head><meta charset…

C++大学教程(第九版)7.19 将7.10节vector对象的例子转换成array对象

文章目录 题目代码运行截图 题目 (将7.10节vector 对象的例子转换成array 对象)将图7.26中 vector 对象的例子转换成使用array 对象。请消除任何 vector 对象仅有的特性。 分析&#xff1a; vector对象独有的特性&#xff1a; 1.vector对象长度可变 2.长度不同的vector对象可…

基于springboot校友社交系统源码和论文

校友社交系统提供给用户一个校友社交信息管理的网站&#xff0c;最新的校友社交信息让用户及时了解校友社交动向,完成校友社交的同时,还能通过论坛中心进行互动更方便。本系统采用了B/S体系的结构&#xff0c;使用了java技术以及MYSQL作为后台数据库进行开发。系统主要分为系统…

为什么选择快速应用开发:提高业务响应速度与竞争力的关键

如今&#xff0c;企业想要持续蓬勃发展&#xff0c;就需要具备快速满足客户期望的能力。无论是十几年历史的重要市场占有者推出新的APP&#xff0c;还是在疫情期间从线下转向线上电商营销&#xff0c;企业都需要主动适应市场。随着为客户提供新的服务方式&#xff0c;员工也需要…

以前年度资产价值导入以及汇率自动计算解决方案

文章目录 1 Introduction2 Code3 Summary 1 Introduction In the example we will finish ABLDT function and modify asset value . 2 Code DATA: key TYPE bapi1022_key,generaldata TYPE bapi1022_feglg001,generaldatax TYPE bapi1…

品牌突围|内容营销「共创公式」全面讲解

为什么品牌要扎根小红书&#xff1f;除了种草投放&#xff0c;品牌还能做些什么&#xff1f; 在小红书&#xff0c;迎接消费者共创的时代&#xff0c;激活品牌营销的无限潜能。 拥抱多元 在新机遇中预见未来 2023年&#xff0c;各大社交媒体平台涌现出了许多热点&#xff0c…

keil使用教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据 总结 前言 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重…

jupyter python笔记杂乱

问题产生的原因: 无法执行sess.run()的原因是tensorflow版本不同导致的&#xff0c;tensorflow版本2.0无法兼容版本1.0 解决办法: tf.compat.v1.disable_eager_execution() 确保tf’2能运行tf1的代码 notebok打开指定文件夹 直接解决

代码随想录刷题笔记-Day12

1. 二叉树的递归遍历 144. 二叉树的前序遍历https://leetcode.cn/problems/binary-tree-preorder-traversal/94. 二叉树的中序遍历https://leetcode.cn/problems/binary-tree-inorder-traversal/145. 二叉树的后续遍历https://leetcode.cn/problems/binary-tree-postorder-tra…

鸿蒙:@Link装饰器-父子双向同步

子组件中被Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。从API version 9开始&#xff0c;该装饰器支持在ArkTS卡片中使用。 需要注意&#xff1a;Link装饰的变量与其父组件中的数据源共享相同的值。Link装饰器不能在Entry装饰的自定义组件中使用。 一、装饰器使…

【word】论文、报告:①插入图表题注,交叉引用②快速插入图表目录③删改后一键更新

【word】①插入图表题注&#xff0c;②删改后一键更新 写在最前面插入题注交叉引用修改插入题注的文字格式快速插入图表目录 插入题注后有删改&#xff0c;实现编号一键更新 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你…

按配置数据绘制配置型地图marker的icon,自定义marker

一、需求 需要自定义配置数据的marker&#xff0c;其中图片内容要灵活可配置自动生成。此处项目用的百度地图。 效果图&#xff1a; 二、思路 用背景图canvas绘制数字的方式生成icon的图片资源。 再将icon生成对应地图marker。 三、代码 canvasImg.js <!-- * descrip…

【misc | CTF】攻防世界 适合作为桌面

天命&#xff1a;这题还挺繁琐的&#xff0c;知识点还不少 目录 步骤1&#xff1a;图片隐写 步骤2&#xff1a;Winhex查看ascii码 步骤1&#xff1a;图片隐写 拿到这张图片&#xff0c;不可能扔进ps会有多图层&#xff0c;普通图片也就一个图层而已 但居然可以有隐写图片这…

数据结构之生成树及最小生成树

数据结构之生成树及最小生成树 1、生成树概念2、最小生成树 数据结构是程序设计的重要基础&#xff0c;它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发&#xff0c;分析和研究计算机加工的数据的特性&#xff0c;以便为应用所…

Linux-ROS学习之旅-话题编程(二)

##承接上一篇文章的知识&#xff0c;有下面的实例操作 通过代码新生一个海龟&#xff0c;放置在(5,5)点&#xff0c;命名为turtle2&#xff0c;通过代码订阅turtle2的实时位置并打印在终端&#xff0c;控制turtle2实现旋转运动 步骤&#xff1a; 1.创建一个工作空间和一个功…

可以实时监控电脑的软件有哪些?好用的四款电脑监控软件【高人气收藏分享】

在当今数字化时代&#xff0c;电脑已经成为我们工作和生活中不可或缺的工具。然而&#xff0c;有时候我们需要对电脑进行监控&#xff0c;以确保工作效率和保护个人隐私。因此&#xff0c;选择一款好的电脑监控软件非常重要。本文将介绍四款好用的电脑监控软件&#xff0c;并探…

行测-资料:1. 速算技巧、基期与现期

1、速算技巧 1.1 截位直除 1.1.1 截位 1.1.2 截谁 1.1.3 截几位 选项差距大&#xff1a; 四个选项首位均不同首位相同&#xff0c;第二位差大于首位 选项差距小&#xff1a; 首位相同且第二位差小于等于首位 例子 C&#xff0c;截两位。 C&#xff0c;截两位。 B&#xff0c;截…