flex顶层设计

1.在任何流动的方向上(包括上下左右)都能进行良好的布局

2.可以以逆序 或者 以任意顺序排列布局

3.可以线性的沿着主轴一字排开 或者 沿着侧轴换行排列

4.可以弹性的在任意的容器中伸缩大小

5.可以使子元素们在容器主轴方向上 或者 在容器侧轴方向上 进行对齐

主轴和侧轴

什么是主轴

什么是侧轴

他们是如何切换的

首先每一根轴都包括 三个东西:维度、方向、尺寸

  • 所谓的维度实际上就是意思就是子元素 横着排还是竖着排(x 轴 或 y 轴)
  • 方向 即排列子元素的顺序 顺序还是逆序
  • 尺寸 即width[height] : 每一个子元素在主轴方向所占的位置的总和 如果主轴是水平的,那么尺寸就是父元素内所有itemouterWidth总和,如果主轴是垂直的,那么尺寸就是父元素的outerHeight

为了方便 flex-direction + flex-wrap 合并成了一个属性 flex-flow
主侧轴的切换十分简单,当主轴设定的时候,它的垂直面,就默认被设定成了侧轴
flex-flow: row-reverse wrap-reverse

  • 子元素是横着排列的,主轴是水平的横轴,侧轴是竖直的纵轴
  • 子元素是逆序并沿着主轴排列的,从右到左
  • 子元素是换行的
  • 子元素是逆序并沿着侧轴排列的,从下到上

FFC (flex formatting context)

Flexbox 布局新定义了格式化上下文,类似 BFC(block formatting context)。有多类似呢? 就是除了布局和一些细节不同以外的一切规则都和 BFC 是相同的

注意 : 我所指的Flexbox 是指设置了 display: flex; 或 display: inline-flex;的盒子。不是指单单设置了 display: flex; 的盒子。

例如,设置了 display: flex; 或 display: inline-flex的元素,和BFC一样,不会被浮动的元素遮盖,不会垂直外边距坍塌等等。

而对于设置了 display: inline-flex 的盒子来说,我们可以类比 display: inline-box;行理解。即 一个被行列化后的 Flexbox。它不会独占一行,但是可以设置宽和高。

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

  • Flexbox 不支持 ::first-line 和 ::first-letter 这两种伪元素
  • vertical-align 对 Flexbox 中的子元素 是没有效果的
  • float 和 clear 属性对 Flexbox 中的子元素是没有效果的,也不会使子元素脱离文档流(但是对Flexbox 是有效果的!)
  • 多栏布局(column-*) 在 Flexbox 中也是失效的,就是说我们不能使用多栏布局在Flexbox 排列其下的子元素(鱼和熊掌不可得兼嘛)
  • Flexbox 下的子元素不会继承父级容器的宽

flex item(flex 子元素)

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

规范中把这种盒子 称为 flex item,而子元素中包括了 标签节点 以及 文本节点。标签节点很容易理解,需要注意的是文本节点。

默认情况下,flex 会将 连续的文本节点 装进 flex-item 之中,使文本可以和标签节点一起排序和定位。

值得注意的是,空格也是文本节点,所以 white-space 会影响Flexbox 中的布局:

flex-item-size 如何计算的

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

1. flex-basis 的优先级比 width[height]: 非auto; 高

如果子元素没有内容和默认固定宽高,且设置了flex-basisflex-item contentflex-basis来决定,无论width[height] 设置了多少。

(可理解为 flex-basis 比 width[height]: 非auto;的优先级高)

flex-basis的优先级比width[height]高,无论width[height]设置多少,flex-item content都以flex-basis来决定

2.元素存在默认宽高

如果子元素有默认固定宽高(例如input 标签)、并且设置了 flex-basis,那么它的 content以 固定宽高为下限,如果flex-basis 超过了固定宽高,那么flex-basis则成为其 content,如果flex-basis比固定宽高小,那么以固定宽高为 content

3.元素存在 min-width[height] 或者 max-width[height]

如果flex-item 有min-width[min-height] 的限制,那么flex-item content按照 min-width 值为下限,如果 flex-basis 的值大于 min-width[min-height] 那么flex-item content以 flex-basis 计算。

如果flex-basis 的值小于 min-width[min-height] 那么flex-item contentmin-width[min-height]

如果 min-width[min-height] 的值已经超出了容器的尺寸,那么即使设置了 flex-shrink。 CSS解析器也不会进行将这个item的 content shrink,而是坚持保留它的min-width[min-height]

4.width[height]: auto; 优先级等于 flex-basis。

前面提到,如果给item同时设置了width[height] 和 flex-basis的话。flex-item content以flex-basis来决定。但是实际上默认的 width[height]: auto; 优先级是等于 flex-basis的。

CSS解析器对比两者的值,两者谁大取谁 作为item的基本尺寸,如果一个item没有内容,flex-item content就会以flex-basis来决定。

但是如果item有了内容,且内容撑开的尺寸比flex-basis大,那么flex-item content就会以width[height]: auto; 来决定,且无法被 shrink。反之,如果比flex-basis小,flex-item content就会以flex-basis来决定

idth: auto; 内容长度比 flex-basis 大,则 flex-item content以内容长度来决定,且无法shrink

如果 flex-basis 的长度大于文字内容长度,那么flex-item content以 flex-basis

Flexbox 布局很棒还是需要深入理解的

转载于:https://www.cnblogs.com/zhouyideboke/p/11327640.html

对flex深入研究一点相关推荐

  1. flex布局的一点注意点

    1.英文文字会默认为是一个单词不换行..会撑大盒子到不可视区,可以用word-break: break-all;强制换行. 2.如果图文文字在同一row,文字过多会导致图片为压缩宽度,这时候可以fle ...

  2. flex使用手册翻译

    原文网址在这里,一些我认为不重要的部分就略了.大部分是google翻译(毕竟一句一句慢慢看好再翻还是很累的好吧TAT),绝不代表本人的水平(滑稽.jpg).不恰当的地方欢迎指正,也欢迎补充剩下的&qu ...

  3. 今天微软关闭Silverlight官网,Sivlerlight真得要死了吗?

    不出大家所料,微软正一步步地放弃Silverlight,虽然前阵子微软在发布Silverlight5时还嘴硬,但是微软接下来的一些举止和态度,都明显地表明了Silverlight正在走下坡路. 微软不 ...

  4. 35岁中年博士失业,决定给后辈一些建议!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文授权转载自公众号CFD界  作者:李东岳.如需转载请联系原作者授 ...

  5. 35岁中年博士失业,决定给找高校教职的后辈一些建议

    我,2016年博士毕业,随后出国做了一年的博士后.中途有近3年海外经历.2018年进入北京某原211高校.自己有一个网站.论坛.和公众号,自己创立的平台在领域内数一数二(这句话我说的出口).热爱科研爱 ...

  6. Windows环境下smarty安装最简明教程 分享

    记得去年写过一个windows+IIS的PHP4安装最简明教程,那天去baidu搜了一下,竟然查到了好几页,这篇文章被很多网站.blog转载,在论坛上的阅读次数截至今日更是让人难以置信的达到1800多 ...

  7. 20164319 刘蕴哲 Exp1 PC平台逆向破解

    [实践内容概述] 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,ge ...

  8. 不是吧!做了3年Android还没看过OkHttp源码?好吧,带你彻底理解一波!

    前言 现在Android界的网络请求已经是OkHttp和Retrofit的天下了,Retrofit本质上也是将请求委托给了OkHttp,所以我们如果想要能够更加全面的使用和掌握OkHttp,了解其源码 ...

  9. Android开发之路:搞懂这几个问题,就掌握了屏幕适配原理

    前言概要: 1,进大公司还是小公司,真的有的选? 2,校招的潜规则 3,校招想进大厂怎么办 4,社招的潜规则 5,社招想进大厂怎么办? 前言 现在Android界的网络请求已经是OkHttp和Retr ...

最新文章

  1. 1102 Invert a Binary Tree 需再做
  2. codeforce708C:树形dp+二次扫描
  3. 谈谈android反编译和防止反编译的方法
  4. ctrl+鼠标左键监听
  5. mysql DML操作、关联查询、联合查询、聚合函数使用
  6. 使用WatchService监控文件变化
  7. 一切苦恼的都是本质上由于能力不够
  8. 牛客 contest893 G-Truthman or Fakeman
  9. python查看pypi第三方库可安装的全部版本
  10. ffmpeg sdk java_推荐一个强大的音视频处理的开源项目!
  11. VC++中对话框数据交换【十全十美】
  12. python最好的五个库_5 个Python 库,照亮你的机器学习之路
  13. Markdown的下载与应用
  14. Microbiome:中国科学家完成鸡肠道微生物宏基因集的构建(张和平、魏泓、秦楠点评)...
  15. rockbox主题包安装_RockBox 安装使用参考
  16. 阿里云国际版云服务器自助诊断系统-Unirech
  17. uni-app开发小程序,笔记记录6 商品详情页
  18. php的解析别名,浅谈laravel aliases别名的原理
  19. face to face
  20. 怎么看越努力,越幸运?

热门文章

  1. [蓝桥杯][基础练习VIP]2n皇后问题(深搜)
  2. 奇小葩讲设备树(2/5)-- Linux设备树详解(二)文件构成
  3. oracle分区和锁的难,oracle使用三(锁和表分区)
  4. mysql 查询二维数组_sql数据库查询结果存入二维数组,结果都是0?求帮助
  5. 怎么在linux操作python_pythonlinux怎么操作
  6. php make,安装PHP出现make:
  7. CST 使用注意事项【持续更新】
  8. 开源sip客户端 linux,开源SIP服务器 Kamailio
  9. excel python插件_利用 Python 插件 xlwings 读写 Excel
  10. Java学习_强制类型转换