移动 Safari 上的 CSS 剪辑路径就像内容框一样

sdv*_*ksv 5 html css svg

我有一个被切割clip-path并具有一些背景颜色的容器。在除移动 Safari 之外的所有支持的浏览器中都能完美运行clip-path(也可能是桌面 Safari,无法测试)。

https://codepen.io/Deka87/pen/PXVNgQ

HTML:

<!-- Container -->
<div></div>

<!-- Clip -->
<svg>
  <defs>
    <clipPath id="clip" clipPathUnits="objectBoundingBox">
      <path d="M 0 0 V 1 A 5 5 0 0 1 1 1 V 0 Z"></path>
    </clipPath>
  </defs>
</svg>
Run Code Online (Sandbox Code Playgroud)

CSS:

div {
  min-height: 300px;
  background-color: gray;
  padding: 100px 0;
  -webkit-clip-path: url(#clip);
  clip-path: url(#clip);
}

svg {
  width: 0;
  height: 0;
  position: absolute;
}
Run Code Online (Sandbox Code Playgroud)

Safari 中的问题是,当clip-path应用时,容器的背景就像其background-clip属性设置一样content-box,即它不会位于填充后面,因此这些区域保持空白。

小智 0

我刚刚遇到了同样的问题,并且能够通过向被剪切的元素添加一个额外的包装 div 并将填充移动到子元素中来解决它。这并不是真正的解决办法,但让我能够继续前进。

HTML:

<!-- Container -->
<div class="parent">
  <div class="child">

  </div>
</div>

<!-- Clip -->
<svg>
  <defs>
    <clipPath id="clip" clipPathUnits="objectBoundingBox">
      <path d="M 0 0 V 1 A 5 5 0 0 1 1 1 V 0 Z"></path>
    </clipPath>
  </defs>
</svg>
Run Code Online (Sandbox Code Playgroud)

CSS:

.parent {
  -webkit-clip-path: url(#clip);
  clip-path: url(#clip);
}

.child {
  background-color: gray;
  min-height: 300px;
  padding: 100px 0;
}

svg {
  width: 0;
  height: 0;
  position: absolute;
}

Run Code Online (Sandbox Code Playgroud)

请参阅此处的示例: https://codepen.io/mprquinn/pen/8b1e4e6004e989491f294a8899a94ec7

希望这有帮助!