【问题标题】:How can I scroll with a two-paned layout and a header using flexbox?如何使用 flexbox 滚动两个窗格布局和标题?
【发布时间】:2014-03-13 08:59:24
【问题描述】:

我已经在 Chrome 32 中随便使用了几个月的 flexbox,我很喜欢我所看到的。但是现在我在我的 flexbox 布局中引入 overflow: scroll 碰壁了。 overflow: scroll 需要明确的 heightmin-height 才能知道何时开始滚动。

当我制作一个简单的两窗格 flexbox 布局时,我可以将每个窗格的高度设为其父窗格的 100%,而这又是窗口高度的 100%。因此,我可以让其中一个窗格在内容过多时滚动,而另一个窗格根本不滚动。这是一个例子:

http://jsfiddle.net/T5NC9/4/

但是,一旦我在这两个窗格上方添加了一个标题,这两个页面就会被添加的标题的高度向下推。如下所示,不太理想:

http://jsfiddle.net/T5NC9/5/

我想我已经掌握了 flexbox 和窗口高度在简单情况下如何协同工作的窍门。但是,flexbox 可以处理这个吗?我应该查看模板布局吗?

注意:我使用height: 10vh 作为标题和90vh 作为窗格高度已经取得了一些成功。但这感觉很老套。

【问题讨论】:

  • 周围有很多元素,我试图跟随它们迷失了方向。但是,我会说 flexbox 系统的主要思想是避免设置显式高度、最小高度等。 model 是 flex-basis、flex-shrink 和 flex-grow。如果您尝试在 flex-box 模型中使用传统模型,恕我直言,您的方法不正确。
  • 你是说你可以在没有 min-height: 0 的情况下在 flexbox 内实现滚动?

标签: css responsive-design flexbox


【解决方案1】:

我认为您可以将 <body> 设置为垂直弹性框 (display:flex;flex-direction:column),在导航上使用 flex: none,在 .content 上使用 flex: 1 0px

(这样,导航将获得其自动高度,并且内容会吸收所有额外的空间。不需要 10%/90% 的分割。)

小提琴:http://jsfiddle.net/vr5Yv/

(编辑:min-height:auto 功能重新引入后,您还需要在 id="content" 的 div 上清除它,否则它最终会太高。更新 jsfiddle 并进行额外更改:http://jsfiddle.net/vr5Yv/5/

【讨论】:

  • 太棒了,我没有意识到 flex: none 是这个的关键。谢谢!
  • 您的小提琴在 Chrome 上按预期工作,但在 Firefox 上工作。有什么变化吗?
  • 是的 - min-width:auto / min-height:auto 功能是 reintroduced,结果 ID 为“内容”的 div 最终变得太高(由于最小内容高度较大它的孩子,不考虑孩子的“溢出”)。修复了 jsfiddle:jsfiddle.net/vr5Yv/5
  • (由于这个错误或变体,我原来的小提琴在 Chrome 中仍然“有效”:code.google.com/p/chromium/issues/detail?id=487302
  • (当overflow 设置在 flex 容器的孙子上时,这个破损是一般问题的一个实例,我在这里的 CSSWG 列表中提出了它:lists.w3.org/Archives/Public/www-style/2014Jul/0589.html。可悲的是,它似乎就像min-height:auto 的怪癖一样,作者只需要注意并解决它。:-/)
猜你喜欢
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 2018-01-13
相关资源
最近更新 更多