问题描述
我有一个项目需要创建某种类型的卡片。这些卡片在悬停时包含渐变背景。我添加了一个 before 项目,当项目悬停在上面时显示。为了在卡片中包含背景渐变,我为卡片添加了一个剪辑路径属性。
但我面临的问题是剪辑路径没有剪辑圆形边框 border-radius: 0.5rem;
。我已经搜索并发现可以通过使用多边形来裁剪路径。
我找到了一个链接,您可以在其中生成要剪辑到的多边形项目: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>