在我们上一篇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. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之vmware设置-02

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之vmware设置-02 欢迎加QQ群:1026880196  进行讨论 1. vmwae版本 2. 网 ...

  2. Ambassador-08-跨域

    官方文档:https://www.getambassador.io/docs/latest/topics/using/cors/ Cross-Origin Resource Sharing-CORS ...

  3. Day11_57_自定义泛型

    自定义泛型 package com.shige.Generic; //自定义泛型 public class CustomizeGeneric { public static void main(Str ...

  4. OOP-面向对象(二)

    面向对象三大特征: 封装 继承 多态 -封装:对类中成员属性和方法的保护,控制外界对内部成员的访问,修改,删除等操作 私有的: private 在本类内部可以访问,类的外部不可以访问.(python中 ...

  5. 1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit

    Given an array of integers nums and an integer limit, return the size of the longest continuous suba ...

  6. uni-app&H5&Android混合开发一 || 最全面的uni-app离线打包Android平台教程

    前言: 为什么会写这么一个教程,因为很久之前做过一个对接银行POS我们的系统是使用的H5开发的app应用.但是假如对结果银行相关业务的小伙伴应该都清楚,银行的业务相对于其他的对接方而言安全性比较高,而 ...

  7. spring boot 项目从配置文件中读取maven 的pom.xml 文件标签的内容。

    需求: 将pom.xml 文件中的版本号读取到配置文件并打印到日志中. 第一步: 在pom.xml 中添加以下标签. 第二步: 将version 标签的值读取到配置文件中 这里使用 @@  而不是  ...

  8. Redhat中网络启动错误解决办法( Failed to start LSB: Bring up/down networking RTNETLINK answers: File exists)

    关于Redhat系列中网络启动失败的解决办法 报错: Failed to start LSB: Bring up/down networking.             RTNETLINK answ ...

  9. hdu4901 枚举状态(找集合对S(xor) ==T(and))

    题意:      给你一个串数字,然后让你在这里面挑取两个集合S ,T,集合的要求是 (1)不能为空 (2)S集合的所有元素必须在T集合的左边 (3)S集合的XOR == T集合的AND      问 ...

  10. LA3135简单多路归并(优先队列)

    题意:       有N个任务,每个任务都有自己的时间间隔(就是每t秒请求执行一次)和任务id,这n个任务公用一个cpu,每次我们都执行时间靠前的,如果相同时间内有多个任务,就执行任务id小的,要求模 ...