教程来自于 CSS Tricks:A Complete Guide to Flexbox

容器和条目

容器(container)就是外部的容器,条目(items)就是内部的条目。
1.jpg

container 有哪些属性

定义一个 flex 容器

  1. .container {
  2. display: flex; /* or inline-flex */
  3. }

改变 items 流动方向(主轴)

  1. .container {
  2. flex-direction: row | row-reverse | column | column-reverse;
  3. }
flex-direction: row;行顺序 1.png
flex-direction: row-reverse; 行逆序
flex-direction:column; 列顺序
flex-direction:column-reverse; 列逆序

改变折行方式

  1. .container{
  2. flex-wrap: nowrap | wrap | wrap-reverse;
  3. }
flex-wrap: nowrap; 不换行,使劲挤 2.png
flex-wrap: wrap; 能换行,就换行
flex-wrap: wrap-reverse; 向上换行?!

主轴对齐方式

  • 默认主轴是横轴
  • 除非改变了 flex-direction 方向
    1. .container {
    2. justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right ... + safe | unsafe;
    3. }
    | justify-content: flex-start;
    都往左靠 | 3.png | | —- | —- | | justify-content: flex-end;
    都往右靠 | | | justify-content: center
    水平居中,往中间靠 | | | justify-content: space-between
    把空间放到中间 | | | justify-content: space-around
    空间在周围环绕,margin 不合并 | | | justify-content: space-evenly
    空间平均,margin 合并 | |

次轴对齐

  • 默认次轴是纵轴
    1. .container {
    2. align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end + ... safe | unsafe;
    3. }
    | align-items: flex-start;
    向上靠拢 | 3.jpg | | —- | —- | | align-items: flex-end;
    向下靠拢 | | | align-items: flex-center;
    垂直居中 | | | align-items: stretch;
    往两边延伸 | | | align-items: baseline;
    baseline 对齐 | |

多行内容

  • 很少用到
    1. .container {
    2. align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline | first baseline | last baseline + ... safe | unsafe;
    3. }
    | align-content: flex-start;
    元素堆在上面,
    空间在下 | 4.jpg | | —- | —- | | align-content: flex-end;
    元素堆在下面,
    空间在上 | | | align-content: center
    元素垂直居中,
    空间均匀分布上下 | | | align-content: stretch;
    元素贴顶部开始均匀分布,
    空间上下均匀分布 | | | align-content: space-between;
    元素上下行贴边均匀分布,
    把空间平均分布于中间 | | | align-content: space-around;
    元素上下不贴边,
    上下左右空间平均环绕 | |

item 的属性

  1. .item:frist-child {
  2. /* 冒号和 frist中间不能有空格,必须连着,意思是作为第一个儿子的 item */
  3. }
  4. item:nth-child(2) {
  5. /* n 表示“几”,th 表示“第” ,nth 表示第n个*/
  6. }

使用 order 调整条目顺序

  • 默认的 order 都是0,如果把 order 改成一个数,就会按 order从小到大排列。

    1. .item {
    2. order: <integer>; /* default is 0 */
    3. }

    5.jpg

    flex-grow 控制按比例长胖

  • flex-grow 用来分配多余的空间,如果不写 flex-grow 就默认不分。

    1. .item {
    2. flex-grow: <number>; /* <number> 负值无效,默认为0 */
    3. }

    6.jpg

    flex-shrink 控制如何变瘦

    句法flex-shrink 属性只能是一个<number>
    取值:负值不被允许

  • 一般写 flex-shrink:0 防止变瘦,默认是1

    1. .item {
    2. flex-shrink: <number>; /* default 1 */
    3. }

    flex-basis 控制基准宽度

    句法flex-basis:<number>
    取值:对于任何宽度,负长度均无效。

  • 默认是 flex-basis:auto

    1. .element {
    2. flex-basis: 100px;
    3. }

    align-self 定制 align-items

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

    7.jpg

    重点:

    记住这些代码

  • display:flex

  • flex-direction: row / column 流动方向是横 / 竖
  • flex-wrap: wrap 表示是否换行
  • just-content: center / space-between 在主(横)轴是怎么对齐的
  • align-items: center 表示在纵轴怎么对齐
  • 日常工作基本只用这些

    经验

  • 永远不要把 widthheight写死,除非特殊说明

    • 电脑上宽度一般都是写死的,手机上都不是写死的
    • min-width / max-width / min-height / max-height
  • flex 可以基本满足所有需求
  • flexmargin-xxx:auto 配合有意外的效果

    • eg: margin-left: auto
    • margin-xxx: auto 这种方式更加灵活比 space-between更灵活

      写死

  • width: 100px

    不写死

  • width:50%

  • max-width: 100px
  • width: 30vw(屏幕宽度的1%,30vw为屏幕宽度30%)
  • min-width: 80%
  • 特点:不使用 px,或者加 min max 前缀