Flex弹性盒子详解:从量变到质变的理解
Flex弹性盒子
在前端css3中有个非常重要的属性,就是弹性盒子了,他在页面布局中起到的作用可谓是有着王霸之业,那么我们如何正确的使用flex布局呢?让我来介绍一下吧。我们可以将整个flex布局分成两个部分,一部分是在父元素上可以设置的属性,如:flex-direction
、flex-wrap
、justify-content
、align-items
、align-content
属性。另一部分就是在设置flex布局父元素的子元素上可以设置的属性,如:order
、align-self
、flex-basis
、flex-grow
、flex-shrink
属性。
首先,我们需要启用flex弹性盒子,非常简单,在需要启用的父元素上设置该属性就可以
display:flex
接下来先介绍下可以设置在父元素上的属性,在父元素上设置的属性,看一下配图,效果就一目了然啦
1、设置display:flex上的元素可以拥有的属性
(1) flex-direction:设置主轴的方向。
- row:默认值。自左向右
- row-reverse:对齐方式与row相反。
- column:自下向上
- column-reverse:对齐方式与column相反。
(2)flex-wrap:多行文本是否换行
- nowrap:默认值。不换行
- wrap:换行
- wrap-reverse:从反过来换行,把底当成开始
(3)justify-content:设置主轴的对齐方向
- flex-start:从开始位置对齐
- flex-end:从结束位置对齐
- center:居中对齐
- space-between:向两边剧中对齐,两边无空隙,中间空隙相同
- space-around:向中间剧中对齐,两边的空隙相同,大小是中间空隙的一半
(4)align-items:主要针对单行文本对齐方式
- stretch:默认值。如果子元素没有高度,那么设置stretch会将高度撑开为父元素的高度
- baseline:基于文字对齐,与宽高无关,基于文字底线开始对齐
- flex-start:交叉轴开始对齐
- flex-end:交叉轴结束对齐
- center :交叉轴居中对齐
(5)align-content:只有多行文本才起作用
- stretch:默认值。剩余空间被所有行平分,以扩大它们的侧轴尺寸。
- flex-start:从交叉轴开始位置对齐
- flex-end:从交叉轴结束位置对齐
- center:居中对齐
- space-between:向两边(上下边)剧中对齐,两边无空隙,中间空隙相同
- space-around:向中间对齐,两边留有相同的空间
2、子元素上拥有的属性
(1)order:设置子元素出現的顺序。默认为0,数值越小,优先级越低
其实非常简单,也就是说,我们给某个子元素设置order的数值越大的时候,他所在的位置也就越靠后。比如我给如下,数字2的方块设置的order为3,数字3的方块设置的order为2:
(2)align-self:设置子元素单独在交叉轴上的对齐方式。默认是auto
- auto:默认值。计算值为元素的父元素的’align-items’值,如果其没有父元素,则计算值为’stretch’。
- flex-start:交叉轴起始位置的边界紧靠住该行的侧轴起始边界。
- flex-end:交叉轴起始位置的边界紧靠住该行的侧轴结束边界
- center:剧中对齐
- baseline:该值将参与基线对齐
- stretch:如果设置了高度,则按照heigh,如果未设置,则拉伸为盒子高度
接下来的三个属性:basis、shrink和grow才是整个flex布局最重要的属性。我们一起了解一下吧
(3)flex-basis:设置弹性盒伸缩基准值。可以简单理解为覆盖width,设置以后,width失效。
- auto:默认值。无特定宽度值,取决于其它属性值
- 像素值
- 百分比
- content:基于内容自动计算宽度
这个值,在通常情况下,可以理解为width,但是当我们设置文本时,会发现其中的不同之处。当设置flex-basis后,如果内容区中的内容超出flex-basis所设置的宽度时,不会截断,会撑大宽度。而width不会
- 在没有设置
width
的前提下,设置 flex-basis 的值时元素的最小值 - 在设置
width
的前提下,设置的flex-basis
的值是最小值,当元素内容超出了flex-basist
的内容区域时,那么width
所设置的宽度为当前盒子的最大值。(flex-basis < 元素的宽度 < width
) - 如果
flex-basis
大于width
则flex-basis
的值是最大值宽度
(4)flex-grow:设置弹性盒的扩展比率。默认值是0。不扩展
当一行还有剩余空间的时候,就会按照 flex-grow 设置的比例进行分配剩余的空间,调整大小
(5)flex-shrink:设置弹性盒的收缩比率。默认值是1。
计算公式:
1、计算加权值:每个元素 真实内容区的大小(去掉border)* shrink
值之和
2、计算压缩值:(真实内容区大小 * shrink值 )/ 加权值 * 多出来的像素
备注:要注意有border、padding和无border、padding的区别,计算的为去掉border、padding的宽度
举个例子:
/*
计算方式
1、计算加权值 真实内容区的大小 * shrink值
200px*1 + 200px*1 + 400px*3 =1600px
2、
第一个盒子压缩值:
200px * 1
—————————— * 200px(多余的像素) = 25px
1600px第二个盒子压缩值:
200px * 1
—————————— * 200px(多余的像素) = 25px
1600px第三个盒子压缩值:
400px * 3
—————————— * 200px(多余的像素) = 150px
1600px
*/<div class="wrapper"><div class="content">1</div><div class="content">2</div><div class="content">3</div>
</div>
<style>.wrapper{width:600px}.content{width: 200px;height: 100px;flex-shrink: 1;}.content:nth-of-type(3){width: 400px;flex-shrink: 3;}
</style>
复合属性:设置或检索弹性盒模型对象的子元素如何分配空间。下面时常用的复合属性,和其对应的简写形式。
复合属性 | 简写 |
---|---|
flex:1 1 auto | flex:auto |
flex:0 0 auto | flex:none |
flex:1 1 0% | flex:1 |
好啦,讲完了flex布局,我们再来看几个案例,巩固一下吧!
案例1:剧中效果
<div class="wraper"><div class="content"></div>
</div>
<style>.wraper{width: 300px;height: 300px;border: 1px solid black;display: flex;justify-content: center;align-items: center;}.content{width: 100px;height: 100px;box-sizing: border-box;border: 1px solid red;}
</style>
案例2:可动态增加导航栏
<div class="wraper"><div class="items">天猫</div><div class="items">淘宝</div><div class="items">聚划算</div><div class="items">聚划算</div>
</div><style>.wraper{width: 300px;height: 300px;border: 1px solid black;display: flex;justify-content: center;align-items: center;}.items{height: 30px;box-sizing: border-box;border: 1px solid red;flex: 1 1 auto;text-align: center;line-height: 30px;}
</style>
案例三:中间固定,两边自适应 其中一个固定,另外两个不固定等
<div class="wraper"><div class="content"></div><div class="content"></div><div class="content"></div>
</div><style>.wraper{width: 400px;height: 200px;border: 1px solid black;display: flex;resize: both;overflow: hidden;}.content{flex: 1 1 auto;height: 100px;box-sizing: border-box;border: 1px solid red;}.content:nth-of-type(2){flex: 0 0 200px;}
</style>
案例四:圣杯布局
<div class="wraper"><div class="header">header</div><div class="contain"><div class="left">left</div><div class="center">center</div><div class="right">right</div></div><div class="footer">footer</div>
</div><style>.wraper{width: 400px;height: 400px;border: 1px solid black;display: flex;flex-direction: column;overflow: hidden;resize: both;}.header,.footer,.right,.left{flex: 0 0 20%;border: 1px solid green;box-sizing: border-box;}.contain{flex: 1 1 auto;display: flex;}.center{flex: 1 1 auto;}
</style>
Flex弹性盒子详解:从量变到质变的理解相关推荐
- flex弹性布局详解
一.什么是弹性布局 弹性布局(flex container),页面中任何一个元素只要设置了display:flex属性,那么当前盒子都称为弹性盒子.弹性盒子默认有两条轴: 默认水平显示的主轴 和 始终 ...
- Flex 弹性布局详解
什么是Flex布局 flex布局表示弹性布局,为盒状模型提供最大的灵活性. 适用范围 任何一种元素都可以指定为flex布局 使用时应该注意些什么? 如果是Webkit内核的浏览器,需要加上 -webk ...
- Flex弹性盒子(一篇带你掌握潮流 Flex 布局)
文章目录 Flex弹性盒子 1.说在前头 1.1.Flex布局出现之前 1.2.Flex布局出现后 2.什么是Flex布局? 3.Flex container/item(父/子容器)的常用属性 4.L ...
- flex弹性盒子flex-grow 和flex的区别
在flex弹性盒子体系中,flex-grow和flex都有对子元素进行放大的作用,但是这两个属性在放大时的计算方法不同,在使用时候要注意,使用正确的放大属性,从而达到自己想要的效果. 这是一个宽700 ...
- Vue.js-Day08【项目实战(附带 完整项目源码)-day03:订单确认页面、美团支付页面、flex弹性盒子布局】
Vue.js实训[基础理论(5天)+项目实战(5天)]博客汇总表[详细笔记] 实战项目源码[链接:https://pan.baidu.com/s/1r0Mje3Xnh8x4F1HyG4aQTA 提 ...
- flex html 页面移动,HTML页面布局之flex弹性盒子
这里是修真院前端小课堂,本篇分析的主题是 [HTML页面布局之flex弹性盒子] 每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方 ...
- flex弹性盒子中flex-grow与flex的区别
flex弹性盒子中flex-grow与flex的区别 大家在使用flex布局的时候很多情况下都会用到flex-grow这个属性, flex-grow 属性用于设置父元素剩余空间的瓜分比例, flex ...
- HTML+CSS_第三部分(Flex弹性盒子布局、grid网格布局、移动端、移动端流式布局、移动端rem布局、响应式布局、Bootstrap框架)
文章目录 (1)Flex弹性盒子布局 一: 父容器上的属性 1. display:flex 设置为弹性盒子(写在父容器上) 2.flex-direction值 设置子项的布局方向(写在父容器上) 3. ...
- flex弹性盒子做骰子详解
什么是flex 网页布局是css的一个重点应用. 我们传统的布局的解决方案是基于盒装模型,依赖display属性+position属性+float属性.而这种布局相对来说不是很方便,类似垂直居中就不容 ...
最新文章
- python正则表达式\s \S \w \W区别
- C# 文件流相关操作
- hdc mfc 画扇形图_canvas画扇形、饼图
- 皮尔逊系数皮尔逊系数---K近算法之皮尔逊系数
- 适用于ActiveX v18.6 x86的Codejock Xtreme Suite Pro
- 学plc还是学java_要学PLC想走PLC工程师之路的看看
- 小米路由器R4 TTL刷不死Bread第三方固件写入升级
- 【paper-note7】Several Papers About Video Classification
- 打造最美HTML5 3D机房(第三季新增资产管理、动环监控)
- 东南大学破格保研挂科_东南大学破格保研挂科_兜兜转转终入四牌楼——东南大学保研心得...
- (Note)阿克西斯ACASIS DT-3608双盘位硬盘阵列盒RAID设置
- Python+Excel法力无穷
- 样本均值的抽样分布/置信区间
- 英语中的非谓语动词小结
- 计算机基础题精选(一)
- 园区网架构设计 / 升级--3--内外网络优化配置
- ERROR! The server quit without updating PID file (/usr/local/var/mysql/what the fuck.local.pid)
- 教你 2 招,保护 IoT 设备远离无孔不入的黑客
- Centos7安装并使用Oracle11g数据库
- 量子计算机本科应学什么专业,研究生想研究量子计算方向,本科应该学物理还是计算机?...
热门文章
- 使用OpenCV-python实现以图搜图
- Webbench源码分析之多进程(三)
- 抑郁症的第十年:我终于跟自己和解
- 我只想做我自己,最真实的自己!
- 磊科无线路由器设置方法详解
- 伯克利的电气工程和计算机科学专业,Berkeley的Electrical Engineering Computer Sciences「加州大学伯克利分校电气工程与计算机科学系」...
- TypeScript 类的使用、泛型与其他补充类型
- 网络基础知识--IP地址
- 显卡显存测试u盘 mats 百度网盘_网盘数据不安全?还不如固态U盘来得踏实,而且传输速度还很快...
- 数学物理简史-仰望那些闪耀在人类科技史上的明星(欧几里得、牛顿、欧拉、傅里叶、高斯、麦克斯韦、爱因斯坦)