使用NEWER flexbox api在全高应用程序中进行Flexbox和垂直滚动

Jos*_*abo 76 html css flexbox

我想使用flexbox使用全高应用程序.我在这个链接中使用旧的flexbox(显示:框;以及其他东西)找到​​了我想要的东西:CSS3 Flexbox全高应用和溢出

对于旧版本的flexbox css属性,这是一个正确的解决方案.

如果我想尝试使用较新的flexbox属性,我将尝试在同一链接中使用第二个解决方案,但使用高度为0px的容器 "黑客"弹性框; 它使显示垂直滚动.

我不喜欢它,因为它引入了其他问题,它更像是一个解决方案不是解决方案.

我准备了一个基本示例的jsfiddle:http://jsfiddle.net/ch7n6/

html, body {
    height: 100%;    
}
#container {
	display: flex;
	flex-direction: column;
	height: 100%;
}
#container article {
	flex: 1 1 auto;
	overflow-y: scroll;
}
#container header {
    background-color: gray;
}
#container footer {
    background-color: gray;
}
Run Code Online (Sandbox Code Playgroud)

它是一个"全高html网页",由于内容元素的flexbox,页脚位于底部.我建议你在css代码和结果之间移动吧来模拟不同的高度.

Jos*_*abo 161

感谢/sf/users/115707371/给了我答案.

解决方案是为垂直可滚动元素设置高度.例如:

#container article {
    flex: 1 1 auto;
    overflow-y: auto;
    height: 0px;
}
Run Code Online (Sandbox Code Playgroud)

元素具有高度,因为flexbox会重新计算它,除非你想要一个最小高度,所以你可以使用height:100px; 它完全相同:min-height:100px;

#container article {
    flex: 1 1 auto;
    overflow-y: auto;
    height: 100px; /* == min-height: 100px*/
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您想在垂直滚动中使用最小高度,那么这是最佳解决方案:

#container article {
    flex: 1 1 auto;
    overflow-y: auto;
    min-height: 100px;
}
Run Code Online (Sandbox Code Playgroud)

如果您只想要完整的垂直滚动,以防没有足够的空间来查看文章:

#container article {
    flex: 1 1 auto;
    overflow-y: auto;
    min-height: 0px;
}
Run Code Online (Sandbox Code Playgroud)

最终代码:http://jsfiddle.net/ch7n6/867/

  • 在 Chrome 中使用 `min-height` 不起作用,它会以某种方式影响页脚的大小。然而,使用 `height` 会得到想要的结果。 (2认同)

Xan*_*hir 55

这里有Flexbox规范编辑器.

这是一个鼓励使用flexbox,但有一些事情你应该调整以获得最佳行为.

  • 不要使用前缀.大多数浏览器都支持未加固定的flexbox.始终以无前缀开头,只在必要时添加前缀以支持它.

  • 由于你的页眉和页脚不是为了弯曲,它们都应该flex: none;设置它们.由于一些重叠的效果,你现在有类似的行为,但你不应该依赖它,除非你想在以后偶然混淆自己.(默认是flex:0 1 auto,因此它们从它们的自动高度开始并且可以缩小但不会增长,但它们也是overflow:visible默认的,这会触发它们的默认值min-height:auto以防止它们缩小.如果你曾经设置overflow它们,那么min-height:auto变化的行为(切换到零而不是最小内容)他们会突然被超高<article>元素压扁.)

  • 你也可以简化<article> flex- 只需设置flex: 1;就可以了.尝试坚持使用https://drafts.c​​sswg.org/css-flexbox/#flex-common中的常用值,除非您有充分的理由做一些更复杂的事情 - 它们更容易阅读并涵盖大部分行为你想要调用.


cim*_*non 20

目前的规范说明了这一点flex: 1 1 auto:

根据width/ height属性调整项目的大小,但使它们完全灵活,以便它们沿主轴吸收任何自由空间.如果所有的项目要么flex: auto,flex: initial或者flex: none,该项目已被大小后的任何积极的自由空间将被平均分配到与项目flex: auto.

http://www.w3.org/TR/2012/CR-css3-flexbox-20120918/#flex-common

听起来,如果你说一个元素是100px高,它被视为更像"建议"的大小,而不是绝对的.因为它允许缩小和增长,所以它占用的空间比允许的多.这就是为什么将这一行添加到"main"元素的工作原理:( height: 0或任何其他小数字).