CSS3 弹性盒子(Flex Box) flex布局总结

弹性盒子内容

弹性盒子由弹性容器(Flex container)和弹性子元素(Flex item)组成。

弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器。

弹性容器内包含了一个或多个弹性子元素。

注意: 弹性容器外及弹性子元素内是正常渲染的。弹性盒子只定义了弹性子元素如何在弹性容器内布局。

弹性子元素通常在弹性盒子内一行显示。默认情况每个容器只有一行。

弹性盒子属性

  1.display  指定HTML元素盒子类型

    display: flex; 设置为flex弹性盒子布局

  2.flex-direction  指定了弹性盒子中子元素的排列方式。flex-direction的值有:

    row  横向从左到右排列,默认排列方式

    row-reverse  反转横向排列,最后一项排在最前面

    column  纵向排列

    column-reverse  反转纵向排列,最后一项排在最上面

 

  3.justify-content  设置弹性盒子元素在主轴方向上的对齐方式。justify-content的值有:

    flex-start  默认值。项目位于容器的开头

    flex-end  项目位于容器的结尾

    center  项目位于容器的中心

    space-between  项目位于各行之间留有空白的容器内

    space-around  项目位于各行之前,之间,之后 都留有空白的容器内

    

  4.align-items  设置弹性盒子元素在侧轴方向上的对齐方式。align-items的值:

    flex-start  元素位于容器的开头。起始位置紧靠住该行的侧轴起始边界

    flex-end  元素位于容器的结尾。起始位置紧靠住该行的侧轴结束边界

    center  元素位于容器的中心。弹性盒子元素在该行的侧轴上居中放置。若该行的尺寸小于弹性盒子元素尺寸,则会向两个方向溢出相同的长度

    stretch  默认值。元素被拉伸以适应容器。若指定侧轴大小的属性值为auto,则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,

          但同时会遵照'min/max-width/height'属性的限制。

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

    

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

    nowrap  默认,弹性容器为单行。该情况下弹性子项可能会溢出容器。

    wrap  弹性容器为多行,该情况下弹性子项溢出的部分会被放置到新行,子项内部会发生断行

    wrap-reverse  反转 wrap 排列

 

  6.align-content  修改flex-wrap属性的行为,类似align-items,但不是设置子元素对齐,而是设置行对齐。align-content的值有:

    stretch  默认。各行将会伸展以占用剩余的空间

    flex-start  各行向弹性盒容器的起始位置堆叠

    flex-end  各行向弹性盒容器的结束位置堆叠

    center  各行向弹性盒容器的中间位置堆叠

    space-between  各行在弹性盒容器中平均分布

    space-around  各行在弹性盒容器中平均分分布,两端保留子元素与子元素之间间距大小的一半

 

  7.flex-flow  flex-direction 和 flex-wrap 的简写

    例:flex-flow: row wrap;

 

  8.order  设置弹性盒子的子元素排列顺序

    order: number;

    

 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
#main {
    width: 400px;
    height: 150px;
    border: 1px solid #c3c3c3;
    display: -webkit-flex; /* Safari */
    display: flex;
}
#main div {
    width: 70px;
    height: 70px;
}
div#myRedDIV   {order: 2;}
div#myBlueDIV  {order: 4;}
div#myGreenDIV {order: 3;}
div#myPinkDIV  {order: 1;}
</style>
</head>
<body>
<div id="main">
  <div style="background-color:coral;" id="myRedDIV"></div>
  <div style="background-color:lightblue;" id="myBlueDIV"></div>
  <div style="background-color:lightgreen;" id="myGreenDIV"></div>
  <div style="background-color:pink;" id="myPinkDIV"></div>
</div>
</body>
</html>

 

  9.align-self  在弹性子元素上使用。覆盖容器的 align-items 属性(用于设置弹性元素自身在侧轴方向上的对齐方式)

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

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

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

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

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

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

     示例:将第二个黑色的方块放在右下角

    

.parent{
  background-color: pink;
  width: 100px;
  height: 100px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  .children{
    background-color: black;
    margin: 2px;
    width: 20px;
    height: 20px;
  }
  .children:nth-child(2){
    align-self: flex-end;
  }
}

 

  10.flex  设置弹性盒子的子元素如何分配空间

 

  11.flex-basis  设置或检索弹性盒子伸缩基准值

    number  一个长度单位或一个百分比,规定灵活项目的初始长度

    auto  默认值。长度等于灵活项目的长度。如果该项目未指定长度,则长度将根据内容决定。

    initial  设置该属性为它的默认值

    inherit  从父元素继承该属性

    

.parent {
  width: 100%;
  height: 100%;
  display: flex;
  .children {
    width: 20px;
    height: 50px;
  }
}
/*设置第二个弹性盒元素的初始长度为 80 像素*/
.children:nth-child(2) {
  flex-basis: 80px;
}

 

   12.flex-grow  用于设置或检索弹性盒子的扩展比率

    number  一个数字,规定项目相对于其他灵活的项目进行扩展的量

    initial  该属性为它的默认值

    inherit  从父元素继承该属性

       

/*
  当父元素的宽度大于子元素之和时,flex-grow 会分享剩余的空间,通过 flex-grow 的值来进行分配
  最初每个子元素宽度都是 40 ,第1,3分享了1份,第二个div分享了2份,最终 宽度为 60 80 60
*/ .parent { width: 200px; height: 100%; display: flex; .children { width: 40px; height: 50px; } } /*让第二个元素的宽度为其他元素的2倍:*/ .children:nth-child(1) { flex-grow: 1; } .children:nth-child(2) { flex-grow: 2; } .children:nth-child(3) { flex-grow: 1; }

 

  13.flex-shrink  指定了flex元素的收缩规则。flex元素仅在默认宽度之和大于容器的时候才会发生收缩,

    其收缩的大小是依据 flex-shrink 的值.

    number  一个数字,规定项目将相对于其他灵活的项目进行收缩的量

    

/*
  
父元素的宽度是300,子元素的宽度是100,总的宽度就是400。宽度超出100,
  定义的第二个子元素的收缩值为 3,默认为1,总共就是6,一份相当于 100/6
  则第 1,3,4 收缩 100/6,第二个元素收缩 (100/6) * 3
*/ .parent { width: 300px; height: 100%; display: flex; .children { width: 100px; height: 100px; flex-shrink: 1;/*默认值 1*/ } } .children:nth-child(2){ flex-shrink: 3; }

 

posted @ 2020-09-23 16:26  张_Ning  阅读(1713)  评论(0编辑  收藏  举报