【问题标题】:Flexbox columns and rowsFlexbox 列和行
【发布时间】:2013-04-08 19:33:19
【问题描述】:

我正在尝试在我的网站上使用 CSS3 flexbox,但效果有限。

我可以创建一个可爱的 3 列布局,但我希望第三列以特定的屏幕分辨率包裹在第二列之下。是否可以使用 flexbox,或者我必须恢复到更传统的方法?

我的代码位于http://jsfiddle.net/eFeC3/,它显示了我的代码当前的外观以及 flexbox 实现。

<style>
body > * > *{background:#666;color:#eee;padding:40px;margin:20px;text-align:center;}
/* Flex */
article{display:-webkit-flex}
section{-webkit-flex:1;-webkit-order:2}
nav{-webkit-order:1}
aside{-webkit-order:3}

/* Nasty */
#b, #c {overflow:hidden}
#a{float:left;margin:0px 40px 80px 20px}
</style>
<body>
   <article>
      <section>1</section>
      <aside>2</aside>
      <nav>3</nav>
    </article>

<div id="demo">
    <div id="a">3</div>
    <div id="b">1</div>
    <div id="c">2</div>
</div>

【问题讨论】:

  • 您能否更清楚地了解您希望元素的布局方式?您重新排序元素的方式(3 1 2),包装元素会导致 2 小于 3。您必须在此处使用媒体查询来更正顺序。 codepen.io/cimmanon/pen/Axutc
  • 顺序已经被 -webkit-order 属性改变了。这个想法是说在 800 像素处有 3 列,在 600 像素处有两列(导航是第一列,其他元素是第二列),然后在 400 像素处有一列(元素堆叠在一起)。您展示的演示(使用旧版本的 flexbox)会发生这种情况,但取决于宽度而不是由 css 强制
  • 我的演示没有使用旧版本的 Flexbox,它提供了最大程度支持浏览器所需的所有属性。
  • 抱歉,我看的太匆忙了。

标签: html css flexbox


【解决方案1】:

Flex 元素默认不换行。当您使用换行时,最好同时指定flex-basis 来表示这是此元素的理想宽度

http://codepen.io/cimmanon/pen/Axutc

article {
  display: -webkit-flexbox;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}

section {
  -webkit-flex: 1 20em;
  -ms-flex: 1 20em;
  flex: 1 20em;
  -webkit-flex-order: 1;
  -ms-flex-order: 1;
  -webkit-order: 1;
  order: 1;
}

nav {
  -webkit-flex: 1 10em;
  -ms-flex: 1 10em;
  flex: 1 10em;
  /* by default, flex elements have an order of 0 */
}

aside {
  -webkit-flex: 1 10em;
  -ms-flex: 1 10em;
  flex: 1 10em;
  -webkit-flex-order: 2;
  -ms-flex-order: 2;
  -webkit-order: 2;
  order: 2;
}

如果元素需要在特定断点重新排序,那么您唯一的选择是使用媒体查询。如果您对 flex-basis 选择自行包装的位置不满意(例如 flex: 1 20%),您还可以使用媒体查询将 flex-basis 更改为百分比。

【讨论】:

  • 这似乎不适用于 Firefox:所有三个容器最终都在同一行中。
  • Mozilla 团队故意选择以不完整的状态发布他们的标准 Flexbox 实现(在编写此答案时它隐藏在配置设置后面)。不支持包装,您需要使用功能查询从 Firefox 中隐藏 display: flex
猜你喜欢
  • 2016-09-18
  • 1970-01-01
  • 2013-12-06
  • 2017-05-09
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 2017-08-05
  • 2014-01-11
相关资源
最近更新 更多