flex项目深入分析

2017-05-15  本文已影响0人  林立镇

FFC (flex formatting context)

与BFC的细微区别

但需要注意的是以下几点细节,Flexbox 布局 和 Block 布局是有细微区别的

Flex box(父元素)

  1. Flexbox 不支持 ::first-line 和 ::first-letter 这两种伪元素
  2. vertical-align 对 Flexbox 中的子元素 是没有效果的
  3. float 和 clear 属性对 Flexbox 中的子元素是没有效果的,也不会使子元素脱离文档流(但是对Flexbox 是有效果的!)

flex item(flex 子元素)

  1. 多栏布局(column-*) 在 Flexbox 中也是失效的,就是说我们不能使用多栏布局在Flexbox 排列其下的子元素(鱼和熊掌不可得兼嘛)
  2. Flexbox 下的子元素不会继承父级容器的宽

flex项目盒子介绍

  1. CSS解析器会把 定义了 display: flex; 和 display: inline-flex; 的 Flexbox 下的子元素外部装进一个看不见的盒子里,我们通过排列这些盒子来达到排序、布局、 伸缩的目的。

flex-item-size 如何计算的

item-size(尺寸)为主轴方向上item的 content 再加上自身的margin 、 border 和 padding 就是这个 item 的尺寸。

位置

  1. flexbox 下设置了absolute的子元素的位置受3个方面的影响:
image.png

宽或高

三种情况

  1. flex-basis > width[height]: 非auto(没有元素默认值和内容); (优先级)
  2. width:auto、width:非auto和flex-basic(优先级比较)
    • width:auto < flex-basis值
    • width:auto < flex-basis(优先级)
    • width:auto > flex-basis值
    • width:auto > flex-basis(优先级)
    • width:非auto < flex-basis(优先级)
  3. min-width[height]、max-width[height]、flex-basis和flex container(父元素容器尺寸)(优先级比较)
    min-width[min-height]
    • flex-basis > min-width[min-height] 值
    • flex-basis > min-width[min-height](优先级)
    • flex-basis < min-width[min-height] 值
    • flex-basis < min-width[min-height](优先级)
flex container
max-width[height]
总结:
  1. width:auto、width:非auto、flex、min-width[min-height]、max-width[height]和flex-basis两两比较时取最大值
  2. width:非auto 和 flex-basis(优先级)同时设置时,width:非auto < flex-basis(优先级)

伸展和坍塌

这要分两种情况,换行或者不换行。

1. 如果 flex-wrap: nowrap; 即不换行。
1. Flex-item总和 < flex-box时
  注意:flex-shrink 的计算流程和flex-grow的计算流程不同。
2. Flex-item总和 > flex-box时
1. flex-wrap: wrap[wrap-reverse]; 即换行
items 都会先在主轴方向上的多条线上排列,每条线之间互不干扰
1. grow、max-width[height] 情况下 flex-grow 的计算流程
2. min-width[height] 情况下 flex-shrink 的计算流程

隐藏属性对 items-size 的影响

display: none、visibility: hidden、visibility: collapse和transform: scale;
参考

深入理解 flex 布局以及计算

上一篇 下一篇

猜你喜欢

热点阅读