弹性盒子模型笔记

弹性盒子模型

一、弹性盒子模型的相关概念

● 伸缩容器(flex container) :包裹伸缩项目的父元素。
● 伸缩项目(flex item) :伸缩容器的每个子元素。
● 轴(axis):每个弹性盒子模型拥有两个轴。
◆ 主轴(main axis) : :伸缩项目沿其一次排列的轴被称为主轴。
◆ 侧轴(cross axis) :垂直于主轴的轴被称为侧轴。
● 方向(direction):伸缩容器的主轴由主轴起点和主轴终点,侧轴由侧轴起点和侧轴终点描述
伸缩项目排列的方向。
● 尺寸(dimension) :根据伸缩容器的主轴和侧轴,伸缩项目的宽度和高度。
◆ 对应主轴的称为主轴尺寸。
◆ 对应侧轴的称为侧轴尺寸。

二、定义弹性盒子模型

display: flex;
display: inline-flex;
  • flex:设置指定元素为块级元素的弹性盒子模型。
  • inline-flex:设置指定元素为行内块级元素的弹性盒子模型。

三、flex-direction属性

这个属性设置伸缩项目的方向。

语法

flex-direction: row | row-reverse | column | column-reverse
  • row:设置主轴是水平方向
  • row-reverse:与row的排列方向相反。
  • column: 设置主轴是垂直方向。
  • column-reverse:与column的排列方向相反。

开始测试

  • row

这是HTML部分代码

<div class="container">
    <div style="background-color:#113399 ;"></div>
    <div style="background-color:#00FF00 ;"></div>
    <div style="background-color:#00DB00 ;"></div>
    <div style="background-color:#0000FF ;"></div>
    <div style="background-color:#2196F3 ;"></div>
</div>

CSS部分代码

.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 600px;
}
/* 设置伸缩项目的样式 */
.container div {
    width: 100px;
    height: 300px;
}

测试效果如下:

GVIigx.png

发现设置为flex后伸缩项目自己就可以水平排列了(说明flex-direction的值默认为row

接着往后看

  • column

当我把flex-direction的值改为column

.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 600px;

    flex-direction: column; /*  设置主轴是垂直方向 */
}
/* 设置伸缩项目的样式 */
.container div {
    width: 100px;
    height: 300px;
}

测试结果如下

在这里插入图片描述

发现所有的伸缩项目都纵向排列起来了

而且他们的高度也被压缩了(本来是300px,压缩自动后变成了120px)。

  • column-reverse
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 600px;

    flex-direction: column-reverse; /* 与column的排列方向相反 */
}
/* 设置伸缩项目的样式 */
.container div {
    width: 100px;
    height: 300px;
}

测试结果如下

在这里插入图片描述

与上图对比发现颜色正好相反,这个属性可以使伸缩项目倒着排列。

四、justify-content属性

这个属性设置伸缩项目所在行沿着主轴的对齐方式。

伸缩项目必须设置宽高

语法

justify-content: center | flex-star | flex-end | space-between | space-around
  • center:伸缩项目向主轴第一行的中间位置对齐。
  • flex-start:伸缩项目向主轴第一行的开始位置对齐。
  • flex-end:伸缩项目向主轴第一行的结束位置对齐。
  • space-between:伸缩项目会沿主轴平均分布在一行中。
  • space-around:伸缩项目会沿主轴平均分布在一行中,两端保留一半的空间。

开始测试

  • center
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 600px;

    justify-content: center; /* 伸缩项目向第一行的中间位置对齐 */
}

测试结果如下

GVHKw8.png

  • space-between
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 600px;

    justify-content: space-between; /* 伸缩项目会平均分布在一行中 */
}

测试结果如下

在这里插入图片描述

  • space-around
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 600px;

    justify-content: space-around;
}

测试结果如下

GVbN3d.png

可以看到两边是有中间间隔的一半的长度的间隙。

五、align-items属性

这个属性用来设置伸缩项目所在行沿着侧轴的对齐方式。

语法

align-items: center | flex-start | flex-end | baseline | stretch
  • center:伸缩项目向侧轴的中间位置对齐。
  • flex-start:伸缩项目向侧轴的起点位置对齐。
  • flex-end:伸缩项目向侧轴的终点位置对齐。
  • baseline:伸缩项目根据伸缩项目的基线对齐。
  • stretch:默认值,伸缩项目拉伸填充整个伸缩容器。

开始测试

  • center
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 600px;

    align-items: center; /* 纵向居中 */
}

测试结果如下

在这里插入图片描述

  • baseline(跟不设置的时候一样)

  • stretch,默认值(如果伸缩项目中不设置宽,则自动纵向拉满)

.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 600px;

    align-items: stretch;
}

测试结果如下

在这里插入图片描述

六、flex-wrap属性

这个属性用来设置伸缩项目是单行显示还是多行显示

语法

flex-wrap: nowrap | wrap | wrap-reverse
  • nowrap:默认值,设置伸缩项目单行显示。这种方式可能导致溢出伸缩容器。
  • wrap:设置伸缩项目多行显示。
  • wrap-reverse:与wrap相反。

开始测试

  • nowrap
  • 这里为了能够测试出效果,修改HTML结构。
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 600px;

    flex-wrap: nowrap;
}
<div class="container">
    <div style="background-color:#113399 ;"></div>
    <div style="background-color:#00FF00 ;"></div>
    <div style="background-color:#00DB00 ;"></div>
    <div style="background-color:#0000FF ;"></div>
    <div style="background-color:#2196F3 ;"></div>
    
    <div style="background-color:#113399 ;"></div>
    <div style="background-color:#00FF00 ;"></div>
    <div style="background-color:#00DB00 ;"></div>
    <div style="background-color:#0000FF ;"></div>
    <div style="background-color:#2196F3 ;"></div>
</div>

测试结果如下

在这里插入图片描述

可以看到,如果是nowrap(默认值)的话,10个伸缩项目很明显被压缩了,而不会自动换行。

如果改成wrap

  • wrap
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 600px;

    flex-wrap: wrap; /* 设置伸缩项目多行显示 */
}

测试结果如下

在这里插入图片描述

设置为wrap后伸缩项目就可以自动换行了,只要第一行显示不下了就会自动换行。

  • wrap-reverse
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 600px;

    flex-wrap: wrap-reverse; /* 行会倒过来 */
}

测试结果如下

在这里插入图片描述

设置wrap-reverse会使行颠倒。

七、align-content属性

这个属性用来设置伸缩行的对齐方式。该属性会更改flex-wrap属性的效果。

注意:align-content这个属性必须配合flex-wrap使用才有效果。

语法

align-content: center | flex-start | flex-end | space-between | space-around | stretch
  • center:各行向伸缩容器的中间位置对齐。
  • flex-start:各行向伸缩容器的起点位置对齐。
  • flex-end:各行向伸缩容器的终点位置对齐。
  • space-between:各行会平均分布在一行中。
  • space-around:各行会平均分布在一行中,两端保留一半的空间。
  • stretch:默认值,各行将会伸展以占用额外的空间。

开始测试

  • 先修改一下css样式(修改高度),看一下默认效果是什么样的
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 700px;

    flex-wrap: wrap;

    /* align-content: center; */
}

测试结果如下

在这里插入图片描述

我们可以发现当我增大高度之后,第二行就自动往下移动,而第一行一直没动。

好,接着测试

  • center
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 700px;

    flex-wrap: wrap;

    align-content: center;
}

测试结果如下

GZZG9J.png

改为center之后,这两行会一起垂直居中。

  • flex-start
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 700px;

    flex-wrap: wrap;

    align-content: flex-start; /* 各行向伸缩容器的起点位置对齐 */
}

测试结果如下

在这里插入图片描述

使用flex-start后,这两行会在顶部紧紧挨在一起。

  • flex-end
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 700px;

    flex-wrap: wrap;

    align-content: flex-end; /* 各行向伸缩容器的终点位置对齐 */
}

测试结果如下

GZmBSH.png

使用flex-end后,这两行会在底部紧紧挨在一起。

  • space-between
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 700px;

    flex-wrap: wrap;

    align-content: space-between; /* 各行会平均分布在一行中 */
}

测试结果如下

GZmOtU.png

使用space-between,各行会平均分布。

  • space-around
.container {
    /* 将当前元素设置为弹性盒子模型的伸缩容器 */
    display: flex;
    border: 1px solid #000;
    width: 600px;
    height: 700px;

    flex-wrap: wrap;

    align-content: space-around;
}

测试结果如下
在这里插入图片描述

顶部和底部两端是空出来一点间隙的。

八、flex-flow属性

这个属性是flex-directionflex-wrap的简写。

语法

flex-flow: <'flex-direction'> || <'flex-wrap'>

九、flex属性

简写属性,用于设置伸缩项目如何伸长或缩短以适应伸缩容器中的可用空间。

语法

flex: auto | none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
  • auto:伸缩项目会根据自身的宽度和高度确定尺寸,相当于将该属性设置为flex: 1 1 auto
  • none:伸缩项目会根据自身的宽度和高度确定尺寸,相当于将该属性设置flex: 0 0 auto

十、align-self属性

这个属性用来设置伸缩项目自身元素在侧轴的对齐方式。

语法

align-self: center | flex-start | flex-end | baseline | stretch
  • center:伸缩项目向侧轴的中间位置对齐。
  • flex-start:伸缩项目向侧轴的起点位置对齐。
  • flex-end:伸缩项目向侧轴的终点位置对齐。
  • baseline:伸缩项目根据伸缩项目的基线对齐。
  • stretch:默认值,伸缩项目拉伸填充整个伸缩容器。

十一、order属性

这个属性用来设置伸缩项目在布局是的顺序。

语法

order: <intege>
  • integer:表示当前伸缩项目所在的次序。
<div class="container">
    <div style="background-color:#113399 ; order: 3;"></div>
    <div style="background-color:#00FF00 ; order: 2;"></div>
    <div style="background-color:#00DB00 ; order: 1;"></div>
    <div style="background-color:#0000FF ; order: 4;"></div>
    <div style="background-color:#2196F3 ; order: 5;"></div>
</div>

测试结果如下

在这里插入图片描述

第一个伸缩项目和第三个伸缩项目交换位置。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码小余の博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值