【问题标题】:How to add a linear-gradient in an image using CSS?如何使用 CSS 在图像中添加线性渐变?
【发布时间】:2017-04-14 10:17:15
【问题描述】:

我有这个 sn-p 代码。我想使用 Css 为我的图像添加线性渐变。但是到目前为止我尝试了这段代码,但是线性渐变没有添加任何东西。我是否必须使用 position:absolute 或 relative 来覆盖我的图像内的线性渐变?请帮忙。

我用这个

请将此图片添加到图片标签,因为 jsfiddle 没有添加本地文件并上传的选项。带来不便敬请谅解。

.container { width: 1000px;padding: 0;margin: 0 auto;}
.slideshow {position: relative; background: linear-gradient(to left, rgba(0,0,0,0), rgba(0,0,0,0.1), rgba(0,0,0,0.8));}
.slideshow img {border: 3px solid #153f27;border-radius: 5px;-webkit-box-shadow: 4px 3px 5px 0px rgba(168,168,168,1);-moz-box-shadow: 4px 3px 5px 0px rgba(168,168,168,1);box-shadow: 4px 3px 5px 0px rgba(168,168,168,1);}
.slogan {position: absolute; top: 30px; padding: 25px 20px;}
.slogan h1 {font: bold 30px Arial;color: #fff;}
.slogan p {width: 490px;font: bold 17px Arial;color: #fff;padding: 4px 0px;}
<div id="banner">
  <div class="container">
    <div class="slideshow">
      <img src="https://i.stack.imgur.com/KOi78.jpg" alt="Lorem Ipsum">
      <div class="slogan">
        <h1>Lorem Ipsum</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
          irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
      </div>
    </div>
  </div>
</div>

【问题讨论】:

    标签: html css linear-gradients


    【解决方案1】:

    一种方法是使用伪元素,例如::after

    首先,我在slideshow 元素上添加了一个用于渐变的伪元素,并使用position: absolute (以及slideshow 上的position: relative)定位它,然后在伪元素上设置不同的z-indexslogan,在图片和文字之间分层。

    .container {
      width: 1000px;
      padding: 0;
      margin: 0 auto;
    }
    
    .slideshow {
      position: relative;
    }
    
    .slideshow::after {
      content: '';
      position: absolute;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
      background: linear-gradient(to left, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.8));
      z-index: 1;
    }
    
    .slideshow img {
      border: 3px solid #153f27;
      border-radius: 5px;
      -webkit-box-shadow: 4px 3px 5px 0px rgba(168, 168, 168, 1);
      -moz-box-shadow: 4px 3px 5px 0px rgba(168, 168, 168, 1);
      box-shadow: 4px 3px 5px 0px rgba(168, 168, 168, 1);
    }
    
    .slogan {
      position: absolute;
      top: 30px;
      padding: 25px 20px;
      z-index: 2;
    }
    
    .slogan h1 {
      font: bold 30px Arial;
      color: #fff;
    }
    
    .slogan p {
      width: 490px;
      font: bold 17px Arial;
      color: #fff;
      padding: 4px 0px;
    }
    <div id="banner">
      <div class="container">
        <div class="slideshow">
          <img src="https://i.stack.imgur.com/KOi78.jpg" alt="Lorem Ipsum">
          <div class="slogan">
            <h1>Lorem Ipsum</h1>
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
              irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
          </div>
        </div>
      </div>
    </div>

    【讨论】:

    • 这就是我一直在寻找的先生。这次真是万分感谢。如何做到这一点?是关于代码的定位和排列吗?
    • @LaurenceAlbano 用解释更新了我的答案
    【解决方案2】:

    作为替代选项,您可以将图像放置为幻灯片 div 的背景,而不是使用 img 标签。可以这么说,CSS 背景可以有多个层,通过定义它们堆叠在一起的多个背景。我建议删除您的图像标签并使用以下代码:

    .container {
      width: 1000px;
      padding: 0;
      margin: 0 auto;
    }
    
    .slideshow {
      position: relative;
      background: linear-gradient(to left, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.8)), url('https://i.stack.imgur.com/KOi78.jpg') no-repeat;
      background-size: cover;
      background-position: center;
      height: 400px;
      /*CSS from Img tag not applied to slideshow*/
      border: 3px solid #153f27;
      border-radius: 5px;
      box-shadow: 4px 3px 5px 0px rgba(168, 168, 168, 1);
    }
    
    .slideshow img {
      border: 3px solid #153f27;
      border-radius: 5px;
      -webkit-box-shadow: 4px 3px 5px 0px rgba(168, 168, 168, 1);
      -moz-box-shadow: 4px 3px 5px 0px rgba(168, 168, 168, 1);
      box-shadow: 4px 3px 5px 0px rgba(168, 168, 168, 1);
    }
    
    .slogan {
      position: absolute;
      top: 30px;
      padding: 25px 20px;
      z-index: 2;
    }
    
    .slogan h1 {
      font: bold 30px Arial;
      color: #fff;
    }
    
    .slogan p {
      width: 490px;
      font: bold 17px Arial;
      color: #fff;
      padding: 4px 0px;
    }
    <div id="banner">
      <div class="container">
        <div class="slideshow">
          <div class="slogan">
            <h1>Lorem Ipsum</h1>
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
              irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
          </div>
        </div>
      </div>
    </div>

    【讨论】:

    • 先生,这也是一个很好的例子,但我需要一个图像标签。因为我会在其中做一些 javascript/jquery 来制作动画并自动对每个图像进行幻灯片放映。这次真是万分感谢。 (y)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 2023-03-31
    • 2023-02-18
    • 2022-11-02
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多