CSS - 渐变边框在 safari 中不起作用

CSS - gradient border not working in safari

我正在尝试创建一个带有渐变边框的自定义按钮。在这一点上,我得到了在 Chrome 和 Firefox 中都可以使用的按钮。

我遵循了在线指南,了解如何创建具有圆形渐变的自定义边框。可以在此处找到该指南的 link:documentation.

但由于某些原因,相同的样式在 Safari 中不起作用。不知道为什么会这样。

这是我用来创建按钮的 CSS 代码。我还在底部包含了一个具有相同样式的片段。请注意,该代码段有一些额外的 类 和 CSS 属性只是为了让它正确显示。

.rainbow-gradient-border {
  position: relative;

  border-radius: 0.25rem;
  box-shadow: 0 2px 10px 0 rgba(142, 57, 255, 0.29);
}
.rainbow-gradient-border::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  border-radius: 0.25rem;
  padding: 0.1rem;
  background: linear-gradient(
    90deg,
    #4d3d8f 0%,
    #df67ed 23%,
    #e24c26 65%,
    #f18823 84%,
    #3aa6c2 100%
  );
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: destination-out;
  mask-composite: exclude;
}

body, .container{
 width: 100%;
 height: 100%;
 background-color: black;
}

.container{
 background-color: black;
}

.rainbow-gradient-border {
  position: relative;
  color: white;
  width: 10rem;
  
  display: flex;
  justify-content: center;
  align-items: center;
  
  border-radius: 0.25rem;
  box-shadow: 0 2px 10px 0 rgba(142, 57, 255, 0.29);
}
.rainbow-gradient-border::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  border-radius: 0.25rem;
  padding: 0.1rem;
  background: linear-gradient(
    90deg,
    #4d3d8f 0%,
    #df67ed 23%,
    #e24c26 65%,
    #f18823 84%,
    #3aa6c2 100%
  );
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: destination-out;
  mask-composite: exclude;
}
<div class="container">
  <div class="rainbow-gradient-border">
    <p>Log In</p>
  </div>
</div>

您可以通过更简单的方式实现此目的,而无需使用蒙版。我使用 this tool 添加前缀。

   body, .container{
 width: 100%;
 height: 100%;
 background-color: black;
 color: white;
}

.rainbow-gradient-border {
  position: relative;
}

.outie{
  display: inline-block;
    background: -webkit-gradient(
    linear,
    left top, right top,
    from(#4d3d8f),
    color-stop(23%, #df67ed),
    color-stop(65%, #e24c26),
    color-stop(84%, #f18823),
    to(#3aa6c2)
  );
    background: -o-linear-gradient(
    left,
    #4d3d8f 0%,
    #df67ed 23%,
    #e24c26 65%,
    #f18823 84%,
    #3aa6c2 100%
  );
    background: linear-gradient(
    90deg,
    #4d3d8f 0%,
    #df67ed 23%,
    #e24c26 65%,
    #f18823 84%,
    #3aa6c2 100%
  );
  border-radius: 4px;
  padding: 2px;
  width: 10rem;
  border-radius: 0.25rem;
  -webkit-box-shadow: 0 2px 10px 0 rgba(142, 57, 255, 0.29);
          box-shadow: 0 2px 10px 0 rgba(142, 57, 255, 0.29);
}

.innie{
  display:inline-block;
  width: 100%;
  background: black;
  padding: 15px 0px;
  text-align: center;
}
<div class="container">
  <div class="rainbow-gradient-border">
    <span class="outie">
      <span class="innie">
        Log In
      </span>
    </span>
  </div>
</div>

尝试使用 -webkit-mask-composite: source-out; 而不是目的地。

这对我有用,他们在 https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-mask-composite

上有相同的描述