弹性布局flex

前几天写过怪异盒子布局,以前在项目中用到弹性布局flex这个属性,当时没深入研究,这里各种查阅各种测试,把这个属性记录下 以免忘记,

弹性布局:是提供一种更加有效的方式来对一个容器中的条目进行排列、对齐和分配空白空间。即便容器中条目的尺寸未知或是动态变化的,弹性盒布局模型也能正常的工作。

让一个盒子具有弹性布局的属性,要先给其加上样式display:flex;OK我们也会看到有写的是display:box/display:flexbox;其实他们只是不同时期的规范:

  • 新规范:2013年最新版本规范的语法 即display:flex/inline-flex;
  • 中间版本:2011年非官方规范的语法 即display:flexbox/inline-flexbox;
  • 老规范:2009年规范的语法 即display:box/inline-/box;

带inline-的容器渲染为行内元素,没带的为块级元素

可以看到flex近几年几种不同的写法,相应的也带来很多兼容性问题,所以在开发过程中我们要兼顾所有版本,下面是浏览器版本的分界

Chrome:21+(新)20-(老)
Safari: 6.1+(新)3.1+(老)
Firefox:22+(新)2-21(老)
IE:10(中间)
Android: 4.4+(新)2.1+(老)
iOS: 7.1+(新) 3.2+(老)

Chrome当前版本仍然需要添加前缀“-webkit-”,而Firefox和Safari仍然还在使用最老版本的语法。Firefox已经更新为最新的规范,但是,在实际项目中目前最好还先别使用最新的规范,直到它被认为没有bug了或者更稳定了,在使用。在这之前,Firefox还是使用最老的语法规范。ie10支持-ms-的写法,(手机浏览器兼容这个还需要时间去测) 先定义父容器flex盒子并兼容写法

  display: -webkit-box;  /* 老版本语法: Safari,  iOS, Android browser,     older WebKit browsers.  */
  display: -moz-box;    /* 老版本语法: Firefox (buggy) */
  display: -ms-flexbox;  /* 混合版本语法: IE 10 */
  display: -webkit-flex;  /* 新版本           语法: Chrome 21+ */
  display: flex;       /* 新版本语法: Opera 12.1, Firefox 22+ */

一个flexbox布局是由一个伸缩容器(flex container)和伸缩项目(flex items)组成,在伸缩容器中 所有的子元素都会变成伸缩项目,如图

好的 父容器盒子定义为伸缩容器后,里面的伸缩项目会随父容器中所加的样式或自身样式来进行如定义所说排列、对齐和分配空白空间

一,这6个属性是加在父容器上的

flex-direction

flex-wrap

flex-flow

justify-content

align-items

align-content

flex-direcotion

flex-direction:row | row-reverse | column | column-reverse

默认值:row

适用于:伸缩盒容器

继承性:无

row:横向从左到右排列(左对齐),默认的排列方式。

row-reverse:反转横向排列(右对齐,从后往前排,最后一项排在最前面。

column:纵向排列。

row-reverse:反转纵向排列,从后往前排,最后一项排在最上面。

flex-wrap

flex-wrap:nowrap | wrap | wrap-reverse

默认值:nowrap

适用于:弹性盒模型容器

继承性:无

nowrap:当子元素溢出父容器时不换行。wrap:当子元素溢出父容器时自动换行。wrap-reverse:反转 wrap 排列。

flex-flow

flex-flow:[ flex-direction ] || [ flex-wrap ]

默认值:看各分拆属性

适用于:弹性盒模型容器

继承性:无

flex-direction ]:定义弹性盒子元素的排列方向。[ flex-wrap ]:定义弹性盒子元素溢出父容器时是否换行。

justify-content

justify-content:flex-start | flex-end | center | space-between | space-around

默认值:flex-start

适用于:弹性盒模型容器

继承性:无

flex-start:弹性盒子元素将向行起始位置对齐。该行的第一个子元素的主起始位置的边界将与该行的主起始位置的边界对齐,同时所有后续的伸缩盒项目与其前一个项目对齐。

flex-end:弹性盒子元素将向行结束位置对齐。该行的第一个子元素的主结束位置的边界将与该行的主结束位置的边界对齐,同时所有后续的伸缩盒项目与其前一个项目对齐。

center:弹性盒子元素将向行中间位置对齐。该行的子元素将相互对齐并在行中居中对齐,同时第一个元素与行的主起始位置的边距等同与最后一个元素与行的主结束位置的边距(如果剩余空间是负数,则保持两端相等长度的溢出)。

space-between:弹性盒子元素会平均地分布在行里。如果最左边的剩余空间是负数,或该行只有一个子元素,则该值等效于‘flex-start‘。在其它情况下,第一个元素的边界与行的主起始位置的边界对齐,同时最后一个元素的边界与行的主结束位置的边距对齐,而剩余的伸缩盒项目则平均分布,并确保两两之间的空白空间相等。

space-around:弹性盒子元素会平均地分布在行里,两端保留子元素与子元素之间间距大小的一半。如果最左边的剩余空间是负数,或该行只有一个伸缩盒项目,则该值等效于‘center‘。在其它情况下,伸缩盒项目则平均分布,并确保两两之间的空白空间相等,同时第一个元素前的空间以及最后一个元素后的空间为其他空白空间的一半。

align-items

align-items:flex-start | flex-end | center | baseline | stretch

默认值:stretch

适用于:弹性盒模型容器

继承性:无

flex-start:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。

flex-end:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。

center:弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。

baseline:如弹性盒子元素的行内轴与侧轴为同一条,则该值与‘flex-start‘等效。其它情况下,该值将参与基线对齐。

stretch:如果指定侧轴大小的属性值为‘auto‘,则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照‘min/max-width/height‘属性的限制。

align-content

align-content:flex-start | flex-end | center | space-between | space-around | stretch

默认值:stretch

适用于:多行的弹性盒模型容器

继承性:无

flex-start:各行向弹性盒容器的起始位置堆叠。弹性盒容器中第一行的侧轴起始边界紧靠住该弹性盒容器的侧轴起始边界,之后的每一行都紧靠住前面一行。

flex-end:各行向弹性盒容器的结束位置堆叠。弹性盒容器中最后一行的侧轴起结束界紧靠住该弹性盒容器的侧轴结束边界,之后的每一行都紧靠住前面一行。

center:各行向弹性盒容器的中间位置堆叠。各行两两紧靠住同时在弹性盒容器中居中对齐,保持弹性盒容器的侧轴起始内容边界和第一行之间的距离与该容器的侧轴结束内容边界与第最后一行之间的距离相等。(如果剩下的空间是负数,则各行会向两个方向溢出的相等距离。)

space-between:各行在弹性盒容器中平均分布。如果剩余的空间是负数或弹性盒容器中只有一行,该值等效于‘flex-start‘。在其它情况下,第一行的侧轴起始边界紧靠住弹性盒容器的侧轴起始内容边界,最后一行的侧轴结束边界紧靠住弹性盒容器的侧轴结束内容边界,剩余的行则按一定方式在弹性盒窗口中排列,以保持两两之间的空间相等。

space-around:各行在弹性盒容器中平均分布,两端保留子元素与子元素之间间距大小的一半。如果剩余的空间是负数或弹性盒容器中只有一行,该值等效于‘center‘。在其它情况下,各行会按一定方式在弹性盒容器中排列,以保持两两之间的空间相等,同时第一行前面及最后一行后面的空间是其他空间的一半。

stretch:各行将会伸展以占用剩余的空间。如果剩余的空间是负数,该值等效于‘flex-start‘。在其它情况下,剩余空间被所有行平分,以扩大它们的侧轴尺寸。

更多测试实例 点击进入

二,这6个属性是加在项目上的

order
flex-grow
flex-shrink
flex-basis
flex
align-self

order

order<integer>

默认值:0

适用于:弹性盒模型容器子元素

继承性:无

取值:用整数值来定义排列顺序,数值小的排在前面。可以为负值。

flex-grow

flex-grow<number>

默认值:0

适用于:弹性盒模型容器子元素

继承性:无

取值:用数值来定义扩展比率。不允许负值,默认值为0;

flex-shrink

flex-shrink<number>

默认值:1

适用于:弹性盒模型容器子元素

继承性:无

取值:用数值来定义收缩比率。不允许负值,默认值为1;

flex-basis

flex-basis<length> | <percentage> | auto

默认值:auto

适用于:弹性盒模型容器子元素

继承性:无

auto:无特定宽度值,取决于其它属性值
<length>:用长度值来定义宽度。不允许负值
<percentage>:用百分比来定义宽度。不允许负值
flex

flex:none | [ flex-grow ] || [ flex-shrink ] || [ flex-basis ]

默认值:看各分拆属性

适用于:弹性盒模型子元素

继承性:无

none:none关键字的计算值为: 0 0 auto

flex-grow ]:定义弹性盒子元素的扩展比率。

flex-shrink ]:定义弹性盒子元素的收缩比率。

flex-basis ]:定义弹性盒子元素的默认基准值。

algin-self

align-self:auto | flex-start | flex-end | center | baseline | stretch

默认值:auto

适用于:弹性盒模型子元素

继承性:无

auto:如果‘align-self‘的值为‘auto‘,则其计算值为元素的父元素的‘align-items‘值,如果其没有父元素,则计算值为‘stretch‘。

flex-start:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。

flex-end:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。

center:弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。

baseline:如弹性盒子元素的行内轴与侧轴为同一条,则该值与‘flex-start‘等效。其它情况下,该值将参与基线对齐。

stretch:如果指定侧轴大小的属性值为‘auto‘,则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照‘min/max-width/height‘属性的限制。

更多测试实例 点击进入

时间: 2024-10-09 09:00:18

弹性布局flex的相关文章

从零开始学_JavaScript_系列(17)——CSS&lt;4&gt;(定位、遮罩、float、弹性布局flex)

部分可能不兼容低版本浏览器(比如IE) 部分图片来自网易云课堂,侵.私信.删 (60)定位 ①position ②值: static:默认,无定位 relative:相对定位,仍在文档流之中(其他的元素不变),参照物相对于原来的位置进行定位.会压在其他的元素上面.作用是为绝对定位元素提供参照物. absolute:绝对定位,脱离文档流(后续元素会在绝对定位元素的前序元素的后面),默认宽度是内容宽度,参照物是第一个定位的祖先/根元素(根元素是html元素),如果祖先没有定位元素,那么会导致其参照物

弹性布局Flex的基本语法

一.Flex的简介 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性.用六个字概括弹性布局就是简单.方便.快速. flex( flexible box:弹性布局盒模型),是2009年w3c提出的一种可以简洁.快速弹性布局的属性.主要思想是给予容器控制内部元素高度和宽度的能力.目前已得到以下浏览器支持: 其中在webkit内核的浏览器中使用时,必须加上-webkit-前缀 二.Flex的两个基本概念 (1)容器(flex container

移动端弹性布局--flex

目前,Flex布局,可以简便.完整.响应式地实现各种页面布局.而且,它已得到了所有浏览器的支持,这意味着,我们能很安全地使用这项功能. 如果你对弹性网页布局感兴趣,那可别错过flex这么好用的属性哦. 一. 初识flex 以前我给PC端网页进行布局时,我是基于盒子模型上,然后采用float浮动和position定位这2个主要属性,当时,我对flex布局并不了解.后来当我开始接触移动端项目时,我开始了解新的布局方式,这才知道flex弹性布局的存在. 我为什么会对flex布局有好感呢? 首先是因为以

弹性布局-flex

浅谈display:flex display:flex 意思是弹性布局 首先flex的出现是为了解决哪些问题呢? 一.页面行排列布局 像此图左右两个div一排显示 可以用浮动的布局方式 html部分 css部分 这种布局有两个缺点 1.需要一个空div来清除浮动,当然也可以选用其他清除浮动的方法,但此处需要清除浮动才能不影响下面的布局. 2.当.left,.right 的宽度是固定的,浏览器宽度变的过窄时,.right会被挤到下面 用display:flex布局,可以解决这两个缺点 刚吃的htm

响应式布局实现的几种方法 — 弹性布局

响应式布局实现的几种方法 - 弹性布局 响应式布局的实现是前端工程中一个非常大的跨越,它非常灵活的可塑造性使得同一个网站能在不同的终端设备上展现出不同的活力.就今天这个机会,我想与大家分享并探讨一些常用来实现响应式布局方法中的弹性布局. 弹性布局是一种十分方便的,只需要依赖于CSS样式的实现响应式布局的方式,也是K最多用到的一种实现响应式的方法.尤其是现在类似于某宝.某东一类的电商web站或者手机app的页面,利用弹性布局是都可以很轻松的实现的,下面就是本K用弹性布局copy的某动的手机应用的部

flex 实用的弹性布局

主要布局: <!--盒子--> <div class="box"> <!--内容--> <div class="content">11111</div> <div class="content">22222</div> <div class="content center">3333333</div> <div c

flex 弹性布局整理

flex布局(弹性布局) 1.容器具备的属性有: flex-dirction:(决定主轴的方向)(即项目排列方向) 取值:row/row-reverse/column/column-reverse/ flex-wrap:(如果一条轴线排不了,如何换行) 取值:nowrap(默认):不换行. wrap:换行,第一行在上方. wrap-reverse:换行,第一行在下方. flex-flow :(flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为ro

flex弹性布局

Css3的flex布局用法 Flex意为"弹性布局",英文flexible box的缩写,flex布局使css盒模型变得更加强大和灵活,flex布局主要用在webapp和移动端中使用,移动端flex布局,将使的布局变得异常简单. 任何一个容器都可以指定为flex布局: 行内元素也可以使用flex布局. .box{display:inline-flex;} Webkit内核的浏览器,必须加上-webkit前缀 .box{ display:-webkit;/*Safari*/display

flex弹性布局学习总结

一.简要介绍 flex( flexible box:弹性布局盒模型),是2009年w3c提出的一种可以简洁.快速弹性布局的属性.主要思想是给予容器控制内部元素高度和宽度的能力.目前已得到以下浏览器支持: 其中在webkit内核的浏览器中使用时,必须加上-webkit-前缀,以下不再重复说明. 下图为flex的相关概念的示意图 使用flex布局的容器(flex container),它内部的元素自动成为flex项目(flex item).容器拥有两根隐形的轴,水平的主轴(main axis),和竖