在我们上一篇CSS布局文章中详细的讲解了grid布局,这篇文章就带大家来学习一下flex布局!

全文思维导图,建议收藏!

简介

Flex布局,也叫"弹性布局",用来为盒模型提供最大的灵活性。

任何一个容器都可以指定为 Flex 布局。

.box{
display: flex;
}

对于行内元素也可以使用行内flex布局

注意:这个点之前面试被面到过,可以留意一下

.box{
display: inline-flex;
}

使用时应该注意些什么?

  • 对于部分浏览器有兼容性问题,需要做兼容性处理。(IE:“你直接报我身份证算了”)
  • 在父级元素设置为flex布局后,子元素的float、clear、vertical-align属性都将失效,所以在使用flex布局时,应当在分析页面结构时就考虑清楚,不应该先设置完子元素布局后再使用。

基本概念

grid布局一样,有容器和项目两个概念,采用 Flex 布局的元素,称为 Flex 容器,简称为"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目,简称为"项目"。

注意:不同于grid布局,flex布局是一维布局方式,按行或者按列

也就是父级元素采用flex布局,则父级元素为容器,全部子元素自动成为项目。

在flex布局中还有很多细致的属性,都一一在图中有展示

  1. 水平的主轴(main axis)
  2. 垂直的交叉轴(cross axis)
  3. 主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end
  4. 交叉轴的开始位置叫做cross start,结束位置叫做cross end
  5. 单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size

容器属性

容器属性顾名思义就是设置在容器身上的属性,一共有6个,下面来一一介绍

  • 也就是这一部分的属性全是设置在容器盒子身上的!

1. flex-direction

  • flex-direction属性决定主轴的方向,也就是项目的排列方向

有四个属性值row | row-reverse | column | column-reverse

测试代码

对三个项目分别设置了不同的颜色

<div class="container">
<div class="item item-1">flex item1</div>
<div class="item item-2">flex item2</div>
<div class="item item-3">flex item3</div>
</div>

row(默认值):主轴为水平方向,起点在容器左端

row-reverse:主轴为水平方向,起点在容器右端

column:主轴为垂直方向,起点在容器上沿。

column-reverse:主轴为垂直方向,起点在容器下沿。

2. flex-wrap

  • flex-wrap属性用于设置当项目在容器中一行无法显示的时候如何处理。

有三个属性值:nowrap | wrap | wrap-reverse

  1. nowrap(默认):不换行

  2. wrap:换行,第一行在上方

  3. wrap-reverse:换行,第一行在下方

3. flex-flow

flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap

.container {
flex-flow: <flex-direction> || <flex-wrap>;
}

第一个属性是方向,第二个是是否换行

4. justify-content

justify-content属性定义项目在主轴上的对齐方式。

有5个属性值:flex-start | flex-end | center | space-between | space-around

  • flex-start(默认值):左对齐

  • flex-end:右对齐

  • center: 居中

  • space-between:两端对齐,项目之间的间隔都相等

  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

5. align-items

align-items属性定义项目在交叉轴上如何对齐

有5个属性值:flex-start | flex-end | center | baseline | stretch

  • flex-start:交叉轴的起点对齐

  • flex-end:交叉轴的终点对齐

  • center:交叉轴的中点对齐

  • baseline: 项目的第一行文字的基线对齐

  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

6. align-content

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用

有6个属性值:flex-start | flex-end | center | space-between | space-around | stretch

  • flex-start:与交叉轴的起点对齐

  • flex-end:与交叉轴的终点对齐

  • center:与交叉轴的中点对齐,也就是垂直居中

  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布

  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍

  • stretch(默认值):轴线占满整个交叉轴

项目属性

项目属性就是写在项目身上的!用来设置项目

1. order

order属性定义项目的排列顺序。数值越小,排列越靠前,默认值为0。

.item-2 {
order: 1;
background-color: plum;
}

item-2设置了order为1,比1,3的order值要大,所以item-2会排到后面

2. flex-grow

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

当其中的一个项目设置了flex-grow1时,它将占据剩余空间的100%

.item-1 {
flex-grow: 1;
background-color: pink;
}

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

3. flex-shrink

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小,和flex-grow算是相对的属性,一个放大一个缩小

如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,属性为0的不缩小。

如果都是默认值1,则空间不足时,等比缩小

注意:负值对该属性无效。

4. flex-basis

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(在基本概念中有介绍到)。浏览器根据这个属性,计算主轴是否有多余空间。

  • 它的默认值为auto,即项目的本来大小。

简单来说,当设置了flex-basis以后,就设定了项目的尺寸。

注意widthflex-basis的区别是,flex-basis的优先级更高。如果设置的flex-basis的值不为auto,那么width设置什么值都无效,以flex-basis的值为准。只有当flex-basis的值为auto的时候,该项目才会是width设定的值。

注意:flex-basiswidthauto值,那最后的空间就是根据内容多少来定的,内容多占据的水平空间就多

可以看出在item2分配剩余空间之前,item1先占据了300px

5. flex属性(重点)

flex属性是flex-grow, flex-shrinkflex-basis的简写,默认值为0 1 auto。后两个属性可选。

/*书写顺序*/
<'flex-grow'> <'flex-shrink'> <'flex-basis'>

对于flex属性有几个常用的属性值auto,none,1

一下实例均对item1进行操作

flex: auto

flex: auto 等同于 flex: 1 1 auto

flex: none

flex: none 等同于 flex: 0 0 auto

flex: 1

注意:当 flex 取值为一个非负数字,则该数字为 flex-grow 值,flex-shrink 取 1,flex-basis 取 0%

也就是说flex: 1flex: 1 1 0%的简写

flex: 100px

flex取值为一个长度或者是一个百分比时,则视为 flex-basis 值,flex-grow 取 1,flex-shrink 取 1

flex: 100px等同于flex: 1 1 100px

注意:由于flex-grow: 1所以item1会占满剩余空间

这部分是面试中常常会提及的内容,面试官:“你知道flex1吗?”

6. align-self

align-self属性设定单个项目的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch

给容器设置了下端对齐,再给item1单独设置居中对齐


以上就是关于flex布局的全部内容了,相信看到这里的你一定有所收获,可以自己动手尝试一下啦!思维导图一定要收好噢!

只需5分钟!一文读懂CSS布局(二) -- flex布局的更多相关文章

  1. 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别

    1.引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,什么时候应该使用NIO? 在本 ...

  2. kubernetes基础——一文读懂k8s

    容器 容器与虚拟机对比图(左边为容器.右边为虚拟机)   容器技术是虚拟化技术的一种,以Docker为例,Docker利用Linux的LXC(LinuX Containers)技术.CGroup(Co ...

  3. 大数据篇:一文读懂@数据仓库(PPT文字版)

    大数据篇:一文读懂@数据仓库 1 网络词汇总结 1.1 数据中台 数据中台是聚合和治理跨域数据,将数据抽象封装成服务,提供给前台以业务价值的逻辑概念. 数据中台是一套可持续"让企业的数据用起 ...

  4. [转帖]一文读懂 HTTP/2

    一文读懂 HTTP/2 http://support.upyun.com/hc/kb/article/1048799/ 又小拍 • 发表于:2017年05月18日 15:34:45 • 更新于:201 ...

  5. 一文读懂clickhouse集群监控

    更多精彩内容,请关注微信公众号:后端技术小屋 一文读懂clickhouse集群监控 常言道,兵马未至,粮草先行,在clickhouse上生产环境之前,我们就得制定好相关的监控方案,包括metric采集 ...

  6. 一文读懂Java动态代理

    作者 :潘潘 日期 :2020-11-22 事实上,对于很多Java编程人员来说,可能只需要达到从入门到上手的编程水准,就能很好的完成大部分研发工作.除非自己强主动获取,或者工作倒逼你学习,否则我们好 ...

  7. 一文读懂HTTP/2及HTTP/3特性

    摘要: 学习 HTTP/2 与 HTTP/3. 前言 HTTP/2 相比于 HTTP/1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何 ...

  8. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

  9. 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HT ...

随机推荐

  1. java反射Array的使用

    1.什么是Array Array是一个类的简写,全限定类名是java.lang.reflect.Array. 2.Array有什么用 Array可以代表所有的数组,可以通过Array动态创建与修改里面 ...

  2. MySQL数据类型全解析

    1 概述 本文主要介绍了MySQL的各种数据类型,版本为8.x, MySQL的数据类型可以分为六类:数值类型,日期时间类型,字符串类型,二进制类型,JSON类型与空间数据类型. 2 数值类型 数值类型 ...

  3. 八戒转世投胎竟然是Java设计模式:桥接模式

    目录 示例 代码实例 桥接模式 定义 意图 主要解决问题 何时使用 优缺点 八戒转世投胎的故事 示例 请开发一个画图程序,可以画各种颜色不同形状的图形,请用面向对象的思 想设计图形 分析: 1.比如有 ...

  4. Ananagrams UVA - 156

      Most crossword puzzle fans are used to anagrams - groups of words with the same letters in differe ...

  5. SQL Server 审计(Audit)

    审计(Audit)用于追踪和记录SQL Server实例,或者单个数据库中发生的事件(Event),审计运作的机制是通过捕获事件(Event),把事件包含的信息写入到事件日志(Event Log)或审 ...

  6. struct 模块

    1. Struct 简介 2. Struct 代码示例 2.1 struct.pack 2.2 struct.unpack 2.3 struct.calcsize 1. Struct 简介 当 pyt ...

  7. Python JWT 介绍

    Python JWT 介绍 目录 Python JWT 介绍 1. JWT 介绍 2. JWT 创建 token 2.1 JWT 生成原理 2.2 JWT 校验 token 原理 3. 代码实现 4. ...

  8. 04.06 UCF Local Programming Contest 2017

    A.Electric Bill 题意:简单计算题,超过1000部分额外算 1 #include<stdio.h> 2 int main(){ 3 int money1,money2; 4 ...

  9. 熟悉 Bash 快捷键来提高效率

    Bash是GNU计划的一部分,是多数Linux发行版提供的默认Shell. Linux的精髓就在于命令行的高效,而学习命令行的第一步便是学习如何快速地输入命令. 其实包括Bash在内的多数Linux ...

  10. xxl-job的一些感悟与规范

    后台计划任务设计思路: 日志埋点处理,便于prd排查问题 2种主动job搭配规范(正向job.反查job) 1种消息接收的处理规范,重试机制,返回状态 job开关维度 数据流图 线上暗job-便捷性- ...