我正在尝试实现一个像图表一样的条形图。我有下面的html元素
<rect x="35" y="-135" width="10" height="51" style="stroke: rgb(255, 255, 255); opacity: 0.8; fill: rgb(255, 122, 0);"></rect>
我想给予矩形的上角一个圆角形状。这怎么可能?我无法应用边界半径属性。
epggiuax1#
你也可以使用clipPath,这是一种黑客攻击,但它可能更容易实现。
clipPath
假设如下:
rect
width="10"
height="51"
rx="5"
ry="5"
<svg> <defs> <clipPath id="round-corner"> <rect x="0" y="0" width="10" height="56" rx="5" ry="5"/> </clipPath> </defs> <!-- if you want to use x="35" y="-135" put clip-path on a `g` element --> <rect width="10" height="51" clip-path="url(#round-corner)" style="stroke: rgb(255, 255, 255); opacity: 0.8; fill: rgb(255, 122, 0);"></rect> </svg>
部分注解:
因此clipPath > rect > width与您的rect完全相同。对于clipPath > rect > height,您必须考虑顶部的圆角半径,因此高度应为rect.height + desired-corner-radius(在本例中为51px + 5px)。这样你就不会用clipPath碰到矩形的底部。
clipPath > rect > width
clipPath > rect > height
rect.height
desired-corner-radius
nsc4cvqm2#
写了一篇文章解释这个https://medium.com/@dphilip/one-side-rounded-rectangle-using-svg-fb31cf318d90
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> <path d="M10,40 h50 q5,0 5,5 v10 q0,5 -5,5 h-50 z " fill="#4EDFA5" > <svg>
bweufnob3#
正如Robert Longson所评论的,您需要将rect元素转换为path element来控制圆角。在下面的示例中,我将三次贝塞尔曲线与Q命令结合使用,以生成左上角的圆角(d属性中的Q1 1 5 1):
Q
d
Q1 1 5 1
svg{ height:90vh; width:auto; }
<svg viewbox="0 0 10 50"> <path d="M1 49 V5 Q1 1 5 1 H9 V49z" fill="rgba(255, 122, 0, 0.8)" /> </svg>
xtupzzrd4#
将<path>元素与arc命令配合使用(http://devdocs.io/svg/attribute/d#arcto)。语法:a rx,ry x-axis-rotation large-arc-flag sweep-flag dx,dy
<path>
arc
a rx,ry x-axis-rotation large-arc-flag sweep-flag dx,dy
<svg width="200" height="200" viewBox="0 0 10 10"> <path d="M0,8 v-3 a5,5 0 0 1 5,-5 h3 v8 z" /> </svg>
dsekswqp5#
剪切路径方法可以通过使用inset基本形状函数(即inset(top, right, bottom, left))来简化,inset(top, right, bottom, left)从形状边界获取px或百分比和插入。下面的示例将left的偏移设置为等于边界半径,因此左侧具有直边。对css-clip-path的支持相当不错,在opera mini和IE中不起作用。
inset
inset(top, right, bottom, left)
rect { clip-path: inset(0px 0px 0px 25px); }
<svg> <rect width=200 height=100 rx=25 /> </svg>
5条答案
按热度按时间epggiuax1#
你也可以使用
clipPath
,这是一种黑客攻击,但它可能更容易实现。假设如下:
rect
是width="10"
和height="51"
rx="5"
和ry="5"
部分注解:
因此
clipPath > rect > width
与您的rect
完全相同。对于
clipPath > rect > height
,您必须考虑顶部的圆角半径,因此高度应为rect.height
+desired-corner-radius
(在本例中为51px + 5px)。这样你就不会用
clipPath
碰到矩形的底部。nsc4cvqm2#
写了一篇文章解释这个https://medium.com/@dphilip/one-side-rounded-rectangle-using-svg-fb31cf318d90
bweufnob3#
正如Robert Longson所评论的,您需要将rect元素转换为path element来控制圆角。
在下面的示例中,我将三次贝塞尔曲线与
Q
命令结合使用,以生成左上角的圆角(d
属性中的Q1 1 5 1
):xtupzzrd4#
将
<path>
元素与arc
命令配合使用(http://devdocs.io/svg/attribute/d#arcto)。语法:
a rx,ry x-axis-rotation large-arc-flag sweep-flag dx,dy
dsekswqp5#
剪切路径方法可以通过使用
inset
基本形状函数(即inset(top, right, bottom, left)
)来简化,inset(top, right, bottom, left)
从形状边界获取px或百分比和插入。下面的示例将left的偏移设置为等于边界半径,因此左侧具有直边。
对css-clip-path的支持相当不错,在opera mini和IE中不起作用。