【问题标题】:z-index not working on text inside flex itemz-index 不适用于弹性项目内的文本
【发布时间】:2018-06-07 16:12:08
【问题描述】:

我有一个 flex-container 里面有一些 flex-items,我有很多(我已经包裹在一个 span 中),我想放在文本后面。

由于某种原因,z-index 不适用于此跨度项目。根据规范,flexbox 应该与 flex-containers 和 flex-items 正常运行,但我似乎无法让白色文本位于黑色数字之上? (或者推文字后面的数字,都可以)。

codepen:https://codepen.io/emilychews/pen/rpjpmB

CSS

.row {
display: flex;
margin: auto;
padding: 1rem;
background-color: red;
width: 70%;
max-width: 1043px;
box-sizing: border-box;
}

#row-2 {background: red;}

#row-2 div {
  position: relative;
  box-sizing: border-box;
  margin: .5rem;
  padding: 2.488rem 1rem;
  flex: 1;
  z-index: 1;
}

#number1 {position: absolute; font-size: 7.4300rem; z-index: 1;}

#row-2 > div > h3, #row-2 > div > p {text-align: center; color: white; z-index:99;}

HTML

<div id="row-2" class="row">
  <div>
    <span id="number1">01</span>
    <h3>This is A Title</h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing 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.</p>
  </div>
  <div>
    <h3>This is A Title</h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing 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.</p>
  </div>
  <div>
    <h3>This is A Title</h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing 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.</p>
  </div>
</div>

【问题讨论】:

  • 给#row-1 div p 和#row-1 div h3 元素一个位置:相对的,它应该可以工作。
  • 如果您将该代码投入生产,那么以后的深层嵌套将会对您不利。考虑在最后一个 p 标签上使用一个类,而不是嵌套那么深。我相信在 ecg8 建议的元素上放置相对位置应该可以解决问题。

标签: html css flexbox z-index


【解决方案1】:
<div id="row-2" class="row">
  <span id="number1">01</span>
  <div>
    <h3>This is A Title</h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing 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.</p>
  </div>
  <div>
    <h3>This is A Title</h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing 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.</p>
  </div>
  <div>
    <h3>This is A Title</h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing 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.</p>
  </div>
</div>

将包含第一个父级的跨度向上移动。

codepen

【讨论】:

    【解决方案2】:

    在 flex 容器中,z-index 无需定位属性 (source) 即可工作。

    换句话说,弹性项目可以使用z-indexposition: static

    但是,您的文本不是弹性项目。它是 flex 项的子项,所以这个 z-index 方法不起作用。

    作为一种解决方案,将弹性项目放入(嵌套的)弹性容器中。

    .row {
      display: flex;
      margin: auto;
      padding: 1rem;
      background-color: red;
      width: 70%;
      max-width: 1043px;
      box-sizing: border-box;
    }
    #row-1 {
      background: red;
    }
    #row-1 div {
      position: relative;
      box-sizing: border-box;
      margin: .5rem;
      padding: 2.488rem 1rem;
      flex: 1;
      z-index: 1;
      display: flex;           /* NEW */
      flex-direction: column;  /* NEW */
    }
    #number1 {
      position: absolute;
      font-size: 7.4300rem;
      z-index: 1;
    }
    #row-1 > div > h3,
    #row-1 > div > p {
      text-align: center;
      color: white;
      z-index: 99;
      margin-bottom: 0;  
    }
    <div id="row-1" class="row">
      <div>
        <span id="number1">01</span>
        <h3>This is A Title</h3>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing 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.</p>
      </div>
      <div>
        <h3>This is A Title</h3>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing 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.</p>
      </div>
      <div>
        <h3>This is A Title</h3>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing 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.</p>
      </div>
    </div>

    【讨论】:

      【解决方案3】:

      将 #number1 z-index 更改为 -1

      .row {
        display: flex;
        margin: auto;
        padding: 1rem;
        background-color: red;
        width: 70%;
        max-width: 1043px;
        box-sizing: border-box;
      }
      
      #row-1 {background: red;}
      
      #row-1 div {
        position: relative;
        box-sizing: border-box;
        margin: .5rem;
        padding: 2.488rem 1rem;
        flex: 1;
        z-index: 1;
      }
      
      #number1 {position: absolute; font-size: 7.4300rem; z-index: -1;}
      
      #row-1 > div > h3, #row-1 > div > p {text-align: center; color: white; z-index:99;}
      <div id="row-1" class="row">
        <div>
          <span id="number1">01</span>
          <h3>This is A Title</h3>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing 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.</p>
        </div>
        <div>
          <h3>This is A Title</h3>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing 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.</p>
        </div>
        <div>
          <h3>This is A Title</h3>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing 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.</p>
        </div>
      </div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        • 2016-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-15
        • 1970-01-01
        相关资源
        最近更新 更多