gpt4 book ai didi

css - 如何使用 CSS3 创建 reuleaux 三 Angular 形

转载 作者:技术小花猫 更新时间:2023-10-29 11:16:57 25 4
gpt4 key购买 nike

我需要帮助使用 CSS3 制作 reuleaux 三 Angular 形,如下图所示。该形状周围有白色边框。怎么可能?

enter image description here

最佳答案

CSS 不是创建此类形状的正确工具,即使它们可以使用它来创建。它们将需要多个真实/伪元素、变换等,即使这样,曲线的维护、它们的半径等也非常棘手。当您需要在它们周围设置边框或必须在其中放置图像或渐变时,它会变得更加复杂。

创建此类形状的最佳和推荐工具是 SVG,因为它们具有以下优点:

  • SVG 本质上是可扩展的,因此非常适合响应式设计
  • SVG 形状可以采用图像或渐变作为填充
  • 曲线和半径控制非常理想

下面是使用 SVG 创建 reuleaux 三 Angular 形的示例片段。它所需要的只是一个带有 3 个二次曲线命令的单一路径元素。

svg {
height: 200px;
width: 200px;
}
path {
fill: steelblue;
stroke: white;
stroke-width: 2;
}
path.image {
fill: url(#g-image);
}
body {
background-image: radial-gradient(circle, #3F9CBA 0%, #153346 100%);
}
<svg viewBox="0 0 105 105" preserveAspectRatio="none">
<path d="M2,15 q50,-25 100,0 q0,50 -50,85 q-50,-30 -50,-85z" />
</svg>
<svg viewBox="0 0 105 105" preserveAspectRatio="none">
<defs>
<pattern id="g-image" width="1" height="1" patternUnits="objectBoundingBox">
<image xlink:href="http://lorempixel.com/200/200/nature/4" width="200" height="200" />
</pattern>
</defs>
<path d="M2,15 q50,-25 100,0 q0,50 -50,85 q-50,-30 -50,-85z" class="image" />
</svg>


通过将 CSS Clip-path 与内联 SVG 用于路径也可以实现相同的效果,但 IE 中不支持此功能,因此不推荐这样做。

div {
position: relative;
background: white;
height: 200px;
width: 200px;
-webkit-clip-path: url(#clipper);
clip-path: url(#clipper);
}
div:after {
position: absolute;
content: '';
height: calc(100% - 4px);
width: calc(100% - 4px);
top: 2px;
left: 2px;
background: steelblue;
-webkit-clip-path: url(#clipper);
clip-path: url(#clipper);
}
div.image:after{
background: url(http://lorempixel.com/200/200);
}
body {
background-image: radial-gradient(circle, #3F9CBA 0%, #153346 100%);
}

/* Just for demo */

div{
display: inline-block;
}
<svg width="0" height="0">
<defs>
<clipPath id="clipper" clipPathUnits="objectBoundingBox">
<path d="M0,0.15 q0.5,-0.25 1,0 q0,0.5 -0.5,0.85 q-0.5,-0.3 -0.5,-0.85z" />
</clipPath>
</defs>
</svg>
<div></div>
<div class='image'></div>

关于css - 如何使用 CSS3 创建 reuleaux 三 Angular 形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32990230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com