强制flexbox元素不占用所有垂直空间

格言

TL; DR:具有flex-direction: row所有垂直空间的flex元素,并在其子级中防止滚动条。


一个小提琴显示了我想要实现的UI类型:这是一个可横向和纵向扩展到整个屏幕的页面。它包含一个标题和一个main <div>,它是项目的可滚动列表。因此,该容器是columnflexbox。请注意,它的宽度和高度都很好。

现在,我想在主要内容中添加一个侧边栏,而flexbox似乎也很完美。我简单地增加一个<div id='main'>具有flex-direction: row:看到第二小提琴侧栏显示正常,但这是一个问题新版本<div id='main'>占据了所有垂直空间,因此,项目列表从不获得滚动条。

我试图限制高度<div id='main'>,它似乎起作用。但这在代码方面非常不便,因为标头是一个单独的组件,因此通常它的高度对于主要组件未知的,我已经在设置之前对其进行了计算height: calc(100vh - ...)

有没有一种纯粹的CSS方式来告诉Flexbox容器不要垂直增长?还是应该回到良好的旧表html?

皮特

我会这样做(在CSS中对我所做的更改发表评论):

* {
    box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
}

#container {
  padding: 10px;
  background: #fefefe;
  display: flex;
  flex-direction: column;
  max-height: 100vh;
  overflow: hidden;
  /*remove flex grow and shrink - as parent is not flex, these have no effect*/
}

#header {
  padding: 10px;
  background: #e1eaec;
}

#items {
  flex-grow: 1;     /* change the width and height for flex grow */
  background: #eee;
  padding: 10px;
  overflow: auto;
}

.item {
  background: lightyellow;
  padding: 20px;
}

/* New */

#main {
  display: flex;
  flex-direction: row;
  flex-grow: 1;            /* remove flex-shrink and set grow to 1 */
  /* height: 300px; */
}

#sidebar {
  flex-basis: 20%;
  padding: 10px;
}
<div id='container'>
  <div id='header'>
    <h1>Header</h1>
  </div>
  <div id='main'>
    <div id='items'>
      <div class='item'>Lorem Ipsum</div>
      <div class='item'>Lorem Ipsum</div>
      <div class='item'>Lorem Ipsum</div>
      <div class='item'>Lorem Ipsum</div>
      <div class='item'>Lorem Ipsum</div>
      <div class='item'>Lorem Ipsum</div>
      <div class='item'>Lorem Ipsum</div>
      <div class='item'>Lorem Ipsum</div>
      <div class='item'>Lorem Ipsum</div>
      <div class='item'>Lorem Ipsum</div>
      <div class='item'>Lorem Ipsum</div>
      <div class='item'>Lorem Ipsum</div>
    </div>
    <div id='sidebar'>
      Sidebar
    </div>
  </div>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Flexbox div不占用整个垂直空间

HTML 不占用垂直空间

元素不占用孩子的宽度

为什么固定宽度元素不占用浮动元素旁边的空间?

如何强制垂直flexbox中的(旋转)元素不重叠?

使Flexbox中的项目占用所有垂直和水平空间

? 不占用空间

如何使nohup不创建任何输出文件并因此不占用所有空间?

带有显示块的 ul 不占用父元素的整个空间

使用CSS使彼此相邻的div占用所有垂直空间

React Native图像占用了所有可用的垂直空间

相对放置元素而不占用文档流中的空间

使SVG文本元素绝对定位(即不占用空间)?

如何使Flexbox布局占用100%的垂直空间?

为什么子元素不占用其父元素的100%高度?

如何调整元素的大小并占用所有剩余空间?

占用ConstraintLayout中元素之间的所有可用空间

让跨度不占空间或使用空间以使跨度消失时关闭元素不移动

Div元素不会占用整个空间

清晰度:是否有建议的方法使clr-datagrid占用所有可用的垂直空间?

使ImageView占用所有可用的垂直空间并增加宽度以在RelativeLayout中按比例放大/缩小

为什么我的自定义视图试图占用 VStack 中所有可用的垂直空间?

Flutter ListView.Builder Card 小部件占用了屏幕的所有垂直空间

如何使Polymer元素占据页面上的所有垂直空间?

CSS 隐藏文本(不占用空间)但不隐藏子元素

Java-使用replaceAll而不占用空间

页面导航栏 - 不占用空间

XAML Columndefinitions宽度*不占用可用空间

在同一行上渲染元素,其中输入元素占用所有可用空间