你能指定 CSS flex 中包裹元素的顺序吗?

Posted

技术标签:

【中文标题】你能指定 CSS flex 中包裹元素的顺序吗?【英文标题】:Can you specify the order of wrapped elements in CSS flex? 【发布时间】:2017-07-03 11:11:08 【问题描述】:

我有一个<div>,它使用 CSS flex 来保持响应。

我正在寻找一种方法来指定元素的包装顺序。

例如,我需要

1 - 2 - 3

成为

1
3
2

完全包装后。

当前代码:https://jsfiddle.net/g0L44e5b/

这可能吗?

【问题讨论】:

请发布您的代码。我们需要查看当前布局,以及何时/如何包装。 【参考方案1】:

是的,你可以,使用order 属性:

body 
  display:flex;
  flex-flow:column;
  
p:last-child
  order:1;
  
p:nth-child(2) 
  order:2;
    
<p>1</p>
<p>2</p>
<p>3</p>

这里有一个方便的资源https://css-tricks.com/snippets/css/a-guide-to-flexbox/


编辑后编辑

可以使用包装和媒体查询:

body 
  display:flex;flex-wrap:wrap;
  
p 
  flex:1;
  min-width:380px;
  margin:10px;
  border:solid;

@media screen and (max-width : 800px) 
p:last-child
  order:1;
  
p:nth-child(2) 
  order:2;
    
<p>1</p>
<p>2</p>
<p>3</p>

【讨论】:

【参考方案2】:

看看这支笔:

http://codepen.io/chriscoyier/pen/YPzyYa

笔的作用—— 首先给每个元素一个带有 order 属性的默认类:

.icon 
  order: 0 !important;
 
.username 
  order: 1 !important;
  width: 100%;
  margin: 15px;

.search 
  order: 2 !important;
  width: 100%;

然后它为每个 flexbox 赋予一个特定的排序属性的类:

.bar-2 
  .username 
    order: 2;
  

.icon-3 
  order: 3;

将排序类应用于您的案例,您应该一切顺利。

【讨论】:

【参考方案3】:

如果您使用媒体查询,您可以在父元素上使用flex-direction: column,在子元素上使用order: 1;order: 2; 等,将它们按您需要的任何顺序排列。

【讨论】:

以上是关于你能指定 CSS flex 中包裹元素的顺序吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 IE11 中包装 flex 项目被破坏

css3 弹性盒子

CSS flex 布局属性详解

CSS: Flex 弹性布局

CSS弹性盒模型(flex box)

仅当 flex 项目被包装时,margin-top