html - 添加/删除组件时某些 div 的 Flexbox 对齐方式 'issues'

标签 html css flexbox

我无法让 footer 保持在页面底部,而 subheader 正好在 header 的下方,没有空格,而我可以添加或删除中间的内容。

.wrapper {
  display: flex;
  height: 100%;
  flex-wrap: wrap;
  font-weight: bold;
  text-align: center;
}

.header {
  background: tomato;  
  
  flex-grow: 1;
  flex-basis: 100%;
  height: 40px;
  align-self: flex-start;
}

.subheader {
  background: deepskyblue;
  
  margin-bottom: auto;
  flex-grow: 1;  
  flex-basis: 100%;
  height: 60px;
  align-self: flex-start;
}

.sidebar-wrapper {
  background: gold;

  height: 100%;
  flex-grow: 1;
  flex-basis: 20%;
}

.sidebar {
  background: purple;
  
  height: 80vh;
  top: 15px;  
  position: sticky;
}

.content {
  background: hotpink;
  
  height: 100%;
  flex-grow: 1;
  flex-basis: 80%;
}

.footer {
  background: lightgreen;
  
  height: 40px;
  flex: 1 100%;
  margin-top: auto;
}
<div class="wrapper">

    <div class="header">Header</div>

    <div class="subheader">Subheader</div>

    <div class="sidebar-wrapper">
      <div class="sidebar">
        Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor
        quam, feugiat vitae, ultricies eget, tempor sit amet, ante.
      </div>
    </div>

    <div class="content">
      <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor
        quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean
        ultricies mi vitae est. Mauris placerat eleifend leo.</p>
      <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor
        quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean
        ultricies mi vitae est. Mauris placerat eleifend leo.</p>
    </div>

    <div class="footer">
      Footer
    </div>

  </div>

要查看“不当行为”,只需删除“sidebar-wrapper”和“content”元素。抱歉,我找不到更简单的方法来描述我的问题。

https://stackblitz.com/edit/angular-umydqv

最佳答案

您试图用太少的包装器做太多事情。

使用一个方向设置为 column 的 flex 容器构建一个布局,顶部有一个页眉组,底部有一个页脚,中间有一个主要部分。

然后使用另一个 flex 容器来设置您的主要区域以包含侧边栏和内容。

从主要区域中删除侧边栏或内容不会以这种方式弄乱外部布局。

html,
body {
  height: 100%;
  margin: 0;
}

.wrapper {
  display: flex;
  flex-direction: column;
  height: 100%;
  flex-wrap: nowrap;
  font-weight: bold;
  text-align: center;
}

main {
  flex: 1 1 100%;
  display: flex;
}

.header {
  background: tomato;
  height: 40px;
}

.subheader {
  background: deepskyblue;
  height: 60px;
}

.sidebar {
  background: purple;
  flex: 1 0 40%;
}

.content {
  background: hotpink;
}

.footer {
  background: lightgreen;
  height: 40px;
}
<div class="wrapper">

  <header>
    <div class="header">Header</div>
    <div class="subheader">Subheader</div>
  </header>

  <main>

    <div class="sidebar">
      Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante.
    </div>

    <div class="content">
      <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est.
        Mauris placerat eleifend leo.</p>
      <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est.
        Mauris placerat eleifend leo.</p>
    </div>

  </main>

  <div class="footer">
    Footer
  </div>

</div>

关于html - 添加/删除组件时某些 div 的 Flexbox 对齐方式 'issues',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56709399/

相关文章:

javascript - 应该每秒重复一次的函数立即发生

jQuery - 添加可编辑和可拖动的元素

javascript - 从表单条目获取变量以添加到链接?

css - 响应 - 在桌面上每三个 DIV 后清除一次,但在移动设备上每秒清除一次

html - 导航边框底部不受填充影响? CSS

html - 预先存在的 CSS block 中的 CSS 元素选择器

css - 背景图像 CSS 属性不显示在窄行上

html - 如何居中对齐图像并在悬停时覆盖文本?

html - 我无法在页面顶部设置导航栏

css - 在CSS Flexbox中,为什么没有“justify-items”和“justify-self”属性?