我对Flexbox布局模式的理解

Flexbox,一种CSS3的布局模式,也叫做弹性盒子模型,用来为盒装模型提供***的灵活性。首先举一个栗子,之前我们是这样实现一个div盒子水平垂直居中的。在知道对象高宽的情况下,对居中元素绝对百分比定位,然后通过margin偏移的方式来实现。

为新丰等地区用户提供了全套网页设计制作服务,及新丰网站建设行业解决方案。主营业务为成都网站建设、成都网站制作、新丰网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

 
 
 
 
  1.  
  2.  
  3.  
  4.  
 
  •  
  •   

    假如使用了flex后,实现起来就简单了,而且不需要自己去算,也不需要绝对定位,只需要通过对伸缩容器定义两个属性,justify-content定义伸缩项目沿着主轴线的对齐方式为center, align-items定义伸缩项目在侧轴(垂直于主轴)的对齐方式为center,具体如下:

     
     
     
     
    1.  
    2.  
    3.  
    4.  
     
  •  
  •   
  • 其实Flexbox的优秀特性并不是这一些,首先来一张它的属性图吧~

    首先我们来分析下这一张图,从***个子节点可以看到Flexbox由Flex容器和Flex项目组成,容器即父元素,项目即子元素。他们之间的一些关系可以这样来表示:

    这张图可以在接下来的属性分析中用到。

    Flex容器

    display:flex

    当我们使用flexbox布局时候,需要先给父容器的display值定位flex(块级)或者inline-flex(行内级)。

    当使用了这个值以后,伸缩容器会为内容建立新的伸缩格式化上下文(FFC),它的上下文展示效果和BFC根元素相同(BFC特性:浮动不会闯入伸缩容器,且伸缩容器的边界不会与其内容边界叠加)。

    伸缩容器不是块容器,因此有些设计用来控制块布局的属性,在伸缩布局中不适用,特别是多栏(column),float,clear,vertical-align这些属性。

    flex-direction

    [flex-direction]属性用来控制上图中伸缩容器中主轴的方向,同时也决定了伸缩项目的方向。

    网页展示效果如下:

       

    flex-warp

    [flex-wrap]属性控制伸缩容器是单行还是多行,也决定了侧轴方向(新的一行的堆放方向)。

    网页效果见图;

    flex-flow

    [flex-flow]属性为flex-direction(主轴方向)和flex-wrap(侧轴方向)的缩写,两个属性决定了伸缩容器的主轴与侧轴。

    举两个栗子:

    网页效果如下:

    这里大家可以多自己去试试不同的组合。

    justify-content

    [justify-content]用于定义伸缩项目在主轴上面的的对齐方式,当一行上的所有伸缩项目都不能伸缩或可伸缩但是已经达到其***长度时,这一属性才会对多余的空间进行分配。当项目溢出某一行时,这一属性也会在项目的对齐上施加一些控制。

    还是看demo理解起来快一点: 

      

    align-items

    [align-items]用来定义伸缩项目在侧轴的对齐方式,这类似于[justify-content]属性,但是是另一个方向。(flex-directon和flex-wrap是一对,justify-content和align-items是一对,前者分别定义主轴和侧轴的方向,后者分别定义主轴和侧轴中项目的对齐方式)。

    下面demo只展示center和stretch的栗子,其他几个可以参考flex-start和flex-end那样。

    align-content

    [align-content]属性可以用来调准伸缩行在伸缩容器里的对齐方式,这与调准伸缩项目在主轴上对齐方式的[justify-content]属性类似。只不过这里元素是以一行为单位。请注意本属性在只有一行的伸缩容器上没有效果。当使用flex-wrap:wrap时候多行效果就出来了。

    其他可以参考[justify-content]用法。

    具体图片来至w3.org官方文档;

    太麻烦。写不下去了,摔。

    Flex项目

    终于写到关于伸缩项目的相关属性了,主要是3个,order,flex(flex-grow,flex-shrink,flex-basis的组合),align-self;用来比较多的是前两个。

    order

    有一种用法比较多,想设置一组中有两个元素一个排***,另外一个排***,主需要将***个的order:-1;另一个为order:0;这样就好了。

    譬如我们想控制一个container中有4个box,想box4为一个显示,box1为***一个显示。只需要 这样

     
     
     
     
    1.  
    2.  
    3.  
    4.  
    5.  
    6.  
    7.  
    8.  
    9.   

    显示效果就这样了:

    flex

    [flex]属性可以用来指定可伸缩长度的部件,是flex-grow(扩展比例),flow-shrink(收缩比例),flex-basis(伸缩基准值)这个三个属性的缩写写法,建议大家采用缩写的方式而不是单独来使用这3个属性。

     
     
     
     
    1. flex:none | [ <'flex-grow'> ?<'flew-shrink'> || <'flow-basis'>] 
    2.  
    3. // flex-grow是必须得flex-shrink和flow-basis是可选的  

    flex-basis用图来表示就是这样:

    align-self

    [align-self]用来在单独的伸缩项目上覆写默认的对齐方式,这个属性是用来覆盖伸缩容器属性align-items对每一行的对齐方式。也就是说在默认的情况下这两个值是相等的。

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

    我的看法

    讲了这么多他们的使用,我们来看一看flexbox布局的兼容性。

    具体大家可以见这个网站:caniuse(http://caniuse.com/#search=flexbox)

    在PC端其实很乐观了,基本上主流的浏览器都已经兼容了flex的使用,但是到了移动端就不是那么好了,特别是国内浏览器,考虑到uc浏览器占了大头,但是uc从图中看到只兼容flex最老的一个版本,也就是2009年的版本,即display:box;很多现在flex的优秀特性到了它上面都不兼容了,所以建议大家在使用的时候,假如2009版本可以满足开发要求的话,还是去使用2009版本,这样风险更小。

    但是假如想兼容多个浏览器,可以采用优雅降级的方式来使用,这里推荐一个scss的sass-flex-mixin,这样就可以使用***的写法,并且兼容大部分浏览器了。

    相信flexbox布局在以后的移动端会用得越来越多的。

    分享标题:我对Flexbox布局模式的理解
    本文地址:http://www.shufengxianlan.com/qtweb/news5/255105.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

    猜你还喜欢下面的内容

    品牌网站制作知识

    各行业网站