1. 传统布局与 flex 布局比较

 传统布局

  • 兼容性好
  • 布局繁琐
  • 局限性,不能在移动端很好的布局

 flex 弹性布局

  • 操作方便,布局极为简单,移动端应用很广泛
  • PC端浏览器支持较差
  • IE 11 或 更低版本,不支持或仅部分支持

2. flex 布局原理

 flex 是 flexible Box 的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex 布局。

  • 当为父盒子设为 flex 布局之后,子元素的 float,clear 和 vertical-align 属性将失效
  • 伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 = flex布局

 采用 Flex 布局的元素,称为 Flex 容器,简称为“容器”。它的所有子元素自动成为容器成员,成为 Flex 项目,简称“项目”。

  • 体验中 div 就是 flex 父容器
  • 体验中 span 就是子容器 flex 项目
  • 子容器可以横向排列,也可以纵向排列

 总结 flex 布局原理:就是通过给父盒子添加 flex 属性,来控制子盒子的位置和排列方式。

3. flex 布局父项常见属性

  • flex-direction:设置主轴方向
  • justify-content:设置主轴上的子元素排列方式
  • flex-wrap:设置子元素是否换行
  • align-items:设置侧轴上的子元素排列方式(单行)
  • align-content:设置侧轴上子元素的排列方式(多行)
  • flex-flow:复合属性,相当于同时设置了 flex-direction 和 flex-wrap

 1. flex-direction:设置主轴方向

   在 flex 布局中,分为主轴 和 侧轴 两个方向,同样叫法有 行和列,x轴 和 y 轴

    默认 主轴方向就是 x 轴方向,水平向右

    默认 侧轴方向就是 y 轴方向,水平向下

   flex-direction 属性决定主轴的方向(即项目的排列方向)

   注意:主轴 和 侧轴会变化的,就看 flex-direction 设置谁为主轴,剩下的就是侧轴,而我们的子元素是跟着主轴来排列的。

   flex-direction:row(默认值从左到右) / row-reverse(从右到左) / column(从上到下) / column-reverse(从下到上) ;

 2. justify-content 设置主轴上的子元素排列方式(属性定义了项目在主轴上的对齐方式)

  注意:使用这个属性之前一定要确定好主轴是哪个

  flex-start:默认值,从头开始 如果主轴是 x 轴,则从左到右

  flex-end:从尾部开始排列

  center:在主轴居中对齐(如果主轴是 x 轴则水平居中)

  space-around:平分剩余空间

  space-between:先两边贴边 再评分剩余空间(重要)

 3. flex-wrap 设置子元素是否换行

  默认情况下,项目都排在一条线(又称“轴线”)上。flex-wrap 属性定义,flex 布局中默认是不换行的。

  flex 布局中,默认的子元素是不换行的,如果装不开,会缩小子元素的宽度,放到父元素里面。

  nowrap:默认值,不换行

  wrap:换行

 4. align-items 设置侧轴上的子元素排列方式(单行)

  该属性是控制子项在侧轴(默认是 y 轴)上的排列方式,在子项为单项的时候使用

  flex-start:从上到下

  flex-end:从下到上  

  center:挤在一起居中(垂直居中)  

  stretch:拉伸(默认值)

 5. align-content 设置侧轴上的子元素的排列方式(多行)

  设置子项在侧轴上的排列方式 并且只能用于子项出现 换行 的情况(多行),在单行下是没有效果的。

  flex-start:默认值 在侧轴的头部开始排列

  flex-end:在侧轴的尾部开始排列

  center:在侧轴中间显示

  space-around:子项在侧轴平分剩余空间

  space-between:子项在侧轴先分布在两头,在平分剩余空间

  stretch:设置子项元素高度平分父元素高度

 6. align-items 和 align-content 区别

  • align-items  适用于单行情况下,只有上对齐,下对齐,居中和拉伸
  • align-content  适用于换行(多行)的情况下(单行情况下无效),可以设置上对齐,下对齐,居中,拉伸以及平分剩余空间等属性值。
  • 总结:单行找 align-items  多行找 align-content

 7. flex-flow (复合属性)

  flex-flow 属性是 flex-direction 和 flex-wrap 属性的复合属性

  flex-flow:row  wrap;

4. flex 布局子项常见属性

  • flex 子项目占的份数
  • align-self 控制子项自己在侧轴的排列方式
  • order 属性定义子项的排列顺序(前后顺序)

 1. flex属性:定义子项目分配剩余空间,用 flex 来表示占多少份数。

  flex 除了用数字表示份数,也可以用 % (百分比)根据父元素的做百分比

  .item{

    flex:<number>;  //  默认值 0

  }

 2. align-self 控制子项自己在侧轴上的排列方式

  align-self 属性 允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性。

  默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,则等同于 stretch。

  span:nth-child(2){

    align-self:flex-end;// 设置自己在侧轴上的排列方式

  }

 3. order 属性定义项目的排列顺序

  数值越小,排列越靠前,默认为0(和 z-index 不一样)

flex布局(弹性布局)的更多相关文章

  1. Flex box弹性布局 及 响应式前端设计的优化

    Flex box弹性布局 Flex box是CSS3新添加的一种模型属性,它的出现有力的打破了我们常常使用的浮动布局.实现垂直等高.水平均分.按比例划分,可以实现许多我们之前做不到的自适应布局.如果你 ...

  2. CSS3:布局display属性的flex(弹性布局)

    CSS3:布局display属性的flex(弹性布局) 一.简介 Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性.设为Flex布局以后, ...

  3. Flutter布局----弹性布局 (Flex)

    弹性布局(Flex) 弹性布局允许子组件按照一定比例来分配父容器空间.弹性布局的概念在其它UI系统中也都存在,如H5中的弹性盒子布局,Android中的FlexboxLayout等.Flutter中的 ...

  4. HTML-移动开发技巧 响应式布局 弹性布局

    移动开发常用技巧 [viewport基本知识] 设置布局viewpoint的各种信息 1.width=device-width;设置viewport视口宽度等于设备宽度 2.initial-scale ...

  5. flex布局-弹性布局

    弹性布局当前应用的非常广泛,特别是移动端,记得第一次用reactNative 写代码的时候是最开始真正接触Flex布局.1.首先最外层的容器需要指定为display:flex;由于flex的兼容版本还 ...

  6. css布局 弹性布局 和 网格布局

    这里就不写这两种布局的内容了 弹性布局链接:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html 网格布局链接:https://www.ji ...

  7. flex (html弹性布局)

    flex是什么? 任何容器都可以指定为flex布局: .box{ display: flex;  /* 行内元素可以使用:inline-flex,webket内核浏览器必须 -webkit-flex ...

  8. Flex弹性布局在移动设备上的应用

    引文 首先,我们有表格布局.当不考虑语义并且利用一些适当的嵌套和其他技巧,我们可以用table建立具有一定功能的布局. 然后是现在大多数人都在使用的浮动布局.我们可以使用任何我们想用的元素,但浮动并不 ...

  9. 两点补充——CSS3新属性以及弹性布局

    CSS3 新属性 一.[ CSS3新增属性前缀 ] 1.-webkit-:chrome/safari 2.-moz-:火狐 3.-mo-:IE 4.-o-: Opera 欧朋 二 .[CSS 长度单位 ...

随机推荐

  1. Linux 环境下安装rlwrap工具

    rlwrap项目是一个“readline包装器”,它使用GNU readline库来编辑任何其他命令的键 盘输入.通过rlwrap可以进行命令的上下切换,类似历史命令. 1.下载rlwrap rpm ...

  2. 从现在开始强迫自己使用 Reflect

    静态方法 Reflect.apply(target, thisArg, args) 等同于 Function.prototype.apply.call(func, thisArg, args) Ref ...

  3. python杂货

    三.字典的基本操作 1.如何访问字典中的值? adict[key] 形式返回键key对应的值value,如果key不在字典中会引发一个KeyError. adict.get(key, default ...

  4. spring 事物(二)—— 编程式事物实现与扩展

    简介 使用TransactionTemplate 不需要显式地开始事务,甚至不需要显式地提交事务.这些步骤都由模板完成.但出现异常时,应通过TransactionStatus 的setRollback ...

  5. Hibernate中Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法有什么区别?

    Hibernate的对象有三种状态:瞬态.持久态和游离态.游离状态的实例可以通过调用save().persist()或者saveOrUpdate()方法进行持久化:脱管状态的实例可以通过调用 upda ...

  6. 【串线篇】概述SpringMvc和spring整合

    SpringMVC和Spring整合的目的:分工明确: SpringMVC的配置文件就来配置和网站转发逻辑以及网站功能有关的(视图解析器,文件上传解析器,支持ajax,xxx):springmvc.x ...

  7. 3、selenium 问题汇总

    一.'chromedriver' executable needs to be in PAT: 解决方法  下载谷歌驱动文件:Chromedriver.exe 将Chromedriver.exe 拷贝 ...

  8. webpack 学习4 使用loader 以及常用的一些loader

    webpack本身只支持处理JavaScript,其他的文件,如css img less是不识别的,所以才会有loader这个东西,它就是可以使webpack能够处理其他非js文件的拓展程序 首先我们 ...

  9. 开源实践分享:Ceph bluestore部署实践

    https://blog.51cto.com/99cloud/2119884 Ceph bluestore部署 首先为大家分享Ceph bluestore具体该如何部署,使用环境如下• 单节点• Ce ...

  10. BlueStore-先进的用户态文件系统《二》-BlueFS

    https://zhuanlan.zhihu.com/p/46362124 简介 上一篇文章中,介绍了BlueStore的诞生背景.逻辑架构以及设计思想,提到了在BlueStore中元数据都是存放在R ...