html - 用 SVG 剪出半个圆头

标签 html css svg path clip

嘿,我正在尝试实现以下修复标题形状。

它应该是响应式的并保持形状,我想使用背景 SVG,但我正在努力切掉内圆部分而不是将其设为黑色并响应式缩放它。

enter image description here

body {
  height: 1000px;
}


.circle {
    padding-top: 4rem;
    height: calc(100% - 4rem);
    /* margin-bottom: -4rem; */
    background-size:cover;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='0 0 500 250' preserveAspectRatio='xMinYMin meet'%3E %3Ccircle fill='evenodd' cx='250' cy='250' r='250' /%3E %3C/svg%3E");

}
<link href="https://cdn.jsdelivr.net/npm/tailwindcss/dist/tailwind.min.css" rel="stylesheet"/>

<header class="fixed w-screen h-32 bg-green-light">

    <p class="pl-4 pt-2 text-4xl h-16 text-white">
      blabla
    </p>
  <div class="circle">  </div>
</header>

<main class="w-screen pt-16">
  <div class="h-32 bg-red">hi</div>
  <div class="h-32 bg-orange">hi</div>
   <div class="h-32 bg-red">hi</div>
  <div class="h-32 bg-orange">hi</div>
    <div class="h-32 bg-red">hi</div>
  <div class="h-32 bg-orange">hi</div>
   <div class="h-32 bg-red">hi</div>
  <div class="h-32 bg-orange">hi</div>
    <div class="h-32 bg-red">hi</div>
  <div class="h-32 bg-orange">hi</div>
   <div class="h-32 bg-red">hi</div>
  <div class="h-32 bg-orange">hi</div>
</main>

最佳答案

您的 SVG 背景需要是一个切出一个圆孔的矩形。

如果您不想在矢量编辑器中绘制此形状,则需要使用 <mask>在矩形中打一个圆孔。

<svg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='0 0 500 250' preserveAspectRatio='xMinYMin meet'>
  <mask id="circular-hole">
    <rect width="100%" height="100%" fill="white"/><!-- part to keep -->
    <circle cx='250' cy='250' r='250' fill="black"/><!-- black for the hole -->
  </mask>
  <rect width="100%" height="100%" fill="#51d88a" mask="url(#circular-hole)"/>
</svg>

并且您的页面已更新为此 SVG:

body {
  height: 1000px;
}


.circle {
    padding-top: 4rem;
    height: calc(100% - 4rem);
    /* margin-bottom: -4rem; */
    background-size:cover;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='0 0 500 250' preserveAspectRatio='xMinYMin meet'%3E %3Cmask id='circular-hole'%3E %3Crect width='100%25' height='100%25' fill='white'/%3E %3Ccircle cx='250' cy='250' r='250' fill='black'/%3E %3C/mask%3E %3Crect width='100%25' height='100%25' fill='#51d88a' mask='url(%23circular-hole)'/%3E %3C/svg%3E");

}
<link href="https://cdn.jsdelivr.net/npm/tailwindcss/dist/tailwind.min.css" rel="stylesheet"/>

<header class="fixed w-screen">
  <p class="pl-4 pt-2 text-4xl h-16 text-white bg-green-light">
    blabla
  </p>
  <div class="circle">  </div>
</header>

<main class="w-screen pt-16">
  <div class="h-32 bg-red">hi</div>
  <div class="h-32 bg-orange">hi</div>
   <div class="h-32 bg-red">hi</div>
  <div class="h-32 bg-orange">hi</div>
    <div class="h-32 bg-red">hi</div>
  <div class="h-32 bg-orange">hi</div>
   <div class="h-32 bg-red">hi</div>
  <div class="h-32 bg-orange">hi</div>
    <div class="h-32 bg-red">hi</div>
  <div class="h-32 bg-orange">hi</div>
   <div class="h-32 bg-red">hi</div>
  <div class="h-32 bg-orange">hi</div>
</main>

关于html - 用 SVG 剪出半个圆头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48940381/

相关文章:

html - 如何在 xpath 上找到正确的链接?

java.lang.NoClassDefFoundError : Could not initialize class org. apache.batik.css.engine.SVGCSSEngine

javascript - 具有常量 stroke-dasharray 对象的 SVG Arc Progress bar

java - 可以解析 HTML 文档并构建 DOM 树(java)

html/css - 居中、水平的 img 列表,每个 img 下都有文本

javascript - 如何在 `keyword` 或 `textarea` 运行时更改 `textbox` 颜色? JavaScript

css - 在 svg : the correct method? 周围放置元素

css - 在 SVG 中组合 clipPath、pattern 和 linearGradient

php - 我如何在循环中显示默认值并隐藏其余部分而不创建无限循环

jquery - FontAwesome 5 关于点击事件?