滚动弹性容器不适合居中的项目[重复]

Posted

技术标签:

【中文标题】滚动弹性容器不适合居中的项目[重复]【英文标题】:scrolling flex container does not fit centered items [duplicate] 【发布时间】:2013-11-05 03:18:26 【问题描述】:

html

<div id="container">
    <div class="item">Foo</div>
    <div class="item">Bar</div>
</div>

CSS:

#container 
    display: flex;
    justify-content: center;
    overflow: auto;

.item 
    flex-grow: 1;
    min-width: 200px;
    max-width: 300px;

当上述容器缩小到小于 400px 时,如预期出现水平滚动条。但是,第一项会被容器的左边缘部分遮挡,即使一直滚动到左侧也是如此。随着容器的缩小,更多的项目被遮挡。

演示:http://jsfiddle.net/FTKcQ/。调整结果框的大小以进行观察。在 Chrome 30 和 Firefox 24 中测试。

如果 justify-contentcenter 更改为任何其他值(例如 space-between),则所有内容都可以通过滚动查看。为什么居中的项目表现不同?

这里的目标是有一行居中的项目,每个项目的宽度都会在一定范围内增长。如果容器不能容纳所有最小宽度的项目,它应该滚动显示它们。

【问题讨论】:

【参考方案1】:

根据MDN (Flex item considerations),目前预计会出现这种行为:

Flexbox 的对齐属性会“真正”居中,这与 CSS 中的其他居中方法不同。这意味着弹性项目将保持居中,即使它们溢出弹性容器。但是,如果它们溢出页面的顶部边缘或左​​侧边缘,有时这可能会出现问题,因为您无法滚动到该区域,即使那里有内容!在未来的版本中,对齐属性也将扩展为具有“安全”选项。

目前,如果这是一个问题,您可以改为使用边距来实现居中,因为它们会以“安全”的方式做出响应,并在溢出时停止居中。无需使用 align- 属性,只需将自动边距放在您希望居中的弹性项目上。代替 justify- 属性,在 flex 容器中的第一个和最后一个 flex 项的外边缘放置自动边距。

因此,您可以使用边距进行对齐,从而达到预期的效果。只需为第一项添加margin-left: auto,为最后一项添加margin-right:auto

我的演示:http://jsfiddle.net/WFxQk/

【讨论】:

据我所知,当项目从容器溢出的宽度开始时,这不会使项目居中。元素开始左对齐。【参考方案2】:

尝试使用样式表

#容器 背景颜色:绿色; 显示:弯曲; /* justify-content: center */ ; 对齐项目:居中; 溢出:自动; 。物品 背景颜色:白色; 边框:1px纯黑色; 弹性增长:1; 弹性收缩:1; 弹性基础:自动; 最小宽度:200px; 最大宽度:300px; 边距:自动; 我删除了justify-content,将其设为默认flex-start。并且,添加了margin:auto,这似乎使中心对齐。

更新的演示:http://jsfiddle.net/FTKcQ/1/

【讨论】:

罗伯特,谢谢你的好回答!但是,如果我需要在中心查看项目,但不合理,该怎么办?

以上是关于滚动弹性容器不适合居中的项目[重复]的主要内容,如果未能解决你的问题,请参考以下文章

flex容器内的居中元素正在增长并溢出顶部[重复]

flex容器内的居中元素正在增长并溢出顶部[重复]

如何使弹性容器居中但左对齐弹性项目

如何使弹性容器居中但左对齐弹性项目

在两个不同宽度的弹性项目之间水平居中弹性项目[重复]

居中弹性项目,行尾有一个[重复]