【问题标题】:how to create opacity for an image [duplicate]如何为图像创建不透明度[重复]
【发布时间】:2021-05-13 19:48:33
【问题描述】:

我想添加一个不透明的背景,在图像前面有一个可见的文本。 在我的例子中,我使用 flex 来显示 div 元素,并尝试为每个 div 创建一个具有不透明度和文本的背景。 我知道我应该使用 z-index 来创建背景不透明层,但就我而言,我不知道为什么它不起作用。

main{
    border: 2px solid red;
    width: 100%;
    height: 100vh;
}
.projects-wrapper{
    border: 2px solid black;
    width: 100%;
    height: 50vh;
    display: flex;
}
.projects-wrapper div{
    border: 2px solid green;
    flex-grow: 1;   
}
/* .projects-wrapper div.text-description{
    border: 2px solid yellow;
    font-family: 'Open Sans', sans-serif;
    font-size: 20px;
    color: white;
    text-transform: uppercase;
}
.projects-wrapper div.text-description span{
    display: block;
} */
.first-row div:first-child{
    background-image: url(../assets/concert-hall.jpg);
    background-size: cover;
    background-position: center;
}
.first-row div:nth-child(2){
    background-image: url(../assets/bedroom-2.jpg);
    background-size: cover;
    background-position: center;
}
.first-row div:last-child{
    background-image: url(../assets/hotel.jpg);
    background-size: cover;
    background-position: center;
}
 <main>
                    <div class="projects-wrapper first-row">
                        <div class="image-wrapper">
                            <!-- <div class="text-description">
                                Concert hall <span>in New York</span>
                            </div>
                            <div class="text-category">
                                Architecture
                            </div> -->
                        </div>
                        <div class="image-wpapper">
                            <!-- <div class="text-description">
                                Modern bedroom <span>in Gorizia</span>
                            </div>
                            <div class="text-category">
                                Interior
                            </div> -->               
                        </div>
                        <div class="image-wpapper">
                            <!-- <div class="text-description">
                                Modern hotel <span>in London</span>
                            </div>
                            <div class="text-category">
                                Architecture
                            </div> -->                            
                        </div>
                    </div>
         <main>

【问题讨论】:

    标签: html css


    【解决方案1】:

    你能检查下面的代码吗?希望它对你有用。我们使用 ::after(伪元素)在 image-wrapper 类中给出了覆盖背景。我们还将 text-descriptiontext-category 包装到 div description 中,并赋予它相对位置、z-index 和颜色。我们通过将背景图像分配给直接子 div 来修改您的样式。例如

    .first-row div:first-child {
      background-image: url();
    }
    

    .first-row > div:first-child {
      background-image: url();
    }
    

    请参考此链接:https://jsfiddle.net/yudizsolutions/mt4zpa8q/

    main {
      border: 2px solid red;
      width: 100%;
      height: 100vh;
    }
    
    .projects-wrapper {
      border: 2px solid black;
      width: 100%;
      height: 50vh;
      display: flex;
    }
    
    .projects-wrapper div {
      flex-grow: 1;
    }
    
    .first-row>div:first-child {
      background-image: url(https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/bedroom-ideas-rds-work-queens-road-08-1593114639.jpg);
      background-size: cover;
      background-position: center;
    }
    
    .first-row>div:nth-child(2) {
      background-image: url(https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/bedroom-ideas-rds-work-queens-road-08-1593114639.jpg);
      background-size: cover;
      background-position: center;
    }
    
    .first-row>div:last-child {
      background-image: url(https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/bedroom-ideas-rds-work-queens-road-08-1593114639.jpg);
      background-size: cover;
      background-position: center;
    }
    
    .image-wrapper {
      position: relative;
    }
    
    .image-wrapper:after {
      height: 100%;
      width: 100%;
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      display: block;
      background: rgba(0, 0, 0, 0.5);
    }
    
    .description {
      padding: 10px;
      position: relative;
      z-index: 1;
      color: #fff;
    }
    
    .text-description {
      margin: 10px 0px;
    }
    <main>
      <div class="projects-wrapper first-row">
        <div class="image-wrapper">
          <div class="description">
            <div class="text-description">
              Concert hall <span>in New York</span>
            </div>
            <div class="text-category">
              Architecture
            </div>
          </div>
        </div>
        <div class="image-wrapper">
          <div class="description">
            <div class="text-description">
              Modern bedroom <span>in Gorizia</span>
            </div>
            <div class="text-category">
              Interior
            </div>
          </div>
        </div>
        <div class="image-wrapper">
          <div class="description">
            <div class="text-description">
              Modern hotel <span>in London</span>
            </div>
            <div class="text-category">
              Architecture
            </div>
          </div>
        </div>
      </div>
      <main>

    【讨论】:

      【解决方案2】:

      您是正确的,您需要使用z-index 来强制文本显示在背景之上。我没有看到您在代码中使用它,但是如果您遇到问题,请记住您尝试使用 z-index 覆盖的元素必须在同一个父元素内相邻,并且两个元素必须定位,否则它只是行不通。

      .container{
        height: 200px;
        width: 200px;
        position: relative;
      }
      .container__background{
        position: absolute;
        height: 100%;
        width: 100%;
        background: url("https://miro.medium.com/max/720/1*LjR0UrFB2a__5h1DWqzstA.png") no-repeat center;
        background-size: cover;
        opacity: .5;
      }
      .container__text{
        height: 100%:
        width: 100%;
        position: relative;
        z-index: 100;
        padding: 20px;
        box-sizing: border-box;
      }
      <div class="container">
        <div class="container__background"></div>
        <div class="container__text">Put your text in here!</div>
      </div>

      【讨论】:

        【解决方案3】:

        您可以使用:after:before CSS 选择器。另请注意,在您的 HTML 代码中,您将“image-wrapper”拼错为“image-wpapper”。这是您可能的解决方案。

        https://codepen.io/Umesh8965/pen/xxRErxV

        希望这会是你的期望。

        【讨论】:

          猜你喜欢
          • 2020-08-31
          • 1970-01-01
          • 2016-07-04
          • 2015-10-08
          • 1970-01-01
          • 2021-02-18
          • 2020-09-13
          • 2013-04-14
          • 2014-07-21
          相关资源
          最近更新 更多