Flex是Flexible Box的缩写,意为弹性布局。是W3C早期提出的一个新的布局方案。可以便捷的实现页面布局,目前较高版本的主流浏览器都能兼容,兼容情况如下:

 

Flex在移动端开发上已是主流,比如在h5页面,微信小程序等等。

  为什么要用弹性布局呢?

  在传统的布局方案主要基于CSS盒子模型,依赖display、position、float等属性。但是它对于一些特殊的布局非常不方便,比如盒子水平剧中,实现起来比较繁琐,各种黑科技。现在我们用多种方法实现盒子剧中,基础dom如下:父容器背景为粉色的容器,目标盒子为200px的天蓝色子容器:

实现效果:

传统方法一:

传统方法二:

Flex布局方法就简单多了

  下面是Flex的使用

   任何一个容器都可以指定为Flex布局,写法: .box{ display: flex; },

   行内元素也可以使用Flex布局, 写法: .box{ display: inline-flex; },

   注意:Webkit内核的浏览器需加上-webkit前缀,另外,设为Flex布局后,子元素的float、clear及vertical-alian属性都将失效。

  

  基本概念

  父容器设为flex后,它所有的子元素自动成为容器成员(这里的子元素不论是什么元素,块级还是行内,而且只作用于子元素,对孙元素无效,需要继续在子元素上设置display:flex)。

   Flex的基本概念就是容器和轴,容器包括外层的父容器和内层的子容器(也叫项目,flex item),轴包括主轴和交叉轴。如下图:

  容器默认存在两根轴,水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框交叉的点)叫做main start;结束的位置叫main end;交叉轴的开始位置叫cross start;交叉轴结束的未知叫cross end。

  子容器(项目)默认沿主轴排列,单个项目占据的主轴空间叫做main size,占据交叉轴的空间叫cross size。

  Flex 布局主要涉及12个属性(不含display:flex),其中容器和子容器各6各,但是平常使用到的基本只有4个属性,父容器和子容器各2个。

  作用于父容器的属性

  . flex-direction

  . flex-wrap

  . flex-flow

  . justify-content

  . align-items

  . align-content

  作用于子容器(项目)的属性

  . order

  . flex-grow

  . flex-shrink

  . flex-basis

  . flex

  . align-self

  详细介绍

 容器属性

  1、flex-direction

  flex-direction属性决定主轴的方向,及子容器(项目)的排列方向。

  。 row(默认值):主轴为水平方向,起点在左端(从左到右排序,相当于float:left);

  

  。 row-reverse:主轴为水平方向,起点在右端(从右往左排序,相当于float:right);

  

  。 column:主轴为垂直方向,起点在上沿;

  

  。 column-reverse:主轴为垂直方向,起点在下沿。

  

  2、flex-wrap

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

  

  。 nowrap(默认):不换行;

  

  。 wrap:换行,第一行在上方;

  

  。wrap-reverse:换行,第一行在下方;

  

  3、flex-flow

  flex-flow属性是flex-direction和flex-wrap的简写形式,默认值:row nowrap

  

  4、justify-content

 justify-content定义了子容器(项目)在主轴上的对齐方式。

  。 flex-start(默认值):左对齐;

  

  。 center:居中;

  

  。 flex-end:右对齐;

  

  。 space-between:两端对齐,子容器(项目)之间的间隔相等;

  

  。 space-around:每个子容器(项目)两侧的间距相等,所以子容器(项目)的间隔比子容器(项目)与边框的间隔大一倍;

  

  5、align-items

  align-items属性定义了子容器(项目)在交叉轴的对齐方式。

  

  。 flex-start:交叉轴的起点对齐;

  

  。 center :交叉轴居中;

  

  。 flex-end:交叉轴的终点对齐;

   

  。 baseline:子容器(项目)的第一行文字的基线对齐;

  

  。 stretch(默认值):如果子容器(项目)未设置高度或者设为auto时,将占满整个容器的高度;

  

 

  6、algin-content

  align-content属性定义了多根轴线的对齐方式,如果子容器(项目)只有一根轴线,该属性不起作用。

  

  。 flex-start:与交叉轴的起点对齐;

  。 center:与交叉轴的中点对齐;

  。 flex-end:与交叉轴的终点对齐;

  。 space-between:与交叉轴两端对齐,轴线之间的间隔平均分布;

  。 space-around:每根轴线两侧的间隔都相等,所以,轴线之间的间隔比轴线与边框的间隔大一倍;

  。 stretch(默认值):轴线占满整个交叉轴;

  

  容器(项目)属性

  1、order  

  order属性定义项目的排列顺序,数值越小,排在越前,默认为0。 .item { order: <integer> }

  2、flex-grow

  flex-grow属性定义项目方大比例,默认为0,即如果存在剩余空间,也不放大。 .item{ flex-grow: <number>}  注意:负数是相当于默认值

  

  

  

  3、flex-shrink

  flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。 .item { flex-shrink: <number> }

  

  

  

  如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效。

  注意:只有当父容器空间不够时该属性才会生效,另外当空间继续减小时,flex-shrink属性值越大的子容器(项目)先缩小。

  4、flex-basis

  flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。

  它的默认值为auto,即项目的本来大小。 .item { flex-basis: <length> | auto }

  

  

  

  注意:它可以设为跟widthheight属性一样的值(比如350px),则项目将占据固定空间。

  5、flex

  flex属性是flex-growflex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

.item { flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]}

  该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。

  建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

  6、align-self

  align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch

  .item { align-self: auto | flex-start | flex-end | center | baseline | stretch;}

  

  注意:该属性可能取6个值,除了auto,其他都与align-items属性完全一致。auto为默认值!

转载于:https://www.cnblogs.com/Jacky-MYD/p/7692087.html

学习flex布局(弹性布局)相关推荐

  1. HTML/CSS布局—Flex布局(弹性布局)

    目的:能够使用Flex布局模型灵活.快速的开发网页 Flex布局/弹性布局: 是一种浏览器提倡的布局模型 布局网页更简单.灵活 避免浮动脱标的问题 作用: 基于 Flex 精确灵活控制块级盒子的布局方 ...

  2. Flutter 布局Row(水平方向布局)、Column(垂直方向布局)、Wrap(可以自动换行的布局)、Flex(弹性布局)、Stack(叠层布局)、

    1.线性布局 Row 水平方向布局 Row({... //表示水平方向子组件的布局顺序(是从左往右还是从右往左),//默认为系统当前Locale环境的文本方向(如中文.英语都是从左往右,而阿拉伯语是从 ...

  3. flex布局(弹性布局、伸缩布局)

    flex是CSS3中的一种布局方式 主要介绍下弹性布局的常用的一些属性 当一个盒子设置为display:flex的时候,盒子会变为一个弹性盒子,盒子内部的子元素会默认沿着主轴方向排布,此时会引出主轴和 ...

  4. 自适应网页(响应式布局)+弹性布局

    1.自适应网页 1.声明viewport元标签 <meta name="viewport" content="width=device-width,initial- ...

  5. CSS display:flex(弹性布局)

    序: ​ 考虑到实际开发中,写样式的机会不多,但是不可能不写,脑子容量总是不够用,每次都查,这次自己就总结下,方便下次查找(举例以下常用六个属性,语法都是加在父元素身上的). 1.flex-direc ...

  6. Html——flex布局 弹性布局

    以下文章主要探讨 HTML5 中 CSS3 提供的用来实现未来响应式弹性伸缩布局方案. 一.flex布局的语法 块级元素 :display: flex ---- 将容器盒模型作为块级弹性伸缩盒显示 行 ...

  7. flex 左右布局_web前端学习:移动端开发常用布局—前端弹性布局总结

    各位已经入坑的前端小伙伴,前面咱们已经给大家分享了移动端开发时候流式布局的应用场景及注意事项,今天再次给大家分享一个布局叫弹性布局,接下来咱们从如下几个方面,全方位的给大家介绍弹性布局的使用. 一:什 ...

  8. flex 左右布局_移动端开发常用布局:前端弹性布局总结

    各位已经入坑的前端小伙伴,前面咱们已经给大家分享了移动端开发时候流式布局的应用场景及注意事项,今天再次给大家分享一个布局叫弹性布局,接下来咱们从如下几个方面,全方位的给大家介绍弹性布局的使用. 一:什 ...

  9. HTML+CSS flex弹性布局

    flex布局原理 flex是flexible box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局. 当我们为父盒子设置为flex ...

  10. Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

    目录​​​​​​​ 前言 Flex 布局是什么? Flex 简介 Flex 容器属性 Flex 基本使用 场景一 flex-direction 场景二 justify-content align-it ...

最新文章

  1. 诗人般的机器学习,ML工作原理大揭秘
  2. 手机主宰了你的生活,这不是乔布斯想看到的
  3. 攻防世界php2_攻防世界-php2
  4. 数据库基础之一--DDL(数据库定义语言),DCL(数据库控制语言)
  5. MINIGUI 开发指南---GDI
  6. cent os 7 与cent os 6 修改主机名称
  7. 贺利坚老师汇编课程57笔记:CMP和JXXX配合实现条件转移指令if
  8. Android通过泛型简化findViewById类型转换
  9. 图书馆占座系统(二)
  10. 软件开发文档-详细设计文档
  11. 英寸和厘米的换算python_运用python实现英制单位英寸与公制单位厘米互换
  12. 平面设计和包装设计的区别关系是什么
  13. 基于Java毕业设计在线装机报价系统源码+系统+mysql+lw文档+部署软件
  14. vue图片连拼实现gif图效果
  15. Window环境下 Jenkins Master/Slaver模式 + Svn 部署
  16. 5、hibernate第六课
  17. 漫谈:一个工作两年半的程序员的人生感悟
  18. 抓取网页数据的几种方法
  19. 嵌入式编程中boot和app的s19简易合并方法(使用mfc编程)
  20. String的一些方法

热门文章

  1. 关于个人防火墙的真相
  2. frame框架 超链接
  3. clipboard 在 vue 中的使用
  4. 12-1 12 防盗链 访问控制 php解析 代理
  5. javascript中对变量类型的推断
  6. SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元
  7. linux运维(五)
  8. Java知多少(105)套接字(Socket)
  9. this的用法this.name=name 这个什么意思
  10. 隐藏nginx 版本号信息