css DIV上的渐变模糊未按预期工作

suzh9iv8  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(87)

我尝试在div元素上实现一个渐变模糊效果,它应该从下到上横跨整个元素。然而,我不能让它工作得令人满意。效果不均匀,但具有非常奇怪的颜色渐变。我做错了什么?

.gradient-blur {
  position: relative;
  width: 100%;
  height: 100%;
  backdrop-filter: blur(10px);
  opacity: 1;
  mask: linear-gradient(transparent, black 75%);
}
<div class="gradient-blur">
  <span class="showMoreButton" (click)="expandMessage()">
        Mehr anzeigen
    </span>
</div>

Heres what my problem looks like

My desired output is more like this

moiiocjp

moiiocjp1#

我做了一些实验后解决了这个问题。
验证码:

let bool = false;

function showMore() {
  var textContainer = document.getElementById("textContainer");
  var blurContainer = document.getElementById("blur");
  var showMoreButton = document.getElementById("showMoreButton");
  
  if(bool == false) {
    bool = true; 
    textContainer.style.height = "auto";
    blurContainer.style.display = "none";
    showMoreButton.innerHTML = "Show less";
  } else {
    bool = false;
    textContainer.style.height = "25vh";
    blurContainer.style.display = "inline";
    showMoreButton.innerHTML = "Show more";
  }
}
body {
  display: flex;
  justify-content: center;
  overflow: auto;
  margin: 50px 0 50px 0;
}

.container {
  position: absolute; 
  width: 25vw;
  height: 25vh;
  border: 1px solid black;
  overflow: hidden; 
}

.container p {
  padding: 10px;
  text-align: justify; 
}

.gradient-blur {
  display: flex;
  justify-content: center;
  position: absolute; 
  padding: unset;
  bottom: 0; 
  height: 50%; 
  width: 100%;
}

.gradient-blur > div,
.gradient-blur::before,
.gradient-blur::after {
  position: absolute;
  inset: 0;
}
.gradient-blur::before {
  content: "";
  z-index: 1;
  backdrop-filter: blur(0.2px);
  mask: linear-gradient(
    to bottom,
    rgba(0, 0, 0, 0) 0%,
    rgba(0, 0, 0, 1) 16.5%
  );
}
.gradient-blur > div:nth-of-type(1) {
  z-index: 2;
  backdrop-filter: blur(0.4px);
  mask: linear-gradient(
    to bottom,
    rgba(0, 0, 0, 0) 16.5%,
    rgba(0, 0, 0, 1) 33%
  );
}
.gradient-blur > div:nth-of-type(2) {
  z-index: 3;
  backdrop-filter: blur(0.8px);
  mask: linear-gradient(
    to bottom,
    rgba(0, 0, 0, 0) 33%,
    rgba(0, 0, 0, 1) 49.5%
  );
}
.gradient-blur > div:nth-of-type(3) {
  z-index: 4;
  backdrop-filter: blur(1.6px);
  mask: linear-gradient(
    to bottom,
    rgba(0, 0, 0, 0) 49.5%,
    rgba(0, 0, 0, 1) 66%
  );
}
.gradient-blur::after {
  content: "";
  z-index: 8;
  backdrop-filter: blur(2.2px);
  mask: linear-gradient(
    to bottom,
    rgba(0, 0, 0, 0) 66%,
    rgba(0, 0, 0, 1) 100%
  );
}

#showMoreButton {
  position: absolute;
  bottom: 5px; 
  height: 25px;
  width: 25%;
  color: #386FE5;
  z-index: 9999;
  cursor: pointer;
}
<div class="container" id="textContainer">
    <p>
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed  diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.   

Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.   

Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
  </p>
  <div class="gradient-blur" id="blur">
    <div></div>
    <div></div>
    <div></div>
  </div> 
</div>
<button type="button" id="showMoreButton" onclick="showMore()"> Show more </button>

以完整视图打开代码段以正确查看所有内容。

pnwntuvh

pnwntuvh2#

使用background-image属性作为掩码可能不是所有浏览器都支持的。

.gradient-blur {
position: relative;
width: 100%;
height: 100%;
backdrop-filter: blur(10px);
opacity: 1;
background-image: linear-gradient(transparent, black 75%); }

相关问题