html - Flex 粘性页脚在窗口调整大小时与 flex sibling 重叠(高度缩小)

标签 html css flexbox

我有一个非常简单的 flexbox 结构,它有一个页眉、主要和页脚子元素,其中页脚是结束元素,并起到粘性页脚的作用,在长页面上停留在页面底部。但是只要窗口缩小(高度),页脚就会与所有内容(其他兄弟)重叠,就像它具有固定位置属性一样。

我希望它有一个默认行为,并且与当网站高度太小而无法显示当前最后一项时隐藏的其他行为相同。

我的结构:

HTML

<div id="main">
  <div id="alternate_header"></div>
  <div id="header">
    <div>1</div><div>2</div>
  </div>
  <div id="content">body</div>
  <div id="footer">footer</div>
</div>

CSS

body,html {

  margin: 0;
  height:100vh;

}

#main {

  display:flex;
  flex-direction: column;
  width:100%;
  height:100vh;
  min-height:0;

}

#main > div {

  width: 100%;

}

#alternate_header {

  display; none;

}

#header {

  background-color:red;
  height:5rem;
  line-height:5rem;
  align-self:flex-start;
  display:flex;
  flex-direction:row;

}

#header > div {

  flex:1;
}

#content {

  flex:1;
  background-color:#dcdcdc;
  min-height:0;

}

#footer {

  align-self:flex-end;
  background-color: yellow;
  height: 4rem;

}

JSFIDDLE

最佳答案

问题是由在容器上设置固定高度引起的:htmlbody#main。这意味着您的 flexbox 容器的高度将始终正好是 100vh:视口(viewport)的高度。

您的#footer 元素有align-self: flex-end。这意味着它将自己对齐到 flex 容器的末尾:页面底部。

您可以确保页面覆盖整个屏幕,同时允许页面增长和页脚随之移动,通过替换:

 height: 100vh;

与:

 max-height: 100vh;

htmlbody#main 中。

此外,页眉和页脚将自然地与开始和结束对齐,因为它们在 DOM 中的位置。随意删除 align-self 规则。

关于html - Flex 粘性页脚在窗口调整大小时与 flex sibling 重叠(高度缩小),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53042226/

相关文章:

javascript - 如何使用 CasperJS 将 html 数据表解析/映射到 JSON 对象?

php - 动态下拉框?

html - 在 DOM 元素中使用带有 bool 值的自定义属性

html - div 框在其他 div 下不对齐

html - 如何在不同大小的容器中保持两个 flexbox 元素的大小相同?

react-native - react native : how to import flexbox styles from another file js?

html - 尝试使用 CSS 以行模式显示彼此相邻的元素

html - 表格单元格图像未显示

php - IE8 密码字段显示输入的值而不是显示星号

javascript - 到达 id 时更改 CSS