弹性布局flex:1详解
在最初学习flex布局的时候,局限于使用flex的属性来布局,但是实际的详细刨铣却很少,最近在一些大厂的面试中被闻到一些细节,感觉自己学的有些粗糙,这里好好整理下
首先明确一点是, flex
是 flex-grow
、flex-shrink
、flex-basis
的缩写
flex-grow
属性定义弹性盒子项(flex item)的拉伸因子
举个例子:
HTML代码
CSS代码
效果如图:
flex-shrink:设置或检索弹性盒的收缩比率
语法:
flex-shrink:<number>
默认值:1
适用于:flex子项
继承性:无
动画性:是
计算值:指定值
取值:
- <number>:
- 用数值来定义收缩比率。不允许负值
说明:
- 根据弹性盒子元素所设置的收缩因子作为比率来收缩空间。
- 示例:a,b,c将按照1:1:3的比率来收缩空间
HTML Code:
<ul class="flex"> <li>a</li> <li>b</li> <li>c</li></ul>.flex{display:flex;width:400px;margin:0;padding:0;list-style:none;}.flex li{width:200px;}.flex li:nth-child(3){flex-shrink:3;}
flex-shrink的默认值为1,如果没有显示定义该属性,将会自动按照默认值1在所有因子相加之后计算比率来进行空间收缩。
本例中c显式的定义了flex-shrink,a,b没有显式定义,但将根据默认值1来计算,可以看到总共将剩余空间分成了5份,其中a占1份,b占1份,c占3分,即1:1:3
我们可以看到父容器定义为400px,子项被定义为200px,相加之后即为600px,超出父容器200px。那么这么超出的200px需要被a,b,c消化
通过收缩因子,所以加权综合可得200*1+200*1+200*3=1000px;
于是我们可以计算a,b,c将被移除的溢出量是多少:
a被移除溢出量:(200*1/1000)*200,即约等于40px
b被移除溢出量:(200*1/1000)*200,即约等于40px
c被移除溢出量:(200*3/1000)*200,即约等于120px
最后a,b,c的实际宽度分别为:200-40=160px, 200-40=160px, 200-120=80px
flex-basis: flex-basis
指定了 flex 元素在主轴方向上的初始大小。如果不使用 box-sizing 来改变盒模型的话,那么这个属性就决定了 flex 元素的内容盒(content-box)的宽或者高(取决于主轴的方向)的尺寸大小。
取值
-
<'width'>
-
width 值可以是一个数字后面跟着绝对单位例如
px
,mm
,pt
; 该值也可以是一个百分数,那么这个百分数就是相对于其父弹性盒容器的宽或者高(取决于主轴方向)。负值是不被允许的。 -
content
- 基于 flex 的元素的内容自动调整大小。
语法
/* Specify <'width'> */
flex-basis: 10em;
flex-basis: 3px;
flex-basis: auto;/* Intrinsic sizing keywords */
flex-basis: fill;
flex-basis: max-content;
flex-basis: min-content;
flex-basis: fit-content;/* Automatically size based on the flex item’s content */
flex-basis: content;/* Global values */
flex-basis: inherit;
flex-basis: initial;
flex-basis: unset;
Example
HTML
<ul class="container"><li class="flex flex1">1: flex-basis test</li><li class="flex flex2">2: flex-basis test</li><li class="flex flex3">3: flex-basis test</li><li class="flex flex4">4: flex-basis test</li><li class="flex flex5">5: flex-basis test</li>
</ul><ul class="container"><li class="flex flex6">6: flex-basis test</li>
</ul>
CSS
.container {font-family: arial, sans-serif;margin: 0;padding: 0;list-style-type: none;display: flex;flex-wrap: wrap;
}.flex {background: #6AB6D8;padding: 10px;margin-bottom: 50px;border: 3px solid #2E86BB;color: white;font-size: 20px;text-align: center;position: relative;
}.flex:after {position: absolute;z-index: 1;left: 0;top: 100%;margin-top: 10px;width: 100%;color: #333;font-size: 18px;
}.flex1 {flex-basis: auto;
}.flex1:after {content: 'auto';
}.flex2 {flex-basis: -webkit-max-content;flex-basis: -moz-max-content;flex-basis: max-content;
}.flex2:after {content: 'max-content';
}.flex3 {flex-basis: -webkit-min-content;flex-basis: -moz-min-content;flex-basis: min-content;
}.flex3:after {content: 'min-content';
}.flex4 {flex-basis: -webkit-fit-content;flex-basis: -moz-fit-content;flex-basis: fit-content;
}.flex4:after {content: 'fit-content';
}.flex5 {flex-basis: content;
}.flex5:after {content: 'content';
}.flex6 {flex-basis: -webkit-fill-available;flex-basis: -moz-available;flex-basis: fill;
}.flex6:after {content: 'fill/-webkit-fill-available/-moz-available';
}
Results
![](/assets/blank.gif)
弹性布局flex:1详解相关推荐
- 弹性布局flex属性详解
注意:如果元素不是弹性盒模型对象的子元素,则 flex 属性不起作用. flex 属性用于设置或检索弹性盒模型对象的子元素如何分配空间. flex 属性是 flex-grow.flex-shrink ...
- 弹性盒子(Flex Box)详解
1 . 弹性盒子的特点 弹性盒子是 CSS3 的一种新的布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当 ...
- CSS 浮动布局放弃float,拥抱flex(详解)
CSS 浮动布局放弃float,拥抱flex(详解) 文章目录 CSS 浮动布局放弃float,拥抱flex(详解) 说明 Flex布局 容器和项目 容器属性 flex-direction属性 fle ...
- python布局管理_Python基础=== Tkinter Grid布局管理器详解
本文转自:https://www.cnblogs.com/ruo-li-suo-yi/p/7425307.html @ 箬笠蓑衣 Grid(网格)布局管理器会将控件放置到一个二维的表 ...
- CSS 的弹性布局(flex) ,是什么?
一.弹性布局 是什么? 元素根据窗口大小变化而自动伸长或缩短,使得整个页面格式保持不变. 二.怎么使用? 1.使用方法 /* 1.父元素中增加 display 属性:*/ display: flex; ...
- 弹性布局(Flex布局)
弹性布局(Flex布局) 文章目录 弹性布局(Flex布局) 绪论 Flex布局是什么? Flex布局的基本概念 Flex容器的属性 以下六个属性设置在Flex容器上 flex-direction属性 ...
- (二)弹性布局Flex
弹性布局Flex 本周在逆战班学习了布局方面的知识,作为前端开发布局是最关键的,此文章用来写自己对弹性布局知识点的理解,和想法, 弹性布局分为两部分父元素和子元素,在父元素上设置弹性布局而控制子元素 ...
- Flutter: 弹性布局Flex(Expanded)、流式布局Wrap、Flow
用Android原生实现流式布局[实现例如app的很多标签]需要自定义View继承自ViewGroup,然后代码量也不小. 相关自定义View实现流式布局,请参考这位老兄的博客: https://bl ...
- CSS3多列布局 columns 弹性布局 flex
多列布局columns 多列布局可以控制页面内容的排版方式,可以将文本内容设计成像报纸一样的多列布局. 属性 示例 含义 column-count column-count: 3; 将元素内部分割成3 ...
最新文章
- linux 查找目录或文件详解
- 排序算法c语言和oc实现的,几种常用的排序算法,OC实现
- python自动测试p-python网络爬虫之自动化测试工具selenium[二]
- 增强学习(三)----- MDP的动态规划解法
- Gogland IDE Run/Debug Configurations 配置说明
- nodejs新建服务器
- 一些C和C++的常见问题集锦 ----不停更新
- linux只允许从ttyS0设备登录,linux自动以root登录,并自动启动用户程序的设置方...
- python 中文处理
- spring + hibernate + mysql 事务不回滚
- 如果你想成为一名黑客
- TIA WinCC Professional入门经典
- 各代iphone尺寸_iPhone所有机型对比尺寸
- veil-Evasion免杀使用
- 详细图解3阶段事务提交及单点故障和网络脑裂问题
- CF1633D Make Them Equal 题解
- 那些好用的iOS开发工具
- 令人炸毛儿的MySQL隐式转换 - 无形之刃,最为致命
- 中国数据中心IT基础设施第三方服务行业运行状况分析及未来发展趋势展望报告2022-2027年
- uboot2018.7以上版本bison报错