html - 使第二行的 flex 元素占用容器的剩余高度

标签 html css flexbox

我正在尝试创建一个顶部有标题的布局,其下方是侧边栏和主要内容。

我想让侧边栏和内容 View 占据标题留下的垂直空间。问题是 header 可以动态调整大小,因此我无法执行 calc()。我的解决方案是使用 flexbox 方案。

我将视口(viewport)水平分为两部分。一个是标题,一个是侧边栏和主要内容的包装。

侧边栏向左浮动并指定宽度的百分比,内容向右浮动并指定其余部分。

问题是我试图让侧边栏始终是包装器高度的 100%。

我尝试了 height: 100%min-height: 100% 但它们不起作用。

我不希望绝对定位它,因为如果包装器溢出主要内容,侧边栏将不会相应扩展。

这是我的笔:http://codepen.io/markt5000/pen/JXNXpW

如您所见,橙色是标题,红色空间是带有侧边栏和内容的包装器。

这是布局

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

<div class="row">

  <div id="sidebar">
  </div>

 <div id="main-content">
 </div>

</div>

最佳答案

没有必要:

Flex 属性拥有使布局正常工作所需的所有功能。关键是使用 flex: 1 使元素扩展容器的全部可用长度。

因此,您的页眉高度可以是动态的,侧边栏和主要内容可以使用剩余的任何高度。没有滚动条。

这是你的代码,有一些修改:

html { height: 100%; }

body {
  height: 100%;
  margin: 0;
  padding: 0;
}

.outer-flex-container {
  height: 100%;
  display: flex;
  flex-direction: column;  /* main flex container stacks items vertically */
}

.header {
  height: 80px;            /* demo purposes; from your original code */
  background-color: orange;
}

.nested-flex-container {
  display: flex;           /* inner flex container stacks items horizontally */
  flex: 1;                 /* KEY RULE: tells this second flex item of main container
                                  to consume all available height */
  align-items: stretch;    /* KEY RULE: default setting. No need to include. Tells
                                  children to stretch the full length of the container
                                  along the cross-axis (vertically, in this case). */
}

.sidebar {
  flex-basis: 20%;        /* set width to 20% */
  background-color: aqua;
}

.content {
  flex: 1;                /* set width to whatever space remains */
  background: magenta;
}
<div class="outer-flex-container">

     <div class="header">HEADER</div><!-- main flex item #1 -->

     <div class="nested-flex-container"><!-- main flex item #2 -->
    
          <div class="sidebar">SIDEBAR</div><!-- inner flex item #1 -->
    
          <div class="content">MAIN CONTENT</div><!-- inner flex item #2 -->
    
     </div><!-- close inner flex container -->

</div><!-- close outer flex container -->

Revised Codepn

关于html - 使第二行的 flex 元素占用容器的剩余高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36167253/

相关文章:

javascript - <select> 标签并将多个值返回给 javascript 方法

html - 使用 css 创建悬停效果

javascript - 使用常规 javascript 检测 Jquery,如果不存在则动态加载它

javascript - 无法包含 jquery 1.9.1 库

javascript - Flexbox 不包含整个图像 (CSS)

css - 在 Angular 2 Material 中将 md-tab-group body min height 更改为 0

css - Flexbox 子元素的边距如何影响它们的计算宽度?

Navigation Items( anchor 标签)下的JQuery Line动画

html - 添加一个 :focus outline to all links

css - 从事件日志 4720 中筛选详细信息