笔记来源:尚硅谷 Web 前端 HTML5&CSS3 初学者零基础入门全套完整版

弹性盒简介

1、基本概念

传统的布局方式:浮动、margin、vertical-align.padding…技术来完成页面

  • 为了元素同行显示:浮动――影响:清除浮动
  • 各种元素的对齐问题

弹性布局: css3提出的一个新的布局概念,以弹性容器为核心来进行页面设计,可以快捷、响应式的完成页面布局

弹性盒

flex(弹性盒、伸缩盒)

  • css中的又一种布局手段,它主要用来代替浮动来完成页面的布局
  • flex可以使元素具有弹性,让元素可以跟随页面的大小的改变而改变

弹性容器

要使用弹性盒,必须先将一个元素设置为弹性容器

我们通过display 来设置弹性容器

  • display:flex 设置为块级弹性容器 (独占一行)
  • display:inline-flex 设置为行内的弹性容器 (不独占一行)
/* 设置弹性容器 */
display: flex;

在这里插入图片描述

弹性容器特点
  1. 弹性容器里的子元素会同行显示
  2. 弹性容器里的子元素默认不会换行
  3. 弹性容器里的子元素会被修改为块级元素,并且同行显示,
  4. 如果子元素没有设置宽高,宽度由内容决定,高度默认沾满整个弹性容器
  5. 弹性容器只对直接子元素有效果,对孙子元素没有效果
  6. 弹性容器对兄弟元素没有影响,弹性容器在兄弟眼里就是一个普通的块级元素

弹性元素

弹性容器的直接子元素是弹性元素(弹性项)

弹性元素也可以同时是弹性容器

2、弹性容器的属性

主轴与侧轴

  • 主轴:弹性元素的排列方向称为主轴
  • 侧轴:与主轴垂直方向的称为侧轴

主轴属性

排列方式:flex-direction

flex-direction 指定弹性容器弹性元素排列方式

  • row默认值,弹性元素在容器中水平排列(主轴自左向右)

  • row-reverse 弹性元素在容器中反向水平排列(主轴自右向左)

  • column 弹性元素纵向排列(主轴自上向下)

  • column-reverse 弹性元素反向纵向排列(主轴自下向上)

  • 示例:column作为值

    /* 设置弹性元素排列方式 */
    flex-direction: column;
    

在这里插入图片描述

自动换行:flex-wrap

flex-wrap 设置弹性元素在一行容纳不下时,是否在弹性容器中自动换行

  • nowrap 默认值,元素会自动换行
  • wrap 元素沿着辅轴方向自动换行
  • wrap-reverse 元素沿着辅轴反方向换行
/* 设置弹性元素排列方式 */
flex-direction: row;
/* 设置自动换行 */
flex-wrap: wrap;

在这里插入图片描述

简写属性:flex-flow

flex-flowwrapdirection的简写属性

/* 简写属性 */
flex-flow: row wrap;

在这里插入图片描述

空白空间:justify-content

justify-content 如何分配主轴上的空白空间(主轴上的元素如何排列)

(前提是主轴上还有空余空间,注意这与 弹性元素的伸展系数(默认是0) 有关噢,换句话说,如果有弹性元素设置了伸展,那么就会把空余空间都给占了的话,那就谈不上分配空余空间了)

取值分配空白空间
flex-start元素沿着主轴起边排列
flex-end元素沿着主轴终边排列
center元素居中排列
space-around空白分布到元素两侧(绝对均匀分布)
space-between空白均匀分布到元素间(两侧贴边)
space-evenly空白分布到元素的单侧(均匀分布)
  • flex-start 元素沿着主轴起边排列

在这里插入图片描述

  • flex-end 元素沿着主轴终边排列

在这里插入图片描述

  • center 元素居中排列

在这里插入图片描述

  • space-around 空白分布到元素两侧

在这里插入图片描述

  • space-between 空白均匀分布到元素间

在这里插入图片描述

  • space-evenly 空白分布到元素的单侧

在这里插入图片描述

辅轴属性

辅轴对齐:align-items

align-items元素在辅轴上如何对齐,设置的是弹性元素之间的对齐关系。换句话说:处理弹性项目所在的那一行的富余空间。

(align-items属性适用于所有的flex容器,它是用来设置每个flex元素在交叉轴上的默认对齐方式。align-items和align-content有相同的功能,不过 不同点是它是用来让每一个单行的容器居中,而不是让整个容器居中。)

取值弹性元素在辅轴上的对齐方式
stretch默认值,将元素的长度设置为相同的值(前提是元素没有设置高度)
flex-start元素不会拉伸,沿着辅轴起边对齐
flex-end元素不会拉伸,沿着辅轴终边对齐
center居中对齐
baseline基线对齐
  • stretch 默认值,将元素的长度设置为相同的值

在这里插入图片描述

  • flex-start 元素不会拉伸,沿着辅轴起边对齐

在这里插入图片描述

  • flex-end 沿着辅轴的终边对齐

在这里插入图片描述

  • center 居中对齐

在这里插入图片描述

  • baseline 基线对齐

在这里插入图片描述

空白空间:align-content

align-content 如何分配辅轴上的空余空间(前提是辅轴上还有空余空间)。

换句话说:处理弹性项目在整个容器里侧轴的富余空间(只针对多行元素)。

(align-content属性只适用于多行的flex容器,并且当交叉轴上有多余空间使flex容器内的flex线对齐。所以对于只有一行的flex元素,align-content是没有效果的)

取值分配空白空间
flex-start元素沿着辅轴起边排列
flex-end元素沿着辅轴终边排列
center元素居中排列
space-around空白分布到元素两侧(绝对均匀分布)
space-between空白均匀分布到元素间(两侧贴边)
space-evenly空白分布到元素的单侧(均匀分布)
  • flex-start 元素沿着辅轴起边排列

在这里插入图片描述

  • flex-end 元素沿着辅轴终边排列

在这里插入图片描述

  • center 元素居中排列

在这里插入图片描述

  • space-around 空白分布到元素两侧

在这里插入图片描述

  • space-between 空白均匀分布到元素间

在这里插入图片描述

  • space-evenly 空白分布到元素的单侧

在这里插入图片描述

3、弹性元素的属性

伸展系数:flex-grow

flex-grow 指定弹性元素伸展系数默认值为 0

  • 当父元素有多余空间的时,子元素如何伸展
  • 父元素的剩余空间,会按照比例进行分配

(父元素有剩余空间,才会按照flex-grow的比例进行分配剩余空间;如果没有剩余空间,此属性设置了没任何效果)

li:nth-child(1) {
  background-color: #bfa;
  flex-grow: 1;
}

li:nth-child(2) {
  background-color: red;
  flex-grow: 2;
}

li:nth-child(3) {
  background-color: green;
  flex-grow: 3;
}

在这里插入图片描述

缩减系数:flex-shrink

flex-shrink 指定弹性元素收缩系数默认值为 1 (0表示不收缩)

当弹性容器宽度不够时,去设置每一个弹性项目的收缩量。

  • 当父元素中的空间不足以容纳所有的子元素时,如何对子元素进行收缩,
li:nth-child(1) {
  background-color: #bfa;
  flex-shrink: 1;
}

li:nth-child(2) {
  background-color: red;
  flex-shrink: 2;
}

li:nth-child(3) {
  background-color: green;
  flex-shrink: 3;
}

在这里插入图片描述

基础长度:flex-basis

flex-basis 指定的是元素在主轴上的基础长度(设置弹性项目的默认宽度)

它的初始值是 auto,此时浏览器会检查元素是否设置了 width 属性值。如果有,则使用 width 的值作为 flex-basis 的值;如果没有,则用元素内容自身的大小。如果 flex-basis 的值不是 auto,width 属性会被忽略。

  • 如果主轴是横向的,则该值指定的就是元素的宽度
  • 如果主轴是纵向的,则该值指定的就是元素的高度
  • 默认值是auto,表示参考元素自身的高度或宽度
  • 如果传递了一个具体的数值,则以该值为准(优先级:flex-basis > width)
li:nth-child(1) {
  background-color: #bfa;
  flex-basis: 200px;
}

在这里插入图片描述

简写属性:flex

flex可以设置弹性元素所有的三个样式 flex: 增长 缩减 基础

  • initialflex: 0 1 auto
  • autoflex: 1 1 auto
  • noneflex: 0 0 auto 弹性元素没有弹性

排列顺序:order

order 决定弹性元素的排列顺序(order数字越大,顺序越靠后,默认值为0,并且可以是负数)

li:nth-child(1) {
  background-color: #bfa;
  order: 2;
}

li:nth-child(2) {
  background-color: red;
  order: 3;
}

li:nth-child(3) {
  background-color: green;
  order: 1;
}

在这里插入图片描述

覆盖辅轴:align-self

align-self 用来覆盖当前弹性元素上的align-items(相当于可单独指定 弹性元素 的 辅轴对齐 方式)

li:nth-child(1) {
  background-color: #bfa;
  align-self: flex-end;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

* 示例 - 弹性居中

利用弹性盒对元素进行水平垂直双方向居中

justify-content: center;
align-items: center;

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐