flex-grow 属性深入探讨

2024-03-08 20:30
文章标签 属性 flex grow 深入探讨

本文主要是介绍flex-grow 属性深入探讨,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

flex-grow 不易理解,难道不是吗?
深入理解css3中的flex-grow、flex-shrink、flex-basis
写给自己看的display: flex布局教程
Flex 布局教程:语法篇


一开始学习 flex-grow 时,相信大家都是从这样一个经典例子入门的:

 

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

 

看到这个通俗易懂的解释,我一下就明白了:flex-grow 不就是按比例分嘛,只有这个是 2 份,其他都是 1 份,它占的当然是其他的 2 倍啦。get,flex-grow 真简单!

 

这种简单粗暴的理解并没有维持多久,因为我很快就遇到了这种情况:

 

???为什么 1 份的占的空间比 2 份的还多

 

看一下 CSS 代码,有一些不同:

 

.fix-basis-object {width: 100px;flex-grow: 1;
}

 

这时注意再回头看,为元素分配的是剩余空间

 

剩余空间就是父容器在主轴的方向上还有多少可用的空间。在上面的例子里,flex-grow 为 2 的元素设置了 width,已经占据了一部分主轴空间,而除开它所占据的这一部分,才是剩余空间,flex-grow 再把这个剩余空间按份数分配到每个 flex-grow 属性不为 0 的元素头上。

 

为元素按比例分配剩余空间


 

看到这里我觉得我的理解已经差不多了,也就那么回事,get,flex-grow 真简单!

 

我就带着这样的理解用了比较长时间的 Flex,也没碰到过什么问题。直到我看到了一个利用 flex-direction: column + flex-grow: 0.5 垂直居中的方法:

 

.container {height: 40px;flex-direction: column;background: #DDD;&::before {content: '';flex-grow: 0.5;}.object {width: 30px;height: 30px;background: #FFF;}
}

 

如果按照经验判断,flex-grow 为 0.5 的元素是独一份,它应该独占剩余空间啊,为什么会只占剩余空间的一半呢?flex-grow: 0.5 到底指什么?很多文档都只解释了 flex-grow 大于 1 的情况,小于 1 的情况很少提及。

 

实际上,flex-grow 的完整规则应该是这样的。

 

flex-grow 不支持负值,默认值是 0,表示不占用剩余空间来扩展自己的宽度。如果 flex-grow 大于 0,则 flex 容器剩余空间的分配就会发生:

 

  1. 如果只有一个 flex 元素设置了 flex-grow 属性值:
    a. 如果flex-grow值小于1,则分配给它的是总剩余空间和这个比例的计算值。例如一个 0.5 的元素能分到一半的剩余空间。
    b. 如果flex-grow值大于1,则独享所有剩余空间。
  1. 如果有多个 flex 元素设置了 flex-grow 属性值:
    a. 如果 flex-grow 值总和小于1,则分配给元素的是总剩余空间和当前元素设置的 flex-grow 比例的计算值。例如一个 0.1 和一个 0.2 的元素,只能分别分到 1/10 和 2/10 的剩余空间,剩下的剩余空间并不会分配给它们。
    b. 如果 flex-grow 值总和大于1,则所有剩余空间被利用,分配比例就是 flex-grow 属性值的比例。

 

这就是 flex-grow 机制的全部真相,了解了这些规则之后再回头看,其实 flex-grow 确实还是很简单。现在我觉得我终于可以放心大胆地对 flex-grow 敲出 ez 了,get,flex-grow 真简单!


附:flex-shrink 的完整规则,和 flex-grow 相似,只是尺寸缩小

 

  1. 如果只有一个 flex 元素设置了 flex-shrink:
    a. flex-shrink 值小于1,则收缩的尺寸不完全,会有一部分内容溢出 flex 容器。
    b. flex-shrink 值大于等于1,则收缩完全,正好填满 flex 容器。
  1. 如果多个 flex 元素设置了 flex-shrink:
    a. flex-shrink 值的总和小于1,则收缩的尺寸不完全,每个元素收缩尺寸占“完全收缩的尺寸”的比例就是设置的 flex-shrink 的值。
    b. flex-shrink 值的总和大于1,则收缩完全,每个元素收缩尺寸的比例和 flex-shrink 值的比例一样。

这篇关于flex-grow 属性深入探讨的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/788303

相关文章

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

深入探讨Java 中的 Object 类详解(一切类的根基)

《深入探讨Java中的Object类详解(一切类的根基)》本文详细介绍了Java中的Object类,作为所有类的根类,其重要性不言而喻,文章涵盖了Object类的主要方法,如toString()... 目录1. Object 类的基本概念1.1 Object 类的定义2. Object 类的主要方法3. O

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

深入探讨:ECMAScript与JavaScript的区别

在前端开发的世界中,JavaScript无疑是最受欢迎的编程语言之一。然而,很多开发者在使用JavaScript时,可能并不清楚ECMAScript与JavaScript之间的关系和区别。本文将深入探讨这两者的不同之处,并通过案例帮助大家更好地理解。 一、什么是ECMAScript? ECMAScript(简称ES)是一种脚本语言的标准,由ECMA国际组织制定。它定义了语言的语法、类型、语句、

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d

Python中的属性装饰器:解锁更优雅的编程之道

引言 在Python的世界里,装饰器是一个强大的工具,它允许我们以一种非侵入性的方式修改函数或方法的行为。而当我们谈论“属性装饰器”时,则是在探讨如何使用装饰器来增强类中属性的功能。这不仅让我们的代码更加简洁、易读,同时也提供了强大的功能扩展能力。本文将带你深入了解属性装饰器的核心概念,并通过一系列实例展示其在不同场景下的应用,从基础到进阶,再到实际项目的实战经验分享,帮助你解锁Python编程

react笔记 8-17 属性绑定 class绑定 引入图片 循环遍历

1、绑定属性 constructor(){super()this.state={name:"张三",title:'我是一个title'}}render() {return (<div><div>aaaaaaa{this.state.name}<div title={this.state.title}>我是一个title</div></div></div>)} 绑定属性直接使用花括号{}   注

ConstraintLayout布局里的一个属性app:layout_constraintDimensionRatio

ConstraintLayout 这是一个约束布局,可以尽可能的减少布局的嵌套。有一个属性特别好用,可以用来动态限制宽或者高app:layout_constraintDimensionRatio 关于app:layout_constraintDimensionRatio参数 app:layout_constraintDimensionRatio=“h,1:1” 表示高度height是动态变化

Python中的私有属性与方法:解锁面向对象编程的秘密

在Python的广阔世界里,面向对象编程(OOP)是一种强大而灵活的方法论,它帮助我们更好地组织代码、管理状态,并构建可复用的软件组件。而在这个框架内,私有属性与方法则是实现封装的关键机制之一。它们不仅有助于隐藏类内部的具体实现细节,还能保护数据免受外部干扰。今天,让我们一起探索Python中私有属性与方法的魅力所在,了解它们如何在实际开发中发挥重要作用。 引言 随着软件系统变得越来越复杂,维