弹性盒子中的flex

news2024/11/27 6:20:41

flex属性是flex-growflex-shrinkflex-basis的缩写

flex是用在盒子中的子组件的,充分体现了弹性盒子的弹性二字。

例如现在的情况是:

<div class="container">
    <div class="item1">Item1</div>
    <div class="item2">Item2</div>
    <div class="item3">Item3</div>
</div>

在父容器container上开启盒子:

<style>
    .container{
         display: flex;
         width: 1000px;
    }
</style>

盒子使用默认方向,主轴是横轴,三个子组件由左到右依次排放。如果此时在子组件上设置了flex属性,那么在横向排放时,子组件的宽度会根据父组件的宽度产生合理的变化,以实现最充分利用父组件宽度的目的。以下都已宽度来说明一下flex-growflex-shrinkflex-basis的含义。

flex-basis表示了子组件本身(flex-basis设置为auto)或者主动要求的宽度值(一个具体的数字,例如200px,当然根据CSS规则也可以使用百分数例如20%)。

如果父容器在按照三个子组件的flex-basis安排完毕后,宽度仍然有富余,那么此时就意味着子组件可以在flex-basis的基础上变的更宽。那么三个子组件该如何按比例分配这些剩余的宽度,让自己变宽就取决于各自flex-grow的设定。

反之,如果父容器的宽度根本容纳不下三个子组件的flex-basis时,就意味着子组件要在flex-basis的基础上变的更窄。那么三个子组件该如何按比例变窄以弥补父容器在宽度上的“亏欠”,就取决于各自flex-shrink的设定上。

现在为子组件上添加flex属性:

<div class="container">
    <div class="item1">Item1</div>
    <div class="item2">Item2</div>
    <div class="item3">Item3</div>
</div>

<style>
    .container{
         display: flex;
         width: 1000px;
    }

    .item1 {
        height: 100px;
        width: 200px;
        flex: 2 1 0%;
        background:red;
    }

    .item2 {
        height: 100px;
        width: 300px;
        flex: 2 1 auto; 
        background:green;
    }

    .item3 {
        height: 100px;
        flex: 1 1 200px;
        background:blue;
    }
</style>

现在三个子组件的flex-basis是0%(也就是0px),auto(也就是自身宽度,300px)和200px,而父容器的宽度足足有1000px,也就意味着有500px的剩余,也就意味着三个子组件是可以变宽的,那么三个子组件该如何按比例来分配这500px呢?

第一个子组件要2份,第二个子组件要2份,第三个子组件要1份,所以第一个组件可以增宽200px,第二个子组件可以增宽200px,第三个子组件可以增宽100px。

最终,当三个子组件在父容器中呈现时,第一个子组件的宽度是200px,第二个子组件的宽度是500px,第三个子组件的宽度是300px。


那现在更改一下父容器的宽度,改成600px,那么按照上面的计算方式,最终三个子组件的宽度应该是:40px,340px和220px,那么实际渲染之后的尺寸确实如此吗?

 

可以看到,item1的宽度是43.98px,比计算值多了一些;而item2的宽度是337.34px,比计算值要少一些。

我们再把父容器的宽度修改一下,改成500px,那按照计算规则,三个子组件的宽度应该是0px,300px和200px:

 

可以看到,item1的宽度依然保持在43.98px,而item2的宽度此时已经开始shrink,只有273.61px了。 

所以,弹性盒子是有底线的,它的底线就是要保证子元素内容的展示。也就是说如果计算后宽度值小于子元素content的长度时,那么说明该子元素的初始flex-basis设置是不合理的,计算结果不能采纳,弹性盒子会放弃掉计算值而选用该子元素的conten宽度。

所以,在父容器长度为600px的情况,item1的放弃不合理的计算结果40px,采用content宽度43.98px。现在item1的盈余相当于比计算值多了3.98,那这3.98要按比例从item2和item3中扣除,才能保证总长度是600px,按比例,item2扣除3.98的2/3,item3扣除3.98的1/3。

在父容器长度500px的情况下,item1在保证43.98宽度的情况下,父容器反而是亏损的。这个亏损是因为item1的basis值设置不合理导致的。此时要重新计算item2和item3的长度,计算方式是将父容器剩余宽度按照item2和item3的basis比例进行宽度分配。所以,item2的宽度是(500-43.98)*3/5=273.61px,item3的宽度是(500-43.98)*2/5=182.41px。


除了显式的为flex属性赋三个值之外,flex属性的属性值还可以是:

  • flex:none
  • flex:auto
  • flex: 值1
  • flex: 值1,值2
  • 不设置flex属性

flex:none的含义是0 0 auto,意味着出现grow和shrink的情形时,都不会改变子组件的basis宽度。

flex:auto的含义是1 1 auto

flex只有1个值的时候,要看这个值是数字,是像素还是百分比。

如果是数字,则意味着flex:值1,值,0%

如果是像素或百分比,则意味着flex:1,1,值1

flex有两个值的时候,如果第二个值是数字,则意味着:flex:值1,值2,0%

如果第二个值是像素,则意味着flex:值1,0,值2。

不设置flex意味着使用flex的默认值,意味着flex:0,1,auto。


本文参考了:

Oh My God,CSS flex-basis原来有这么多细节

CSS flex属性深入理解

flex:1 和 flex:auto区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/615746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序码生成,扫码携带参数进入指定页面

一、准备工作 &#xff08;1&#xff09;微信小程序后台获取小程序的appId和secret 小程序后台管理&#xff08;开发管理➡开发设置&#xff09; &#xff08;2&#xff09;扫码跳转的页面在app.json中已经注册 注册的路径与传过去的路径一致 &#xff08;3&#xff09;小程序…

同步模式之犹豫模式Balking

tip: 作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 文章目录 一、同步模式之犹豫模式Balking二、代码样例三、优缺点 一、同步模式之犹豫模式Balking 同步模…

挤出泡沫、脱虚向实,AI大模型正在回归价值投资?

商品推荐、交通管理、生成文章、代码编程、电影特效制作……自ChatGPT横空出世以来&#xff0c;AIGC浪潮席卷全球&#xff0c;上下游产业链也因此大放异彩。 市场行情的高景气直观反映在股价上&#xff0c;无论AI公司是否盈利&#xff0c;其股价多呈上升趋势。一些与AI概念有所…

测试:用例篇

上一章讲述的是测试的基本概念。在我们开始做了一段时间基础测试&#xff0c;熟悉了业务之后&#xff0c;往往会 分配来写测试用例&#xff0c;并且在日常测试中&#xff0c;有时也需要补充测试用例到现有的案例库中 在开始之前先讲讲测试中经典的测试方法&#xff1a;黑盒测试…

【dc-dc】DC-DC恒流电源 车灯方案的应用

1,信息来源&#xff1a;深圳市世微半导体有限公司 Augus 2,产品描述 AP5103 是一款效率高&#xff0c;稳定可靠的 LED 灯恒流驱动控制芯片&#xff0c;内置高精度比较器&#xff0c;固定关断时间控制电路&#xff0c;恒流驱动电路等&#xff0c;特别适合大功率 LED 恒流驱动。…

[Kotlin] 玩Android代码学习之-模块化+Retrofit+协程+viewModel的数据层封装

文章目录 1:前言玩Android APP 源码本贴的目的参考贴 2: kotlin下的模块化(捎带一嘴)3:Retrofit协程viewModel3.1基础网络层搭建lib_home:Bannerlib_common: BaseResp lib_common:RetrofitManagerlib_home: HomeApi 3.2基础网络层接口测试3.3 基础网络层优化-koin依赖注入框架…

观澜最快的旧改项目之一,鸿荣源观城项目一期。

项目&#xff1a;观湖街道观城第一期城市更新单元位置&#xff1a;4号地铁观澜地铁站0距离 规模&#xff1a;拆除范围用地面积706094㎡ 面积&#xff1a;私信咨询价格&#xff1a;3.x万/平 开发商&#xff1a;鸿荣源 合同方案&#xff1a;直接开发商签合同 目前进度&#…

Scrapy 入门教程

Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯&#xff0c;信号、数据传递等。 Scheduler(调度器): 它负责接受引擎发送过来的Request请求&#xff0c;并按照一定的方式进行整理排列&#xff0c;入队&#xff0c;当引擎需要时&#xff0c;…

【CANN训练营机器狗系列】安装ROS环境及初体验

环境 操作系统&#xff1a;Ubuntu 20.04 CPU&#xff1a;Intel Xeon Gold 6278C CPU 2.60GHz 内存&#xff1a;16GB 准备环境 Ubuntu与ROS版本对应关系 UbuntuROS 1.0ROS2.016.04 LTSKinetic LTSArdent18.04 LTSMelodic LTSDashing LTS120.04 LTSNoetic LTSFoxy LTS 安装…

linorobot机器人-自动生成-不可用

好像还是比较混乱。 具体信息参考其官网。 https://linorobot.org/ Linorobot是一套开源的ROS兼容机器人&#xff0c;旨在为学生、开发者和研究人员提供一个低成本的平台&#xff0c;以便在ROS&#xff08;机器人操作系统&#xff09;的基础上创建新的激动人心的应用。Linor…

VMware(Ubuntu)共享文件夹设置

VMware共享文件夹设置 安装完成ubuntu虚拟机后&#xff0c;需要建立共享文件夹来方便在Host主机和虚拟机ubuntu之间分享文件。 在虚拟机设置中&#xff0c;在 选项 卡中找到 共享文件夹 项&#xff0c;在右侧添加共享文件夹。 在虚拟机中&#xff0c;在ubuntu终端中使用指令…

Three.js camera初探——转场动画实现

背景 首先简单介绍一下three.js&#xff0c;three.js是用javascript写的基于webGL的第三方3D库&#xff0c;通过它可以在网页中进行3D建模&#xff0c;结合上TweenMax.js动画库&#xff0c;在网页中实现3D动画效果就变得很简单了。 这是three.js建模的简单流程图例&#xff1…

基于B/S架构springboot框架开发的中小学智慧校园平台源码

一、智慧校园技术框架&#xff1a; 1、使用springboot框架Javavue2 B/S架构 2、JAVA语言数据库MySQL5.7 3、移动端小程序使用小程序原生语言开发 4、电子班牌固件安卓7.1&#xff1b;使用Java Android原生 5、elmentui &#xff0c;Quartz&#xff0c;jpa&#xff0c;jwt …

实现 Linux 视频会议(源码,支持信创环境,银河麒麟,统信UOS)

信创是现阶段国家发展的重要战略之一&#xff0c;面对这一趋势&#xff0c;所有的软件应用只有支持信创国产化的基础软硬件设施&#xff0c;在未来才不会被淘汰。那么&#xff0c;可以使用C#来实现支持信创环境的视频会议系统吗&#xff1f;答案是肯定的。 本文讲述如何使用C#来…

django 快速入门

快速开始 安装Django 首先安装Django包&#xff0c;现在Django已经到了2.0版本&#xff0c;如果还在使用1.11请尽快升级。旧版本以后只修复bug&#xff0c;不会添加新功能。 pip install django 复制 创建项目 Django安装好之后&#xff0c;会附带一个命令行工具django-a…

uCOSii_任务栈检测和任务栈清除

1、任务栈检测和任务栈清除 在创建任务时&#xff0c;也需要设置OSTaskCreateExt()传入opt参数。 当opt (INT16U)(OS_TASK_OPT_STK_CLR | OS_TASK_OPT_STK_CHK)&#xff0c;可以使用OSTaskStkChk()检查的任务栈的剩余空间&#xff0c;也可以使用OS_TaskStkClr()清除任务栈。 …

使用Graalvm+Swing搓了个原生桌面应用的轮子:文件差异对比工具,附轮子源码

文章目录 1、DFDiff介绍2、软件架构3、安装教程3.1、编译为jar包运行3.2、编译为原生应用运行 4、运行效果图5、项目源码地址 1、DFDiff介绍 当前已实现的功能比较两个文件夹内的文件差异&#xff0c;已支持文件差异对比。 2、软件架构 软件架构说明 开发环境是在OpenJDK17&…

docker 安装gitlab jenkins git maven

jenkins 配置git提示 问题1、Error performing git command: /usr/local/git ls-remote -h 问题2、stdout: stderr: Host key verification failed. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repositor…

【数据结构】一文带你掌握二叉树的构造与应用

文章目录 1. 构造二叉树2. 前序遍历2.1 前序遍历递归2.2 前序遍历非递归 3. 中序遍历3.1 中序遍历递归3.2 中序遍历非递归 4. 后序遍历4.1 后序遍历递归4.2 后序遍历非递归 5. 层序遍历6. 节点个数6.1 所有节点个数6.2 获得叶子节点个数 7. 检测值为value的元素是否存在8.总结 …

数据库SQL2000最基本的安装和操作教程

Chengg0769 2012年 转载请保留以下版权来源 www.mis2erp.com http://blog.csdn.net/chengg0769 http://www.haojiaocheng.cc 题外话&#xff1a; 之前写了一个项目&#xff0c;因为是国企&#xff0c;各种文档都要给到他们。当时就写了一个简单的维护管理SQL2000的文档。这…