html - z-index 不适用于 flex 元素内的文本

标签 html css flexbox z-index

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

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

代码笔: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>

最佳答案

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

换句话说, flex 元素可以使用 z-indexposition: static

但是,您的文字不是 flex 元素。它是 flex 元素的子项,因此此 z-index 方法将不起作用。

作为解决方案,将 flex 元素放入(嵌套的) flex 容器中。

.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>

关于html - z-index 不适用于 flex 元素内的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47985004/

相关文章:

Javascript,从 iFrame 访问框架集中的嵌套框架

Jquery HTML(), 克隆

html - 下拉菜单和链接到鹈鹕 Bootstrap 主题中的页面

html - 防止 flex 元素拉伸(stretch)

html - 高度 100% 的 Fieldset child 太大了

html - 是否可以使用 % 设置尺寸的元素来显示滚动,而不是增加自己的大小?

jquery - 尝试在 Canvas 图像上创建缩放插件

css - SVG圆圈有间隙

javascript - Jquery Mobile Web 应用程序的性能增强

html - 在 Flexbox 中将元素置于两个兄弟元素之间居中