cloudtian / blogs

Summary of knowledge and blogs for every little things
3 stars 0 forks source link

SVG水平线设置渐变效果后水平线消失了 #34

Open cloudtian opened 4 years ago

cloudtian commented 4 years ago

问题

两条水平线(一条通过line绘制,一条通过path绘制,设置渐变后均未显示出来) image

解决

linearGradient设置属性gradientUnits=userSpaceOnUse完美解决 image

MDN地址: linearGradient gradientUnits
gradientUnits 渐变单元,它描述了用来描述渐变的大小和方向的单元系统。取值有userSpaceOnUse | objectBoundingBox其默认值是objectBoundingBox

objectBoundingBox: 表示属性的用户坐标系统是使用渐变应用到元素的边界框建立的,百分比值是相对于对象的边框的。(我们目前看到的效果都是这种系统下,它大体上定义了对象的渐变大小范围,所以只要指定从0到1的坐标值,渐变就会自动的缩放到对象相同大小)

而水平线或垂直线是没有高或宽的,所以失效

userSpaceOnUse: 表示属性代表了当前用户坐标系统的值。这些值是在引用梯度元素时将当前用户坐标系统置于适当的位置。百分比的值是相对于当前SVG视图。

userSpaceOnUse使用绝对单位,所以必须知道对象的位置,并将渐变放在同样地位置上。 如果使用的相对单位,则为相对于SVG视图的位置,元素在渐变方向时如果未占满SVG视图,就只是渐变过程中的一部分

效果对比

image

说明

渐变说明
图形说明