CSS3 Flexbox 弹性布局

Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。2009年,W3C提出了一种新的方案----Flex布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。

1、先看一下这些属性对应的值

display: flex |  inline-flex; flex-direction: row | row-reverse | column | column-reverse; //指定了弹性容器中子元素的排列方式

flex-wrap:wrap-reverse; //设置弹性盒子的子元素超出父容器时是否换行。

flex-flow:row-reverse | warp; justify-content:cnter | flex-end | flex-start | space-around | space-between; //设置弹性盒子元素在主轴(横轴)方向上的对齐方式。

align-items:flex-start | flex-end | stretch | baseline | center; //设置弹性盒子元素在侧轴(纵轴)方向上的对齐方式。

align-content:stretch | space-around | space-between ; //修改 flex-wrap 属性的行为,类似 align-items, 但不是设置子元素对齐,而是设置行对齐 order: -1 | number; //设置弹性盒子的子元素排列顺序。

flex-grow: 1; //flex-grow属性的值表示的是当容器有多余的空间时,这些空间在不同条目之间的分配比例。

flex-shrink: 0; flex-basis: number+px; flex-self:flex-end; //属性定义了单个弹性项目在侧轴上应当如何对齐,这个定义覆盖由 align-items 所确立的默认值。

flex-flow: //属性是 flex-direction 和 flex-wrap 属性的简写,决定弹性项目如何排布

2、轴(Axis)

每个弹性框布局包含两个轴。弹性项目沿其依次排列的那根轴称为主轴 (main axis )。垂直于主轴的那根轴称为侧轴(cross axis)。

  • flex-direction 属性确立主轴。
  • justify-content 属性定义了在当前行上弹性项目沿主轴如何排布。
  • align-items 属性定义了在当前行上弹性项目沿侧轴默认如何排布。
  • align-self 属性定义了单个弹性项目在侧轴上应当如何对齐,这个定义覆盖由align-items 所确立的默认值。

3、方位(Direction)

弹性容器的各个边(主轴起点(main start)/主轴终点(main end)和侧轴起点(cross start)/侧轴终点(cross end))描述了弹性条目流的起点与终点。它们具体取决于弹性容器的主轴与侧轴以及由 writing-mode 确立的方向(从左到右、从右到左,等等)。

  • order 属性将元素与序号组关联起来,并决定哪些元素先出现。
  • flex-flow 属性是flex-direction和 flex-wrap 属性的简写,决定弹性项目如何排布。 
    行(Line)
  • 根据flex-wrap 属性,弹性项目可以排布在单个行或者多个行中。此属性控制侧轴的方向和新行排列的方向。

4、尺寸(Dimension)

根据弹性容器的主轴与侧轴,弹性项目的宽和高相应称为主轴尺寸(main size) 与 侧轴尺寸(cross size)。

flex-grow 设置或检索弹性盒的扩展比率 ,默认是0。 
flex-basis 设置项目初始的宽度,默认是auto 
flex-shrink 设置或检索弹性盒的收缩比率。

flex-growflex-shrink 和 flex-basis 可以用flex :flex-growflex-shrink  flex-basis  代替

5、指派flex弹性框

  •  display : flex   display : inline-flex
6、flex-direction属性的可选值及其含义

  flex-direction属性确立主轴

  • row(默认值) 主轴为水平方向。排列顺序与页面的文档顺序相同。如果文档顺序是 ,则排列顺序是从左到右;如果文档顺序是 rtl,则排列顺序是从右到左。
  • row-reverse 主轴为水平方向。排列顺序与页面的文档顺序相反。
  • column 主轴为垂直方向。排列顺序为从上到下。
  • column-reverse 主轴为垂直方向。排列顺序为从下到上。

7、flex-wrap属性的可选值及其含义

  flex-wrap设置弹性盒子的子元素超出父容器时是否换行。

  • nowrap(默认值)容器中的条目只占满容器在主轴方向上的一行,可能出现条目互相重叠或超出容器范围的现象。
  • wrap 当容器中的条目超出容器在主轴方向上的一行时,会把条目排列到下一行。下一行的位置与交叉轴的方向一致。
  • wrap-reverse 与 wrap 的含义类似,不同的是下一行的位置与交叉轴的方向相反。

8、 justify-content属性的可选值和含义

  justify-content属性定义了在当前行上弹性项目沿主轴如何排布。

  • flex-start 条目集中于该行的起始位置。第一个条目与其所在行在主轴起始方向上的边界保持对齐,其余的条目按照顺序依次排列。
  • flex-end 条目集中于该行的结束方向。最后一个条目与其所在行在主轴结束方向上的边界保持对齐,其余的条目按照顺序依次排列。
  • center 条目集中于该行的中央。条目都往该行的中央排列,在主轴起始方向和结束方向上留有同样大小的空白空间。如果空白空间不足,则条目会在两个方向上超出同样的空间。
  • space-between 第一个条目与其所在行在主轴起始方向上的边界保持对齐,最后一个条目与其所在行在主轴结束方向上的边界保持对齐。空白空间在条目之间平均分配,使得相邻条目之间的空白尺寸相同。
  • space-around 类似于 space-between,不同的是第一个条目和最后一个条目与该行的边界之间同样存在空白空间,该空白空间的尺寸是条目之间的空白空间的尺寸的一半。

9、align-items属性的可选值和含义

  • flex-start 条目与其所在行在交叉轴起始方向上的边界保持对齐。
  • flex-end 条目与其所在行在交叉轴结束方向上的边界保持对齐。
  • center 条目的空白边盒子margin box在交叉轴上居中。如果交叉轴尺寸小于条目的尺寸,则条目会在两个方向上超出相同大小的空间。
  • baseline 条目在基准线上保持对齐。在所有条目中,基准线与交叉轴起始方向上的边界距离最大的条目,它与所在行在交叉轴方向上的边界保持对齐。
  • stretch 如果条目的交叉轴尺寸的计算值是“auto”,则其实际使用的值会使得条目在交叉轴方向上尽可能地占满。

10、 align-content属性的可选值和含义

(修改 flex-wrap 属性的行为,类似 align-items, 但不是设置子元素对齐,而是设置行对齐)

  • flex-start 行集中于容器的交叉轴起始位置。第一行与容器在交叉轴起始方向上的边界保持对齐,其余行按照顺序依次排列。
  • flex-end 行集中于容器的交叉轴结束位置。第一行与容器在交叉轴结束方向上的边界保持对齐,其余行按照顺序依次排列。
  • center 行集中于容器的中央。行都往容器的中央排列,在交叉轴起始方向和结束方向上留有同样大小的空白空间。如果空白空间不足,则行会在两个方向上超出同样的空间。
  • space-between 行在容器中均匀分布。第一行与容器在交叉轴起始方向上的边界保持对齐,最后一行与容器在交叉轴结束方向上的边界保持对齐。空白空间在行之间平均分配,使得相邻行之间的空白尺寸相同。
  • space-around 类似于 space-between,不同的是第一行条目和最后一个行目与容器行的边界之间同样存在空白空间,而该空白空间的尺寸是行目之间的空白空间的尺寸的一半。
  • stretch 伸展行来占满剩余的空间。多余的空间在行之间平均分配,使得每一行的交叉轴尺寸变大。
 

来看一个demo

?<!DOCTYPE html>
<meta charset="UTF-8"/>
<html>
  <head>
    <style>
  *{ margin: 0; padding: 0;}
  body {
   font: 24px Helvetica;
   background: #999999;
  }

  #main {
   min-height: 800px;
   margin: 0px;
   padding: 0px;
   display: -webkit-flex;
   display:  flex;
   -webkit-flex-flow: row;
           flex-flow: row;
   }

  #main > article {
   margin: 4px;
   padding: 5px;
   border: 1px solid #cccc33;
   border-radius: 7pt;
   background: #dddd88;
   -webkit-flex: 3 1 60%;
           flex: 3 1 60%;
   -webkit-order: 2;
           order: 2;
   }

  #main > nav {
   margin: 4px;
   padding: 5px;
   border: 1px solid #8888bb;
   border-radius: 7pt;
   background: #ccccff;
   -webkit-flex: 1 6 20%;
           flex: 1 6 20%;
   -webkit-order: 1;
           order: 1;
   }

  #main > aside {
   margin: 4px;
   padding: 5px;
   border: 1px solid #8888bb;
   border-radius: 7pt;
   background: #ccccff;
   -webkit-flex: 1 6 20%;
           flex: 1 6 20%;
   -webkit-order: 3;
           order: 3;
   }

  header, footer {
       display: block;
       margin: 4px;
       padding: 5px;
       min-height: 100px;
       border: 1px solid #eebb55;
       border-radius: 7pt;
       background: #ffeebb;
   }

  /* 窄到已不足以支持三栏 */
  @media all and (max-width: 640px) {

   #main{
    -webkit-flex-flow: column;
            flex-direction: column;
   }

   #main > article, #main > nav, #main > aside {
    /* 恢复到文档内的自然顺序 */
    -webkit-order: 0;
            order: 0;
   }

   #main > nav, #main > aside, header, footer {
    min-height: 50px;
    max-height: 50px;
   }
  }
 </style>
  </head>
  <body>
 <header>header</header>
 <div id=‘main‘>
    <nav>nav</nav>
    <article>article</article>
    <aside>aside</aside>
 </div>
 <footer>footer</footer>
  </body>
</html>

  

时间: 2024-10-01 08:21:12

CSS3 Flexbox 弹性布局的相关文章

CSS3 flexbox弹性布局实例

常用例子 1.居中对齐 <!DOCTYPE html> <head> <meta charset="utf-8"> <style type="text/css"> .flex-container{ padding:0; margin:0; list-style:none; display:-webkit-box; display:-moz-box; display:-ms-flexbox; display:-webki

css3 flexBox 弹性布局 记录

在传统的css布局,都是依赖于position,float,dosplay进行.在一些特定的布局的实现上往往很不方便,比如一个元素的垂直居中.鉴于这种关系,2009年,W3C 提出了一种新的方案----Flex 布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能. 首先让我们明白在flex中什么是容器,什么是元素 <div>//容器 <div></div>//元素 <span></

CSS3中的Flexbox弹性布局(二)

flexbox详解 flexbox的出现是为了解决复杂的web布局,因为这种布局方式很灵活.容器的子元素可以任意方向进行排列.此属性目前处于非正式标准. flex布局模型不同于块和内联模型布局,块和内联模型的布局计算依赖于块和内联的流方向,而flex布局依赖于flex directions.简单的说:Flexbox是布局模块,而不是一个简单的属性,它包含父元素(flex container)和子元素(flex items)的属性. 属性解析 链接:https://cruxf.github.io/

CSS3之弹性布局

flexbox是CSS3提出的页面布局模块.flexbox可以把列表横向或者纵向排列,并且填满可以延伸到的空间.稍微复杂的布局可以通过嵌套flex container来实现. 利用flexbox可以方便的创建弹性布局,这使得在移动设备上,可以让元素在容器内扩展和收缩,更容易的实现常见布局,如三列布局. 弹性容器和弹性块 一个flex container中包含了left content right三个弹性块. 可以设置display为flex让块变为弹性块. 可以设置flex-flow来确定弹性块

flexbox弹性布局

flexbox的核心是自适应动态变化的弹性布局 伸缩布局盒模型和术语 主轴main axis:Flex容器的主轴主要用来配置Flex项目.注意,它不一定是水平,这主要取决于flex-direction属性.main-start | main-end:Flex项目的配置从容器的主轴起点边开始,往主轴终点边结束.main size:Flex项目的在主轴方向的宽度或高度就是项目的主轴长度,Flex项目的主轴长度属性是width或height属性,由哪一个对着主轴方向决定. 侧轴cross axis:与

CSS3 -- FlexBox(弹性盒子)

盒子模型 CSS中有一种基础设计模式叫盒模型,盒模型定义了Web页面中的元素如何来解析. 在盒模型中主要包括width.height.border.background.padding和margin这些属性,而且他们之间的层次关系可以相互影响. w3c的标准盒子模型 和 IE的传统盒子模型的区别 标准 w3c 盒子模型的范围包括 margin.border.padding.content,并且 content 部分不包含其他部分. 和标准 w3c 盒子模型不同的是:ie 盒子模型的 conten

React Native 弹性布局FlexBox

React Native采用一中全新的布局方式:FlexBox(弹性布局).可以很方便的实现各种复杂布局,是全新的针对web和移动开发布局的一种实现方式. 何为FlexBox? 完整名称为:the flexible box Module,旨在通过弹性的方式来对齐和分布容器中的组件.Flexbuju的主要思想是:让容器有能力让其子项目能够改变其宽度|高度|顺序,以最佳方式填充可用空间. 在布局中,首先得确定主轴方向(flexDirection),主轴组件的对齐方式(justifyContent),

web app 自适应方案总结 关键字 弹性布局之rem

web app 自适应方案总结 关键字 弹性布局之rem 关于rem,主要参考文档 1.腾讯ISUX (http://isux.tencent.com/web-app-rem.html) 2.http://www.w3cplus.com/css3/define-font-size-with-css3-rem 现在移动端 web app 的自适应布局的方案有 5种. 零. Flexbox 使用css3 flexbox 进行布局,对于富媒体和复杂排版的支持非常强大,未普及兼容性非常差,几乎没有在任何

CSS3 Flexbox轻巧实现元素的水平居中和垂直居中

CSS3 Flexbox轻松实现元素的水平居中和垂直居中 网上有很多关于Flex的教程,对于Flex的叫法也不一,有的叫Flexbox,有的叫Flex,其实这两种叫法都没有错,只是Flexbox旧一点,而Flex是刚出来不久的东西而已,为了方便说明,赶上新技术,下面我就把这种布局叫Flex布局. 元素居中,相信作为前端工程师的你肯定会经常用到,不管是在水平方向居中,还是垂直方向居中,都可在你的职业生涯中徘徊.不过很多时候要实现垂直居中,还是比较麻烦的.不过你也不用担心,下面就给大家分享下通过Fl