css Flex中的叠加未覆盖所有后续Flex框

jtw3ybtb  于 2023-08-09  发布在  其他
关注(0)|答案(3)|浏览(117)

考虑以下HTML和CSS:

<div class="page">
  <div class="region"> 
    <div class="zone">
      Left
    </div>
    <div class="zone">
      Center
    </div>
    <div class="zone">
      Right
    </div>
  </div>
  <div class="region">
    <div class="zone">
      Left
    </div>
    <div class="zone">
      Right
      <div id="overlay"></div>      <!--- Overlay -->
    </div>
  </div>
  <div class="region">
    <div class="zone">
      Left
    </div>
    <div class="zone">
      Center
    </div>
    <div class="zone">
      Right
    </div>
  </div>
</div>

个字符
下面是一个工作示例:https://codepen.io/a11smiles/pen/rNQoaPv
问题是覆盖层覆盖了topmiddle flex-box及其内容。然而,虽然覆盖是屏幕的全宽和全高,但footer弹性框及其内容始终在顶部(覆盖在页脚后面)。我所做的一切都改变不了这一点。如您所见,我尝试将footer的z索引显式设置为0,但这也不起作用。
有什么想法吗
谢谢你,谢谢

vkc1a9a2

vkc1a9a21#

要使覆盖覆盖整个视口,请执行以下操作

  • 不使用z-index:0;对于其他元素
  • 将覆盖层放置在元素的外部,即:在体内

这是第一个解决方案:

* {margin: 0; box-sizing: border-box;}

.page {
  background-color: #333;
  height: 100vh;
  display: flex;
  flex-direction: column;
  flex-wrap: nowrap;
  gap: 10px;
}

.region {
  display: flex;
  flex-wrap: nowrap;
  padding: 10px 0px;
  position: relative;
  /* z-index: 0;         /* REMOVE! */
  gap: 20px;

  &:first-of-type {
    padding-top: 0px;
    height: 130px;
  }

  &:nth-of-type(2) {
    height: calc(100vh - 245px);
  }

  &:last-of-type {
    padding-bottom: 0px;

  }
}

.zone {
  display: flex;
  flex-direction: column;
  flex: 1;
  flex-wrap: nowrap;
  justify-content: flex-start;
  gap: 10px;
  padding: 0px 10px;
  background-color: #0000ff33;

  &:first-of-type {
    padding-left: 20px;
  }

  &:last-of-type {
    padding-right: 20px;
  }
}

#overlay {
   position: fixed;
   top: 0;
   right: 0;
   bottom: 0;
   left: 0;
   z-index: 1000;
   background: #ffffff66;
}

个字符

km0tfn4u

km0tfn4u2#

.page {
    background-color: #333;
    height: 100vh;
    display: flex;
    flex-direction: column;
    flex-wrap: nowrap;
    gap: 10px;
    position: relative; /* Add this line to create a new stacking context */
    z-index: 1; /* Add this line to set the z-index of the new stacking context */
}

字符串
/* CSS的其余部分保持不变 */
覆盖层未覆盖页脚flex-box及其内容的问题是由于CSS中使用的z-index属性和position属性创建的堆栈上下文造成的。
您可以通过添加位置来完成此操作:相对; z指数:1;.page类。这将为整个页面创建一个新的堆栈上下文,并使用z-index覆盖:1000将出现在这个新的堆叠上下文中的所有元素的顶部,包括页脚弹性框。

3z6pesqy

3z6pesqy3#

将您的“.region”样式更新为此样式(以及“&:last-of-type”)

.region {
  width: 100%;
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  justify-content: space-between;
  padding: 10px 0px;
  position: relative;
  z-index: 1;
  gap: 20px;

  &:first-of-type {
    padding-top: 0px;
    height: 130px;
  }

  &:nth-of-type(2) {
    height: calc(100vh - 245px);
  }

  &:last-of-type {
    padding-bottom: 0px;
    z-index: 0;
  }
}

字符串

相关问题