使用剪辑路径时如何保持边界半径?
How to keep border-radius when using clip-path?
我有一个项目需要创建某种类型的卡片。这些卡片在悬停时包含渐变背景。我添加了一个在项目悬停时显示的前项目。为了在卡片中包含背景渐变,我向卡片添加了剪辑路径属性。
但我面临的问题是剪辑路径没有剪辑圆角边框border-radius: 0.5rem;
。我搜索了一下,发现用多边形裁剪路径是可以的。
我找到了一个 link,您可以在其中生成要剪裁的多边形项目:Clip poly generator。
但我找不到适合的完美多边形。圆太圆了,斜角项目只有尖锐的边框。
body{
background-color: black;
}
.card-oval-gradient {
position: relative;
width: 10rem;
height: 6rem;
background-color: blue;
border-radius: 0.5rem;
clip-path: inset(0);
}
.card-oval-gradient > * {
position: relative;
z-index: 2;
}
.card-oval-gradient:hover::before {
content: '';
position: absolute;
left: -7rem;
top: -10rem;
width: 18rem;
height: 28rem;
-moz-border-radius: 15rem / 20rem;
-webkit-border-radius: 15rem / 20rem;
border-radius: 15rem / 20rem;
opacity: 0.6;
transform: scaleX(-1) rotate(61deg);
background-image: linear-gradient(
138deg,
#4d3d8f 0%,
#df67ed 23%,
#e24c26 65%,
#f18823 84%,
#3aa6c2 100%
);
filter: blur(50px);
}
<div class="card-oval-gradient">
</div>
使用掩码而不是剪辑路径:
body{
background-color: black;
}
.card-oval-gradient {
position: relative;
width: 10rem;
height: 6rem;
background-color: blue;
border-radius: 0.5rem;
-webkit-mask: linear-gradient(#fff 0 0);
mask: linear-gradient(#fff 0 0);
}
.card-oval-gradient > * {
position: relative;
z-index: 2;
}
.card-oval-gradient:hover::before {
content: '';
position: absolute;
left: -7rem;
top: -10rem;
width: 18rem;
height: 28rem;
-moz-border-radius: 15rem / 20rem;
-webkit-border-radius: 15rem / 20rem;
border-radius: 15rem / 20rem;
opacity: 0.6;
transform: scaleX(-1) rotate(61deg);
background-image: linear-gradient(
138deg,
#4d3d8f 0%,
#df67ed 23%,
#e24c26 65%,
#f18823 84%,
#3aa6c2 100%
);
filter: blur(50px);
}
<div class="card-oval-gradient">
</div>
我有一个项目需要创建某种类型的卡片。这些卡片在悬停时包含渐变背景。我添加了一个在项目悬停时显示的前项目。为了在卡片中包含背景渐变,我向卡片添加了剪辑路径属性。
但我面临的问题是剪辑路径没有剪辑圆角边框border-radius: 0.5rem;
。我搜索了一下,发现用多边形裁剪路径是可以的。
我找到了一个 link,您可以在其中生成要剪裁的多边形项目:Clip poly generator。
但我找不到适合的完美多边形。圆太圆了,斜角项目只有尖锐的边框。
body{
background-color: black;
}
.card-oval-gradient {
position: relative;
width: 10rem;
height: 6rem;
background-color: blue;
border-radius: 0.5rem;
clip-path: inset(0);
}
.card-oval-gradient > * {
position: relative;
z-index: 2;
}
.card-oval-gradient:hover::before {
content: '';
position: absolute;
left: -7rem;
top: -10rem;
width: 18rem;
height: 28rem;
-moz-border-radius: 15rem / 20rem;
-webkit-border-radius: 15rem / 20rem;
border-radius: 15rem / 20rem;
opacity: 0.6;
transform: scaleX(-1) rotate(61deg);
background-image: linear-gradient(
138deg,
#4d3d8f 0%,
#df67ed 23%,
#e24c26 65%,
#f18823 84%,
#3aa6c2 100%
);
filter: blur(50px);
}
<div class="card-oval-gradient">
</div>
使用掩码而不是剪辑路径:
body{
background-color: black;
}
.card-oval-gradient {
position: relative;
width: 10rem;
height: 6rem;
background-color: blue;
border-radius: 0.5rem;
-webkit-mask: linear-gradient(#fff 0 0);
mask: linear-gradient(#fff 0 0);
}
.card-oval-gradient > * {
position: relative;
z-index: 2;
}
.card-oval-gradient:hover::before {
content: '';
position: absolute;
left: -7rem;
top: -10rem;
width: 18rem;
height: 28rem;
-moz-border-radius: 15rem / 20rem;
-webkit-border-radius: 15rem / 20rem;
border-radius: 15rem / 20rem;
opacity: 0.6;
transform: scaleX(-1) rotate(61deg);
background-image: linear-gradient(
138deg,
#4d3d8f 0%,
#df67ed 23%,
#e24c26 65%,
#f18823 84%,
#3aa6c2 100%
);
filter: blur(50px);
}
<div class="card-oval-gradient">
</div>