z-index 不适用于 flex 项目内的文本
z-index not working on text inside flex item
我有一个 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>
<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>
将包含第一父级的跨度向上移动。
在 flex 容器中,z-index
不需要定位属性 ()。
换句话说,弹性项目可以使用 z-index
和 position: static
。
但是,您的文字不是弹性项目。它是弹性项目的子项,因此此 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>
将#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>
我有一个 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>
<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>
将包含第一父级的跨度向上移动。
在 flex 容器中,z-index
不需要定位属性 (
换句话说,弹性项目可以使用 z-index
和 position: static
。
但是,您的文字不是弹性项目。它是弹性项目的子项,因此此 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>
将#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>