使用剪辑路径时如何保持边界半径?

问题描述

我有一个项目需要创建某种类型的卡片。这些卡片在悬停时包含渐变背景。我添加一个 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>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...