You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SVG ellipse元素是否支持反向填充?如何实现椭圆外区域填充效果

<ellipse>本身没有直接的反向填充属性,无法仅填充椭圆外侧区域,但是可以通过以下两种成熟方案实现需求,均保留原有<image>元素:


方案1:反向填充遮罩(椭圆外显示指定填充色,椭圆内部透出原图)

核心是用path绘制外框+内部椭圆的组合路径,配合fill-rule="evenodd"规则,让重叠的椭圆区域不被填充,刚好符合你要的「灰色仅在椭圆外侧边角显示」的需求。
你之前写的path不符合预期就是缺少了fill-rule属性设置,调整后的完整代码如下:

<svg viewBox="0 0 600 1200" xmlns="http://www.w3.org/2000/svg">
  <image x="0" y="0" height="200" width ="100" xlink:href="https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/IKB_191.jpg/1200px-IKB_191.jpg" />
  <!-- 反向填充的灰色遮罩 -->
  <path fill="grey" fill-rule="evenodd"
    d="
    M 0 0 H 600 V 1200 H 0 V 0  <!-- 绘制整个SVG画布的外框矩形 -->
    M 50 100 a 50 62 0 1 0 100 0 a 50 62 0 1 0 -100 0  <!-- 绘制内部椭圆路径 -->
  "/>
  <!-- 可选:额外加椭圆外边框 -->
  <ellipse cx="50" cy="100" rx="50" ry="62" stroke="black" stroke-width="2" fill="none" />
</svg>

方案2:裁剪图片+椭圆边框(仅显示椭圆范围内的图片,外围加边框)

如果不需要椭圆外侧的填充色,只是要图片实现类border-radius:50%的椭圆显示效果加边框,可以用clipPath对图片做裁剪,代码更简洁:

<svg viewBox="0 0 600 1200" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <clipPath id="ellipseClip">
      <ellipse cx="50" cy="100" rx="50" ry="62" />
    </clipPath>
  </defs>
  <!-- 图片应用椭圆裁剪 -->
  <image x="0" y="0" height="200" width ="100" xlink:href="https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/IKB_191.jpg/1200px-IKB_191.jpg" clip-path="url(#ellipseClip)" />
  <!-- 椭圆外边框 -->
  <ellipse cx="50" cy="100" rx="50" ry="62" stroke="black" stroke-width="2" fill="none" />
</svg>

方案选择建议

  • 需要保留椭圆外侧区域的填充色,选方案1
  • 仅需要图片显示为椭圆形状、外围加边框,选方案2

内容的提问来源于stack exchange,提问作者Canovice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:36:02