简介

  • flexbox是一种布局模型,让网页布局更简单灵活,基于flex精确灵活控制块级盒子的布局方式,避免浮动布局中脱离文档流现象发生;给父元素添加display:flex,子元素可以自动的挤压或者拉伸;组成部分有弹性容器 弹性盒子 主轴 侧轴;
  • 应用场景:我们通过flex布局可以实现元素水平垂直居中以及左右固定,中间自适应,移动小程序开发都建议使用flex布局

一、是什么

flexible box简称flex,意为“弹性布局”,可以简便、完整、响应式地实现各种页面布局。

采用flex布局地元素,称为flex容器container

它的所有子元素自动成为容器成员,称为flex项目item

容器中默认存在两条轴,主轴和侧轴(交叉轴),呈90°关系。项目默认沿主轴方向排列,通过flx-direction来决定主轴的方向。

每根轴都有起点和终点,这对于元素的对齐非常重要

二、属性

关于flex常用的属性,我们可以划分为容器属性和容器成员属性

容器属性有:

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content

flex-direction

决定主轴的方向(即项目的排列方向)

.container {flex-direction: row | row-reverse | column | column-reverse;
}

属性对应如下:

  • row(默认值):主轴为水平方向,起点在左端
  • row-reverse:主轴为水平方向,起点在右端
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿

如下图所示:

flex-wrap

弹性元素永远沿主轴排列,那么如果主轴排列不下,通过flex-wrap决定容器内项目是否换行

.container {flex-wrap: nowrap | wrap | wrap-reverse;
}

属性对应如下:

  • nowrap(默认值):不换行
  • wrap:换行,第一行在下方
  • wrap-reverse:换行,第一行在上方

默认情况是不换行,但这里也不会任由元素直接溢出容器,会涉及到元素的弹性伸缩

flex-flow

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

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

justify-content

定义了项目在主轴上的对齐方式

.box {justify-content: flex-start | flex-end | center | space-between | space-around;
}

属性对应如下:

  • flex-start(默认值):左对齐
  • flex-end:右对齐
  • center:居中
  • space-between:两端对齐,项目之间的间隔都相等
  • space-around:两个项目两侧间隔相等

效果图如下:

align-items

定义项目在交叉轴上如何对齐

.box {align-items: flex-start | flex-end | center | baseline | stretch;
}

属性对应如下:

  • flex-start:交叉轴的起点对齐
  • flex-end:交叉轴的终点对齐
  • center:交叉轴的中点对齐
  • baseline: 项目的第一行文字的基线对齐
  • stretch(默认值):如果项目未设置高度或设为 auto,将占满整个容器的高度

align-content

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

.box {align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}

属性对应如吓:

  • flex-start:与交叉轴的起点对齐
  • flex-end:与交叉轴的终点对齐
  • center:与交叉轴的中点对齐
  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布
  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍
  • stretch(默认值):轴线占满整个交叉轴

效果图如下:

容器成员属性如下:

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self

order

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

.item {order: <integer>;
}

flex-grow

上面提到了当容器设为flex-wrap:nowrap;不换行的时候,容器宽度有不够分配的情况,弹性元素会根据flex-grow来决定。

定义项目的放大比例(容器宽度>元素总宽度时如何伸展)

默认为0,即如果存在剩余空间,也不放大。

.item {flex-grow: <number>;
}

如果所有项目的flex-grow属性都为 1,则它们将等分剩余空间(如果有的话)

如果一个项目的flex-grow属性为 2,其他项目都为 1,则前者占据的剩余空间将比其他项多一倍

弹性容器的宽度正好等于元素宽度总和,无多余宽度,此时无论flex-grow是什么值都不会生效。

felx-shrink

定义了项目的缩小比例(容器宽度<容器总宽度时如何收缩),即如果空间不足,该项目将缩小

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

如果所有项目的flex-shrink属性都为 1,当空间不足时,都将等比例缩小

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

在容器宽度有剩余时,flex-shrink也是不会生效的

flex-basis

设置的是元素在主轴上的初始尺寸,所谓的初始尺寸就是元素在flex-growflex-shrink生效前的尺寸

浏览器根据这个属性,计算主轴是否有多余空间,默认值为auto,即项目的本来大小,如设置了width则元素尺寸由width/height决定(主轴方向),没有设置则由内容决定

.item {flex-basis: <length> | auto; /* default auto */
}

当设置为 0 的是,会根据内容撑开

它可以设为跟widthheight属性一样的值(比如 350px),则项目将占据固定空间

flex

flex属性是flex-growflex-shrink 和 flex-basis的简写,默认值为0 1 auto,也是比较难懂的一个复合属性

.item {flex: none | [ < 'flex-grow' > < 'flex-shrink' >? || < 'flex-basis' > ];
}

一些属性有:

  • flex: 1 = flex: 1 1 0%
  • flex: 2 = flex: 2 1 0%
  • flex: auto = flex: 1 1 auto
  • flex: none = flex: 0 0 auto,常用于固定尺寸不伸缩

flex:1 和 flex:auto 的区别,可以归结于flex-basis:0flex-basis:auto的区别

当设置为 0 时(绝对弹性元素),此时相当于告诉flex-growflex-shrink在伸缩的时候不需要考虑我的尺寸

当设置为auto时(相对弹性元素),此时则需要在伸缩时将元素尺寸纳入考虑

注意:建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值

align-self

允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性

默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch

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

效果图如下:

三、应用场景

在以前的文章中,我们能够通过flex简单粗暴的实现元素水平垂直方向的居中,以及在两栏三栏自适应布局中通过flex完成,这里就不再展开代码的演示

包括现在在移动端、小程序这边的开发,都建议使用flex进行布局

4、Flex box相关推荐

  1. CSS3 - 使用弹性盒子(Flex Box)实现完美居中、栅格系统及响应式布局

    CSS3弹性盒子介绍 弹性盒子是 CSS3 的一种新的布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的 ...

  2. Bootstrap4+MySQL前后端综合实训-Day01-PM【position定位的四种方式、Flex布局语法教程及案例(概念、容器属性、项目属性)、双飞翼布局复习、Bootstrap4 教程】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目   录 HTML中的三种元素(块元素.内联元素.内联块元素) position定位的四种方式 ...

  3. 移动web现状、viewport视口、二倍图、移动web开发主流方案、布局技术选型(流式布局、flex弹性布局、less+rem+媒体查询布局、混合布局、媒体查询、bootstrap)

    移动端web现状: 移动端常见浏览器:UC浏览器,QQ浏览器,Opera浏览器,百度手机浏览器,360安全浏览器,谷歌浏览器,搜狗手机浏览器,猎豹浏览器及杂牌浏览器.移动端常见的浏览器都是基于webk ...

  4. html弹性盒子布局,div+css3弹性盒子(flex box)布局

    一.CSS3 弹性盒子(Flex Box) 弹性盒子是CSS3的一种新布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时确 ...

  5. 2、多效果、太极图、党徽和五角星、时钟、animation、文本溢出显示省略号、Flex布局、Flex容器、链接状态、选择器、清除浮动、table表格合并、点击事件、半包围效

    2.多效果.太极图.党徽和五角星.时钟.animation.文本溢出显示省略号.Flex布局.Flex容器.链接状态.选择器.清除浮动.table表格合并.点击事件.半包围效.getBoundingC ...

  6. 移动WEB开发三、flex布局

    零.文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789 个人博客-GiteePages:https://bluecusliyou.gi ...

  7. CSS3 弹性盒子(Flex Box)

    目录 CSS3 弹性盒子(Flex Box) 一.什么是 Flexbox >>> 了解两个基本概念,接下来会频繁提到: >>> 了解两个基本方向,这个牵扯到弹性布局 ...

  8. div、Flex、element-ui-layout页面布局

    div.Flex.element-ui-layout页面布局 一.div页面布局 1.页面布局标签属性 2.定位属性 3.盒子模型 (1)标准盒模型 (2)怪异盒模型 二.Flex页面布局 1.基本概 ...

  9. 弹性盒子(Flex Box)模型

    目录 一.简介 二.内容 三.弹性容器的属性 1.flex-direction 2.flex-wrap 3.flex-flow 4.justify-content 5.align-items 6.al ...

最新文章

  1. 面试官:MySQL 表设计要注意什么?
  2. 测验4: 程序的控制结构 (第4周)
  3. snakeyaml读取yaml/yml配置文件数据
  4. 浮点运算和代码优化, 音频常识, 并行计算
  5. DR.com客户端解密过程逆向分析
  6. xcode开发html5工具,5个Xcode开发调试技巧
  7. 搜索 —— 广度优先搜索(BFS)
  8. Tips--利用shell脚本批量提取txt文件中任意字段
  9. linux libstdc 怎样升级,linux 更新libstdc++.so.6
  10. IO之流程与buffer 图
  11. struts2 + ajax 用户名登录验证(struts2+spring+ibatis)
  12. SpringBoot 中 get/post 请求处理方式,以及requestboy为Json时的处理
  13. STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
  14. cad2020打印样式放在哪个文件夹_老师傅不会告诉你的CAD打印设置技巧
  15. 树莓派+aria2+yaaw搭建下载机
  16. ThinkPHP3.2.3实现后台登录界面
  17. 天线传播原理、作用及分类
  18. Android调建行APP、建行微信遇到的坑
  19. 一筐鸡蛋编程解题Java_一筐鸡蛋总共369个标准答案怎么算的?求法解答公式解题步骤...
  20. NVR人机界面提示资源不足如何解决

热门文章

  1. shell mysql中单引号_Shell脚本中单引号(‘)和双引号(“)的使用区别
  2. Altium Designer---------------AD15如何走差分线(最全教程)
  3. awk从入门到入土(21)awk脚本调试
  4. 【计算机图形学】 圆的两种生成算法(角度微分法、Bresenham算法)
  5. 2016春季阿里游戏前端实习生笔试题
  6. 你还不知道的测试用例相关知识
  7. 利用Future接口实现异步线程同步回滚
  8. Swift3.0可选类型(Optional)倾心总结
  9. 微信小程序添加视频video组件
  10. NullPointException