美文网首页
display:flex详细思考

display:flex详细思考

作者: AmazRan | 来源:发表于2018-08-12 14:37 被阅读38次

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


容器属性
  • flex-direction: [row | row-reverse | column | column-reverse]
    默认row,column使 flex 项垂直布局。也可以通过设置reverse反向操作

  • flex-wrap: [nowrap | wrap | wrap-reverse] 定义如何换行,默认nowrap不换行

  • flex-flow: [flex-direction flex-wrap]的简写形式,默认row nowrap

  • justify-content: 水平方向对齐 [flex-start | flex-end | center | space-between | space-around | space-evenly]。

    • space-between两端对齐,项目之间的间隔都相等
    • space-around每个项目两侧的间隔相等
    • space-evenly flex容器起始边缘和第一个 flex 项之间的间距和每个相邻 flex 项之间的间距是相等。以前浏览器不支持,chrome 也是 60 版本之后才支持。
  • align-items: 垂直方向对齐 [flex-start | flex-end | center | baseline | stretch]

    • 项目的第一行文字的基线对齐
    • stretch如果项目未设置高度或设为auto,将占满整个容器的高度。
  • align-content: [flex-start | flex-end | center | space-between | space-around | stretch]定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。


项目属性
  • order:定义项目的排列顺序。数值越小,排列越靠前,默认为0。

  • flex-grow:定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

  • flex-shrink:定义项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。不可为负值。

  • flex-basis:定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

  • flex:flex-grow, flex-shrink 和 flex-basis的简写,默认0 1 auto。该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

  • align-self:[auto | flex-start | flex-end | center | baseline | stretch] 允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性,默认值为auto,效果同align-items。


使用心得
  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>
  • 主轴上父容器总尺寸为 600px

  • 子元素的总基准值是:0%(即为0)+ auto(对应其width100px)+ 200px = 300px
    故剩余空间为 600px - 300px = 300px
    伸缩放大系数之和为: 2 + 2 + 1 = 5
    剩余空间分配如下:

    .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有什么区别

相关文章

  • display:flex详细思考

    旧版浏览器,如IE11或更低版本,不支持或仅部分支持 Flexbox 。如果你想安全的使用页面正常呈现,你应该退回...

  • CSS3 display:flex和display:box有什么

    CSS3 display:flex和display:box有什么区别?display:box布局的详细介绍(图解)...

  • 浏览器兼容直接用

    display: flex;display: -webkit-box;display: -webkit-flex;...

  • flex.css

    .flex {display: -webkit-box;display: -webkit-flex;display...

  • Flex布局相关属性

    定义display:flex或inline-flex开启子元素的Flex布局。 设置display: flex后,...

  • #flex布局(1)-父容器

    flex布局-父容器 Property #1: Display: Flex 给父容器设置display:flex ...

  • css flex layout

    声明元素为flex-container display: flex;display: inline-flex; f...

  • flex 布局

    容器(父元素): display: flex 或者 display: inline-flex(行内元素) flex...

  • flex常用

    display: flex;display: -webkit-flex; //兼容ie justify-conte...

  • flex布局

    display: flex和display: inline-flex的区别 flex:块级 代码演示 如图 inl...

网友评论

      本文标题:display:flex详细思考

      本文链接:https://www.haomeiwen.com/subject/gipdbftx.html