display:flex详细思考

2018-08-12  本文已影响38人  AmazRan

旧版浏览器,如IE11或更低版本,不支持或仅部分支持 Flexbox 。如果你想安全的使用页面正常呈现,你应该退回到其他的 CSS 布局方式,比如结合float的display: inline-block或者display: table等。针对移动端h5,flexbox值得一试。


容器属性

项目属性

使用心得
  1. 一般情况,父元素添加display:flex,子元素配置flex:auto就可以了,假如固定,一行填不满时可以考虑改用flex-basis或者额外添加max-width加以限制。
  2. 当 flex 取值为一个长度或百分比,则视为 flex-basis 值,flex-grow 取 1,flex-shrink 取 1。
    flex:1 = flex: 1 1 0%
    flex:auto = flex: 1 1 auto
    flex:3 24px = flex:3 1 24px
  3. basis 0%和auto的区别,举一个🌰
<div class="parent">
   <div class="item-1"></div>
   <div class="item-2"></div>
   <div class="item-3"></div>
</div>

<style type="text/css">
   .parent {
       display: flex;
       width: 600px;
   }
   .parent > div {
       height: 100px;
   }
   .item-1 {
       width: 140px;
       flex: 2 1 0%;
       background: blue;
   }
   .item-2 {
       width: 100px;
       flex: 2 1 auto;
       background: darkblue;
   }
   .item-3 {
       flex: 1 1 200px;
       background: lightblue;
   }
</style>
    .item-1 = 0% + 120px = 120px
    .item-2 = auto + 120px = 220px
    .item-3 = 200px + 60px = 260px

所以flex-basis的auto和0%是不同的,如果设置了width会影响到最后空间的分配。因此官方的建议也是在设置flex时尽量不添加width属性,通过flex:0 0 [width]可以达到相同的效果。

  1. 借助autoprefixer兼容低版本使用-webkit-box,但在display:flex的行级子元素(例如p,span)需要添加display:block,否则不会生效。

参考

10分钟学会基本的 Flexbox 布局
flex设置成1和auto有什么区别

上一篇下一篇

猜你喜欢

热点阅读