css 仅svg一侧的圆角< rect>

vxqlmq5t  于 2023-03-20  发布在  其他
关注(0)|答案(5)|浏览(280)

我正在尝试实现一个像图表一样的条形图。我有下面的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>

我想给予矩形的上角一个圆角形状。这怎么可能?
我无法应用边界半径属性。

epggiuax

epggiuax1#

你也可以使用clipPath,这是一种黑客攻击,但它可能更容易实现。

假设如下:

  • 您的rectwidth="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碰到矩形的底部。

nsc4cvqm

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>
bweufnob

bweufnob3#

正如Robert Longson所评论的,您需要将rect元素转换为path element来控制圆角。
在下面的示例中,我将三次贝塞尔曲线与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>
xtupzzrd

xtupzzrd4#

<path>元素与arc命令配合使用(http://devdocs.io/svg/attribute/d#arcto)。
语法: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>
dsekswqp

dsekswqp5#

剪切路径方法可以通过使用inset基本形状函数(即inset(top, right, bottom, left))来简化,inset(top, right, bottom, left)从形状边界获取px或百分比和插入。
下面的示例将left的偏移设置为等于边界半径,因此左侧具有直边。
css-clip-path的支持相当不错,在opera mini和IE中不起作用。

rect {
  clip-path: inset(0px 0px 0px 25px);
}
<svg>
  <rect width=200 height=100 rx=25 />
</svg>

相关问题