DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费额度!
flex-wrap
属性是 弹性盒布局模块 的一个子属性。 它定义了弹性项目是否强制在一行内排列,或者是否可以换行。 如果设置为多行,它还定义了交叉轴,该轴决定了新行堆叠的方向,有助于响应式布局行为,无需使用 CSS 媒体查询。
.flex-container {
flex-wrap: wrap;
}
提醒:交叉轴是垂直于主轴的轴。 它的方向取决于主轴方向。
语法
flex-wrap: nowrap | wrap | wrap-reverse
- 初始值:
nowrap
- 应用于: 弹性容器
- 继承: 否
- 计算值: 指定值
- 动画类型: 离散
值
flex-wrap: nowrap; /* Default value */
flex-wrap: wrap;
flex-wrap: wrap-reverse;
/* Global values */
flex-wrap: inherit;
flex-wrap: initial;
flex-wrap: revert;
flex-wrap: revert-layer;
flex-wrap: unset;
nowrap
(默认): 单行,可能会导致容器溢出wrap
: 多行,方向由flex-direction
定义wrap-reverse
: 多行,与flex-direction
定义的方向相反
演示
在以下演示中
- 红色列表设置为
nowrap
- 黄色列表设置为
wrap
- 蓝色列表设置为
wrap-reverse
flex-direction
设置为默认值:row
。
浏览器支持
此浏览器支持数据来自 Caniuse,其中包含更多详细信息。 数字表示浏览器在该版本及更高版本中支持该功能。
桌面
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
21* | 28 | 11 | 12 | 6.1* |
移动/平板电脑
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
127 | 127 | 4.4 | 7.0-7.1* |
有关如何混合语法以获得最佳浏览器支持的更多信息,请参阅我们关于 “使用 Flexbox” 的文章。
相关指南
相关技巧
使用 Flexbox 实现自适应照片布局
使用 Flexbox 填充最后一行中的空间
带有固定、可变和占用剩余空间元素的 Flexbox 导航栏
响应式布局,更少的媒体查询
有用的 Flexbox 技术:对齐、偏移和换行
其他资源
- CSS 弹性盒模型级别 1 (W3C)
flex-wrap
(MDN)- 使用 CSS 中的
flex-wrap
提高响应能力 (DigitalOcean)
相关
display
.element { display: inline-block; }
align-content
.element { align-content: space-around; }
align-items
.element { align-items: flex-start; }
flex-direction
.element { flex-direction: column-reverse; }
flex-flow
.element { flex-flow: row wrap; }
flex-grow
.flex-item { flex-grow: 2; }
flex-shrink
.element { flex-shrink: 2; }
谢谢!
在示例中,您能否为每个 .flex-container 添加边框,以便像我这样的新手更容易理解?仅仅通过观察,我以为 iframe 是容器。
Firefox 不支持 flex-wrap:请参阅此处
有人有修复/解决方法吗?
@supports not (flex-wrap: wrap) {
/备用方案/
}
由于此问题,我们正在放弃对 Firefox 的支持。难以置信的是,它们落后于 IE。
再见 Firefox
尝试使用 flex-flow
耐心点,Doug。在几个版本中它就会出现。
您的链接文本在此处…
好的:) 我真的很希望现在就有它,但我会耐心等待。
你好,chris
我使用的是 **firefox v27.0.1**,它不支持 flex-warp。
为什么 firefox 不支持 flex-warp?
他们仍在努力解决
flex-wrap
问题,Saeed。短期内不可能实现flex-warp
…最新的 Firefox (28) 支持 flex-wrap!
我最近一直在尝试
flex-wrap
,发现 Safari(在桌面或移动设备上)不支持它,尽管它声称支持,即Modernizr.flexwrap
为 true。我已经为此提交了 Modernizr 的错误报告。想传播一下这个消息,因为在 Firefox 之前不支持此属性之后,围绕此属性似乎存在一些混淆。顺便说一下,我在 此处 留下了相同的评论。
从Safari 6(iOS版确定,桌面版可能也一样)开始支持
flex-wrap
。这有点棘手,因为Safari 5总体上支持flex。我最近不得不使用UA嗅探,并在检测到Safari 5时使用浮动来代替。我在将
flex-wrap
与min-width
结合使用时遇到了Safari问题。有趣的事情。您好,
最近一直在玩flexbox。
在移动设备上,我仍然没有看到与桌面设备相同级别的flex-wrap属性支持。
现代桌面浏览器可以使用最小宽度和高度很好地包装flexed宽度/高度的项目。但是,现代移动浏览器似乎需要更明确的尺寸才能使包装正常工作。
http://codepen.io/flurrd/pen/yygoGP
非常感谢您提供更多信息。
我似乎找不到任何有效的iPad示例,或者没有太多信息解释这种差异。
干杯
好的,我的错。使用简写来指定最小宽度似乎解决了我的移动换行问题。
所以,而不是..
flex: 1;
min-width: 250px;
您应该使用
flex: 1 0 250px;
现在感觉好多了:)
是的,谢谢Marcus!这帮助我在Safari桌面版8.0.5中修复了问题。简写解决方案也记录在webkit错误136041中。
谢谢。这解决了我在Safari桌面版上遇到的一个问题!
救星,感谢@Marcus!这对我有用
flex: 1 0 50%;
也解决了我的问题!谢谢!!!
那是因为简写设置的是flex-basis而不是min-width
@Marcus,你是明星。这解决了我在ios8 cordova webview上的换行问题。
@Marcus:你是天才!
在我距离放弃我的新响应式布局(6天的心血)只有一步之遥的时候,我终于找到了这篇文章。
事实上,简写修复了问题(没有正确包装3个flex盒子)。不仅适用于移动设备,也适用于桌面设备(使用FF和IE)。
再次感谢!
祝您生活长久,繁荣昌盛!
愿原力与你同在!
@Steven Vachon
我发现您必须显式设置宽度,而不仅仅是设置最小宽度才能使其在Safari上正常工作。遇到了同样的问题。
谢谢!对于Safari开发者来说,这是个救命的提示
非常感谢Marcus。您的解决方案解决了问题。非常感谢。
有没有人在iOS 10中使用flex-wrap和flex-grow/shrink时遇到问题?我正在一个使用phonegap的移动应用程序中使用它,应用程序中的所有其他flex区域都运行良好。
我在一个包含按钮的部分遇到了问题,这些按钮应该换行并根据按钮文本调整大小。在Chrome中,它们工作完美,但在实际设备中,它们开始超出容器并导致横向滚动。
这基本上是我尝试使用的代码……它在codepen中看起来很棒,但在我的应用程序中却不行:(
http://codepen.io/ktrammell95/pen/pEAdpq?editors=1100
您好。不确定这是否有帮助。
最近我注意到autoprefixer正在添加display -webkit-box。
这会在ios 8 chrome和safari中破坏flex-wrap。删除它可以使其工作。
您好,我有一个小问题。即使同一行有足够的空间容纳所有项目,是否可以使用flexbox换行?我想要实现的目标如下
1. 3个项目宽度为1/4页
2. 第一行只有2个项目,使用space-around样式
3. 将第三个项目放在单独的一行,就像“换行”一样,因此不居中,与正上方的项目对齐,间距相同…
我在桌面和移动设备上的flex-flow上遇到了非常奇怪的行为。我有23张图片,我想以两行的形式显示,一直到最后一行,在那里它将显示一个居中的图片。这在桌面上运行良好,但在移动浏览器上的效果相反。在移动设备上,第一张图片是单个图片。为什么‘flex-flow: row wrap’的行为在桌面和移动环境中完全相反?
让大家知道,Firefox大约六年前就修复了,现在应该至少支持所有重要的flex部分,如果不是全部的话。
感谢这篇文章。我有一个Flex-Flow: Column Wrap的用例;
如何使其列换行到超过2行?它创建了这样的模式
1 3 5 7
2 4 6 8
我希望它变成
1 4 7
2 5 8
3 6
当发生换行时,项目之间的交叉轴间距为0,因此可以使用容器中的填充或项目中的边距来调整间距。我没有在任何地方看到此事实的记录。