Flex布局的三个属性要深刻理解!

在我们日常开发中,flex布局可以说是家常便饭,对于很多的我们来说(你懂得_),可能我们用的比较多的应该就是垂直居中里,也就是下面这段代码:

.flex-box{display: flex;justify-content: center;align-items: center;
} 

写的非常好(_)!然后我们都知道这个是定义在父元素的,布局效果是在子元素生效的!对吧!但是我们有没有想过这样的问题?

  • 假如所有子元素宽度之和大于父元素的宽度时,这时候的子元素会如何变化?
  • 假如所有子元素宽度之和小于父元素的宽度时,这时候的子元素又会如何变化?

我们先不管这两个问题是怎么样,又是怎么解决的!我们先来了解一下flex-growflex-shrinkflex-basis这三个元素是个啥,又是怎么用,下面我们一起来学习学习!

1 flex-grow

  • flex-grow:grow的中文意思是扩大,用来分配父元素剩余空间的相对比例。默认值为0。我们先看一个例子:
/* 父元素 */
.flex-box{display: flex;width: 300px;height: 300px;margin:0 auto;background-color: #000;
}

/* 子元素left */
.left{flex-grow: 1;width: 100px;background-color: orange;
}
/* 子元素right */
.right{flex-grow: 0;width:100px;background-color: cyan;
} 

上面我们可以看出子元素left和right的宽度之和为200px,而父元素宽度为300px,也就是说父元素还有空余空间,而真正的效果如图所示。

/* 子元素left */
.left{...flex-grow: 3;...
}
/* 子元素right */
.right{...flex-grow: 1;...
} 

这样处理的话也就是剩余空间按照left:right为3:1处理,多出来的空间:300px-(100px+100px)=100px;left的宽度:100px+100px*(100px*3/(100*3+100*1)) = 175px;right的宽度:100px+100px*(100px*1/(100*3+100*1)) = 125px;这就解析了当所有子元素宽度之和小于父元素宽度之和时,子元素如何处理?这个问题了。

注意地,如果所有子元素的flex-grow的值是一样的话,那么剩余空间就按照平均分配。

2 flex-shrink

  • flex-shrink:shrink的中文意思是收缩,用来指定flex元素的收缩规则。默认值为1。我们先看一个例子:
/* 父元素 */
.flex-box{display: flex;width: 300px;height: 300px;...
}
/* 子元素left */
.left{flex-shrink: 3;width: 200px;background-color: orange;
}
/* 子元素right */
.right{flex-shrink: 1;width:200px;background-color: cyan;
} 

3 flex-basis

  • flex-basis:basis的中文意思是基准,用来指定子元素内容盒尺寸大小。默认值为auto。我们先看一下下面这个例子:
 .flex-box{display: flex;width: 300px;height: 300px;margin:0 auto;background-color: #000;}.left{width: 200px;flex-basis: 100px;background-color: orange;}.right{width:100px;background-color: cyan;} 
  • flex-grow:值大于0,主要是解决父元素宽度大于所有子元素宽度之和时,子元素合理分配父元素剩余空间。值为0时,子元素盒子空间不做扩大处理。
  • flex-shrink:值大于0,主要是解决父元素宽度小于所有子元素宽度之和时,子元素缩小宽度以适应父元素宽度,值为0时,子元素盒子空间不做缩小处理。
  • flex-basis:其实也可以理解为在flex布局下,一个高优先级的宽度

4 结合flex属性使用

除了上面各自分开使用这三个属性,还可以盒子一起使用也就是:

flex:flex-grow flex-shrink flex-basis;
/*记忆法:g(拱)s(?)b(?)后面两个字懂了吧^_^*/ 

flex属性可以灵活处理这三个属性,可以单值、双值处理,这样的话,flex属性分别代表什么?

  • 当flex为单值时,可代表一个无单位数(默认为flex:number 1 0;)、一个有效宽度值(flex:100px,即是flex-basis)、或者特殊值(none、auto、initial)

none:元素会根据自身宽高来设置尺寸。它是完全非弹性的:既不会缩短,也不会伸长来适应 flex 容器。相当于将属性设置为flex: 0 0 auto

auto:会伸长并吸收 flex 容器中额外的自由空间,也会缩短自身来适应 flex 容器。这相当于将属性设置为 flex: 1 1 auto

initial:它会缩短自身以适应 flex 容器,但不会伸长并吸收 flex 容器中的额外自由空间来适应 flex 容器。

  • 当flex为双值时,第一个数必须为无单位数(代表flex-grow)、第二个数为一个无单位数(flex-shrink)或一个有效宽度(flex-basis)

5 一道笔试题

  • 以下布局在页面上的宽度比是?
/*父元素*/
.flex{display: flex;width: 200px;height: 100px;margin:0 auto;background-color: #000;
}

/*子元素*/
.left{flex:3 2 50px;background-color: orange;
}

/*子元素*/
.right{flex:2 1 200px;background-color: cyan;
} 

从上面我们可以看到子元素的flex值太复杂,其实我们可以先不看前面两值,先看最后一值(flex-basis)。如果所有子元素的flex-basis之和小于父元素之和考虑第一个值,如果所有子元素的flex-basis之和大于父元素之和考虑第二个值。上面所有子元素宽度50px+200px=250px大于父元素宽度200px,所以考虑第二个值也就是子元素left和子元素right的flex-shrink属性比2:1,超出部分50px这样处理left的宽度缩小为:50px-50px*(50px*2/(50px*2+200px*1)) = 33.34;right的宽度为:200px-50px*(200px*2/(50px*2+200px*1)) = 166.66。 所以上面题目答案为33.34:166.66 = 1:5

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

web老猴子
关注 关注
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【白嫖党】如何把前端学好?看完这篇,直呼:太强了!(历经半个月之作)
超逸の学习技术博客
04-04 2万+
很少有文章做到将知识形成一个体系,于是需要翻阅很多资料,但这篇文章做到了!共34815字数。
页面布局--三栏布局左右固定中间自适应
qq_26702033的博客
03-12 434
题目:假设高度已知,请写出三栏布局,其中左栏、右栏宽度各为300px,中间自适应: 解决方案: 1.浮动布局; 2.绝对定位; 3.flexbox布局; 4.表格布局 tablecell属性; 5.grid网格布局; 样式 <style media="screen"> html *{ padding: 0; margi...
flex三个参数:flex-grow、flex-shrink、flex-basis
热门推荐
潮汐未见潮落的博客
08-09 1万+
flex三个属性介绍
详解CSS中的flex容器与flex属性
12-13
flex container(flex容器 或 弹性容器) flex容器是flex元素的的父元素。 通过设置display 属性flex 或 inline-flex定义。 注旧版本的属性: box:将对象作为弹性容器显示。(最老版本)inline-box:将对象作为内联块级弹性容器显示。(最老版本)flexbox:将对象作为弹性容器显示。(过渡版本)inline-flexbox:将对象作为内联块级弹性容器显示。(过渡版本)flex item(flex子元素 或 弹性子元素) flex容器的每一个子元素均为一个flex子元素。注意:felx容器直接包含的文本变为匿名的弹性子元素。 注意:
少小白学前端——css篇(flex布局)
最新发布
Another_World_Naraku的博客
07-31 1991
其中,采用该样式的元素被称为容器(container),而它的子元素则称为item。容器上默认有两根轴线:水平的主轴(main axis)和垂直的交叉轴(cross axis),子元素item则根据轴线排列。
flex三个属性
土匪丁的博客
02-28 5097
flex:flex-grow flex-shrink flex-basis flex-grow:定义放大比例,默认为0,规定项目相对于其他灵活的项目进行扩展的量 flex-shrink:定义了项目的缩小比例,仅在宽度之和大于容器的时候才会发生收缩,其收缩的大小是依据 flex-shrink 的,默认为1 flex-basis:给上面两个属性分配多余空间之前, 计算项目是否有多余空间, 默认为 auto, 即项目本身的大小 说起来听拗口也不怎么好理解,直接上代码吧! 示例1: 子元素都设置为f.
flex三个属性
weixin_42117093的博客
06-17 2218
link
flex三个属性
weixin_30514745的博客
10-05 748
(1)flex-grow;指的是相对于其他的子元素的扩展比率;默认为0;数字 (2)flex-basis;指的是子元素的具体长度;可以为长度(rem,px,em)也可以为百分比; (3)flex-shink;指的是相对于其他元素的收缩比率;默认为0;数字 以上三者均是按父容器的大小划分; 正常情况设置flex:1;表示该子容器等于父容器的1倍,当没有别的子元素时,此时二者大小相等。若有...
flex布局 保姆级入门教程
qq_43440751的博客
04-19 446
1.flex布局与传统布局 1.传统布局:兼容性好,布局繁琐,有一定局限性,不能再移动端良好布局 2.flex弹性布局:布局简单,移动端应用广泛。PC端浏览器支持情况较差 2.flex布局原理 1.flexflexible Box的缩写,意味“弹性布局”,用来为盒装模型提供最大的灵活性,任何一个容器都可以指定为flex布局。当我们为父盒子设定flex布局以后,子元素的float,clear和vertical-align属性将失效 2.采用flex布局的元素称为Flex容器,它的所有子元素自动成为容器成员,
前端系统复习之页面布局篇(居中问题,三栏布局,圣杯双飞问题)
李天下
09-04 607
一.圣杯看本人的这篇文章 https://blog.csdn.net/xuehangongzi/article/details/80783430 二.居中问题 转载:【基础】这15种CSS居中的方式,你都用过哪几种? 简言 CSS居中是前端工程师经常要面对的问题,也是基本技能之一。今天有时间把CSS居中的方案汇编整理了一下,目前包括水平居中,垂直居中及水平垂直居中方案共15种。如有漏掉的...
React Native 入门(九) - Flexbox 弹性盒子布局
王小北的技术博客
10-27 1645
当前 RN 版本:0.49 操作环境:Windows 10 React Native 使用 Flexbox 的规则来指定某个组件的子元素的布局方式,这种方式可以在不同屏幕尺寸的设备上提供一致的布局结构。React Native 中的 Flexbox 的工作原理和 web 上的 CSS 存在一定的差异:在 RN 中 flexDirection 的默认是 column 而不是 row,而且
flex三个参数 flex:1 0 auto
seimeii的博客
05-18 1029
flex三个参数 flex:1 0 auto
flex三个属性grow、shrink、basis
weixin_50723416的博客
03-23 301
个人理解 flex-grow:0; 默认为0,容器中项目没有占满时,不分配剩余空间。 flex-shrink:1; 默认为1,容器中项目超出容器大小时,把项目平均压缩到容器内。 flex-basis:auto; 默认为auto,定义容器中项目的占据空间,一般用百分数设。 ...
flex属性
弋小生的博客
12-26 397
flex属性flex三个属性代表什么?
weixin_56004744的博客
12-08 1849
flex 属性flex-grow、flex-shrink 和 flex-basis 属性的简写属性.
flex三个参数
LRQQHM的博客
06-26 443
flex-basis 属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。它的默认为auto,即项目的本来大小。grow 如果为0 存在剩余空间不会放大也不会缩小 shrink缩小 如果为0子元素不会缩小如果为1父元素如果有其他的子元素加上该子元素超出了父元素的宽度,子元素会缩小。flex-grow 属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。只要不为0就会占用剩余空间。flex-shrink 属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
Flex弹性布局(一)——三个参数
qq_47200594的博客
10-19 4162
FlexFlexible Box的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为Flex布局。 在使用Flex布局时要先定义该盒子为Flex布局,有两种表现方式: 第一种(直接在div上设置样式) <div style="display:flex;margin: auto;width:400px;height:6rem;border: 0.1rem solid black"> <div style="flex: 3 0 200px
写文章

热门文章

  • Canvas详解 39180
  • SSM框架整合思想及步骤 12131
  • 一文了解 requestAnimationFrame 10467
  • JavaScript之DOM常用属性及方法详解 8126
  • 讲讲vue3下会造成响应式丢失的情况 8027

最新评论

  • V8引擎之JavaScript如何执行(二)

    Eddie_Xuu: 看到第三行,编译那里有点问题吧? 执行上下文包括全局和函数,这些是执行时才会创建并压入执行栈的,并不是编译的时候就生成的

  • 10000000条数据循环怎么优化?

    执笔经年855: 就你这样的还收费呢,痴心妄想。掉钱眼里了吧

  • Flex布局的三个属性要深刻理解!

    纯棉的羊: 博主的微信加不上,想要文档

  • Flex布局的三个属性要深刻理解!

    纯棉的羊: 我也是看了半天,就是没对

  • Any to Any 实时变声的实现与落地丨RTC Dev Meetup

    2301_80257544: 实时变声功能非常适合当前我们的项目。请问demo出来了吗?我想感受一下

最新文章

  • CTF竞赛密码学之 LFSR
  • CTF REVERSE练习之病毒分析
  • CobaltStirke BOF技术剖析(一)|BOF实现源码级分析
2023年100篇
2022年260篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家山东艺术商场美陈供货商福建玻璃钢动物雕塑丹阳美陈商场布置天水彩色玻璃钢雕塑制作宁波玻璃钢仿铜雕塑制作玻璃钢雕塑打的腻子是原子灰吗密云玻璃钢海洋雕塑蒙自玻璃钢烤漆雕塑厂家奎文玻璃钢造型雕塑重庆树脂玻璃钢雕塑摆件果洛价位合理的玻璃钢雕塑工程贵州抽象玻璃钢雕塑宁陵玻璃钢雕塑黑龙江佛像玻璃钢雕塑哪家便宜宁波玻璃钢雕塑优势玻璃钢仿石雕塑商场中庭新年美陈南宁环保玻璃钢雕塑优势树脂雕塑是不是玻璃钢的郑州美盛商场陈寨玻璃钢雕塑的玻璃钢饼干雕塑亳州卡通玻璃钢雕塑昆明玻璃钢雕塑生产商北京商场美陈市场价动物玻璃钢雕塑厂家定制商洛玻璃钢游乐场门头雕塑贵州玻璃钢小羊动物雕塑定制句容玻璃钢马雕塑四川主题商场美陈厂家供应香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化