Flex 弹性盒子布局
可以少去理解一些不必要的概念,而多去思考为什么会有这样的东西,它解决了什么问题,或者它的运行机制是什么?
1. 弹性盒子布局概念
Flex 是 Flexible Box 的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为 Flex 布局。比如:
.box{
display:flex;
}
容器、项目的理解?
采用 Flex 布局的元素,称为 Flex 容器(container),称为“容器”。它的所有子元素自动成为容器成员,称为 Flex 项目(item)。
下面借用别人一张图展示:

容器两根轴线:主轴、交叉轴:
水平的主轴(main axis):主轴的开始位置(与边框的交叉点)叫做 main start,结束位置叫做 main end;
垂直的交叉轴(cross axis):交叉轴的开始位置叫做 cross start,结束位置叫做cross end。
项目默认沿主轴排列。单个项目占据的主轴空间叫做 main size,占据的交叉轴空间叫做 cross size。
2. 容器的属性
详细记录各项属性之前,先看下基础样式代码及效果如下所示:
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
.box{
width: 500px;
height:200px;
padding: 10px;
border: 2px solid red;
display: flex;
}
.item {
width: 50px;
height: 50px;
color: white;
font-size: 1.4em;
text-align: center;
line-height: 50px;
margin: 1px 1px;
background: #1f1d99;
}
默认的布局方式,由于子元素是 div 以及自身属于块级元素,所以独立占据一行,下面我们给外层盒子添加 display:flex看看效果:

2.1 flex-direction
设置主轴方向,即项目排列方式,默认 row。它有如下4个值:row、row-reverse column、column-reverse。
- row(默认值):主轴为水平方向,起点在左端。
- row-reverse:主轴为水平方向,起点在右端。
- column:主轴为垂直方向,起点在上沿。
- column-reverse:主轴为垂直方向,起点在下沿。
2.2 flex-wrap
默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap 属性定义,如果一条轴线排不下,如何换行,它有如下3个值:nowrap(默认)、wrap 、wrap-reverse
- nowrap(默认):不换行。
- wrap:换行,第一行在上方。
- wrap-reverse:换行,第一行在下方。
2.3 flex-flow
flex-flow 是 flex-direction 属性和 flex-wrap 属性的简写形式,默认值为 row 、nowrap。
2.4 justify-content
设置项目在主轴上都对其方式,它有如下5个值:center、flex-start、flex-end、space-between、space-around。具体对齐方式与轴的方向有关,这里以主轴为从左到右为例:
- flex-start(默认值):左对齐。
- flex-end:右对齐。
- center:居中。
- space-between:两端对齐,项目之间的间隔都相等。
- space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
2.5 align-items
align-items 属性定义项目在交叉轴上如何对齐,它有如下5个值:center、flex-start、flex-end、stretch(默认)、baseline 。具体的对齐方式与交叉轴的方向有关,这里以交叉轴从上到下为例:
- flex-start:交叉轴的起点对齐。
- flex-end:交叉轴的终点对齐。
- center:交叉轴的中点对齐。
- stretch(默认):如果项目未设置高度或设为auto,将占满整个容器的高度。
- baseline: 项目的第一行文字的基线对齐。
2.6 align-content
align-content 属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性与 align-items 属性效果相同。它有如下6个值:center、flex-start、flex-end、space-between、space-around、stretch。
- flex-start:与交叉轴的起点对齐。
- flex-end:与交叉轴的终点对齐。
- center:与交叉轴的中点对齐。
- space-between:与交叉轴两端对齐,轴线之间的间隔平均分布
- space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
- stretch(默认值):轴线占满整个交叉轴。
参考:
https://baijiahao.baidu.com/s?id=1711671351238047881&wfr=spider&for=pc
3. 项目的属性
3.1 order
order 属性定义项目的排列顺序。数值越小,排列越靠前,默认为 0。
3.2 flex-grow
flex-grow 弹性放大,属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
3.3 flex-shrink
flex-shrink 弹性收缩,属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。如果设置为0,该项目不缩小。
3.4 flex-basis
flex-basis 在 Flex 布局中,一个 Flex 子项的宽度是由元素自身尺寸,flex-basis 设置的基础尺寸,以及外部填充(flex-grow)或收缩(flex-shrink)规则3者共同决定的。
参考:https://blog.csdn.net/qq_41635167/article/details/104190865
3.5 flex
flex 属性是 flex-grow、flex-shrink、和 flex-basis 的简写,默认值为 0 1 auto。后两个属性可选。
3.6 align-self
align-self 属性允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性。默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,则等同于 stretch。
Flex 弹性盒子布局的更多相关文章
- flex弹性盒子布局
一.在需要使用弹性盒子的容器上添加属性:display:flex 或者 display:inline-flex; 二.在父容器上添加flex-direction设置子元素主轴方向: 不写默认值是X轴从 ...
- css3 flex弹性盒子布局梳理,打通任督二脉
挺早就接触了css的flex布局,深入使用也就是在近期移动端开发.老来多健忘,只能自己梳理一下知识点,当做温故知新吧. ,请原谅小白的才疏学浅,写的不到位的地方请指正. flex属性用于设置或检索弹性 ...
- Flex 弹性盒子布局使用教程
本文转载于<https://blog.csdn.net/lyznice/article/details/53981062>
- flex属性值----弹性盒子布局
里面的属性都 是在有display: flex的情况 下才生效. 兼容性写法: display: -webkit-box; /*老版本语法: Safari, iOS, Android browse ...
- CSS3总结五:弹性盒子(flex)、弹性盒子布局
弹性盒子容器的属性与应用 display:flex/inline-flex flex-direction flex-wrap justify-content align-items align-con ...
- css横向 弹性盒子布局的一些属性
<head> <meta charset="utf-8"> <meta name="viewport" content=" ...
- 网页布局——Flex弹性框布局
布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 需要安卓4.4及以上版本可以使用 ...
- CSS:CSS弹性盒子布局 Flexible Box
一.简介 flexbox:全称Flexible Box, 弹性盒子布局.可以简单实现各种伸缩性的设计,它是由伸缩容器和伸缩项目组成.任何一个元素都可以指定为flexbox布局.这种新的布局方案在200 ...
- flex弹性盒子中flex-grow与flex的区别
大家在使用flex布局的时候很多情况下都会用到flex-grow这个属性, flex-grow 属性用于设置父元素剩余空间的瓜分比例, flex 属性是 flex-grow.flex-shrink ...
- Flex box 弹性盒子布局
display: -webkit-flex 标识使用弹性布局 flex: num 占容器的比例 Flex等比划分 导航1 : Flex :1; 导航2 Flex: 2; ————&g ...
随机推荐
- [转帖]十大主流Nehalem服务器横评(多图)
https://server.51cto.com/article/201820.html 作者:佚名2010-05-25 09:52:27 运维服务器运维 除了我们的两台基准服务器之外,本次横向评测活 ...
- docker -- images镜像消失问题排查
1. 问题描叙 安装model-serving组件时,错误日志输出push时对应的tag不存在,导致镜像推送失败 2. 问题排查 # 找到对应镜像,尝试手动推送 docker images|grep ...
- How to Die ( Since 10.10 )
以后再也不要相信 sqrt 的精度!对 long long 级别的数取 sqrt 会炸精度! 对于区间差分 \([l,r]\) 的问题,一定要注意是否会出现 \(l>r\) 的情况!(\(|A| ...
- vue插件实现表格拖拽 sortable 遇见的坑
下载插件 npm install sortable.js --save (下载的时候一定要这样去下载,不要去下载 npm install sortable--save ) 因为sortable.js和 ...
- js中计算一个时间点加上一个时间段后的时间
function aa(a,b){ console.log(111,a,b) var nd = new Date(Date.parse(a.replace(/-/g, "/"))) ...
- 大数据面试题集锦-Hadoop面试题(三)-MapReduce
你准备好面试了吗?这里有一些面试中可能会问到的问题以及相对应的答案.如果你需要更多的面试经验和面试题,关注一下"张飞的猪大数据分享"吧,公众号会不定时的分享相关的知识和资料. 目录 ...
- 关于 const
const 限定符 在编译器中限制变量,设定该变量不可被改变,但实际上系统里还是将由 const 修饰的值识别为一个变量(只是在编译器中进行限制) 注意: 由 const 修饰的变量必须在定义时就进行 ...
- TienChin 渠道管理-字典原理分析
在上一节当中,我们使用到了字典来进行翻译我们的渠道类型等等字段,那么这一节我们就来分析一下字典的原理. 从代码方面先开始分析,我们先来看一下字典的定义,我们是在如下图当中编写了我们的渠道类型,使用,p ...
- HarmonyOS实战[三]—可编辑的卡片交互
相关文章: HarmonyOS实战[一]--原理概念介绍安装:基础篇 HarmonyOS实战[二]-超级详细的原子化服务体验[可编辑的卡片交互]快来尝试吧 [本文正在参与"有奖征文|Harm ...
- C/C++ 实现URL路径拆分
URL路径拆分: 例如我们传入 http://www.baidu.com/index.php 拆分为 www.baidu.com 和 /index.php #include <Windows.h ...