html - 在卡片图像上实现 CSS 透明渐变叠加

标签 html css materialize

我正在尝试将透明渐变叠加到来自 Materialise CSS 框架的图像卡上。我在网上找到的共识表明,这应该可以通过放置 img 来轻松实现。标记为 div并对所述 div 应用渐变背景.然后简单地移动 z-indeximg标记在渐变后面,从而覆盖它。

但是,我在使用这种方法时遇到了一些问题。由于某种原因,我的叠加层似乎没有透明度,这意味着只能看到渐变,而看不到背后的图像。我认为这与物化框架有关,有什么方法可以解决它吗?

JSFiddle of my code

HTML:

<div class="row">
    <div class="col s12 m4 l3">
        <div class="card hoverable">
            <div class="card-image postergrad">
                <div class="postergrad">
                    <img class="poster" src="http://vignette2.wikia.nocookie.net/horrormovies/images/e/e1/28-Days-Later-Posters.jpg">
                </div>
                <span class="card-title">28 Days Later</span>
            </div>
            <div class="card-content">
                <p>Lorem ipsum...</p>
            </div>
            <div class="card-action">
                <a href="#">This is a link</a>
            </div>
        </div>
    </div>
</div>

CSS:

.postergrad { 
  background: -moz-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0.65) 100%); /* FF3.6+ */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(0,0,0,0.65)), color-stop(100%,rgba(0,0,0,0))); /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(top, rgba(0,0,0,0) 0%,rgba(0,0,0,0.65) 100%); /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(top, rgba(0,0,0,0) 0%,rgba(0,0,0,0.65) 100%); /* Opera 11.10+ */
  background: -ms-linear-gradient(top, rgba(0,0,0,0) 0%,rgba(0,0,0,0.65) 100%); /* IE10+ */
  background: linear-gradient(to bottom, rgba(0,0,0,0) 0%,rgba(0,0,0,0.65) 100%); /* W3C */
  filter: progid:DXImageTransform.Microsoft.gradient(     startColorstr='#a6000000', endColorstr='#00000000',GradientType=0 ); /* IE6-9 */
}

.poster {
  position:relative;
  z-index:-1;
  display:block;
}

最佳答案

我想你误会了。

你不能在它自己的包装器背景后面的 HTML 中设置图像..背景是背景。

您可以使用包装器来创建伪元素覆盖。

.postergrad {
  display: block;
  position: relative;
}
.postergrad::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  background: -moz-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 100%);
  /* FF3.6+ */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0.65)), color-stop(100%, rgba(0, 0, 0, 0)));
  /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 100%);
  /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 100%);
  /* Opera 11.10+ */
  background: -ms-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 100%);
  /* IE10+ */
  background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 100%);
  /* W3C */
  filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#a6000000', endColorstr='#00000000', GradientType=0);
  /* IE6-9 */
}
.poster {
  display: block;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/css/materialize.min.css" rel="stylesheet" />
<div class="row">
  <div class="col s12 m4 l3">
    <div class="card hoverable">
      <div class="card-image">
        <div class="postergrad">
          <img class="poster" src="http://vignette2.wikia.nocookie.net/horrormovies/images/e/e1/28-Days-Later-Posters.jpg">
        </div>
        <span class="card-title">28 Days Later</span>
      </div>
      <div class="card-content">
        <p>Lorem ipsum...</p>
      </div>
      <div class="card-action">
        <a href="#">This is a link</a>
      </div>
    </div>
  </div>

关于html - 在卡片图像上实现 CSS 透明渐变叠加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36864692/

相关文章:

html - Twilio 视频轨道不适合 div

html - CSS margin 恐怖; Margin 在父元素之外添加空间

javascript - 是否可以设置跨域 iframe 内容的样式?

html - 如何为 Chrome、IE、Safari 调整此 CSS?

javascript - 选择不在 Materialize CSS 和 AngularJS 中呈现

javascript - 模拟背景大小 : cover in canvas

javascript - HTML5 File API 简单检查文件是否存在

html - 一个关于溢出 :hidden 的简单 css 问题

css - 如何在电子邮件中使用 Materialize.css?

css - 移动端网站宽度发生变化