flex弹性布局教程-05项目属性flex-shrink

2023-10-28

本节目标

  1. 掌握flex-shrink的使用,同flex-grow类似。
  2. 掌握flex-shrink缩小的计算公式(难点)。

内容摘要

本篇介绍了 flex-shrink 属性,flow-grow 用于放大,那么 flex-shrink 就是缩小了,其缩小规则和 flex-grow 类似。

阅读时间约10~15分钟,文字虽多,但主要都是例子。

flex-shrink基础

上面一节学习了 flex-grow,如果理解了,那么这节的 flex-shrink 就简单了。

简单的说 flex-grow 用于放大,那么 flex-shrink 就是用于缩小了,两个属性就是反过来,计算方式都类似。

放大是因为有剩余空间,缩小就是因为项目的宽度超过容器了,有一个超出空间,所以就要进行缩小。

超出空间计算方式:

所有项目的总大小 减去 容器大小

参考如下示例:
在这里插入图片描述
还记的 flex-basis 章节最后一个例子吗?

容器宽度为450px,三个项目各为200px,总宽超过容器了,就自动缩小了。不难计算,这里超出的空间就是 200px * 3 - 450px = 150px

语法格式:

.item {
	/* >=0 的数,默认值为 1 */
	flex-shrink: <number>; 
}

其中:

1. 默认值为1,表示所有项目等比例缩小。
2. 如果为0,那么表示不缩小。

缩小的尺寸计算方式和flew-grow类似,涉及到两个公式:

1)计算超出空间中多少用来压缩。

公式:超出空间 * ( 所有项目的flex-shrink之和 >= 1 ? 1 : 所有项目的flex-shrink之和 ) 。

如果没有超出空间,那么就用压缩了;如果超出空间为150px,所有项目的flex-shrink之和为0.6,那么90px用来压缩。

2)计算每个项目缩小多少空间。

公式:要压缩的空间 * ( 单个项目flex-shrink / 所有项目的flex-shrink之和 )

简单的说,就是按照 flex-shrink 占比进行缩小。

下面我们结合例子进行说明,对这边的计算公式进行理解。

示例1,设置项目的 flex-shrink 为0:

接上一篇例子,有一个div(容器,450px),容器内包含3个div(项目,flex-basis 为200px)。

.item {
	/* flex-basis属性定义了项目占据主轴空间(main size)大小。 */
	flex-basis: 200px;
	
	/* flex-shrink 属性定义项目的缩小系数 */
	flex-shrink: 0;
}

其中:

flex-shrink 为0表示不压缩项目。

运行效果:
在这里插入图片描述
可以看到item3项目那边超出了容器一截。

示例2,接上例,设置项目1、2、3的 flex-shrink 分别为0、1、2:

套公式计算:

1)计算超出空间中多少用来压缩。

要压缩的空间
 = 总超出空间 * ( 所有项目的flex-shrink之和 >= 1 ? 1 : 所有项目的flex-shrink之和 ) 。
 = 150px * ( 3 >= 1 ? 1 : 3)
 = 150px

2)计算每个项目缩小多少空间。

项目1压缩的空间
 = 150px * ( 0 / 3 )
 = 0

项目2压缩的空间
 = 150px * ( 1 / 3 )
 = 50px

项目3压缩的空间
 = 150px * ( 2 / 3 )
 = 100px

所以最终:项目1宽为200px、项目2宽为150px、项目3宽为100px。

写上代码看看效果:

.item {
	/* flex-basis属性定义了项目占据主轴空间(main size)大小。 */
	flex-basis: 200px;
}
		
.item1 {
	flex-shrink: 0;
}

.item2 {
	flex-shrink: 1;
}

.item3 {
	flex-shrink: 2;
}

运行效果:
在这里插入图片描述
观察运行效果,符合预期。

示例3:设置项目1、2、3的 flex-shrink 分别为 0.1、0.2、0.3:

这个示例和上例差不多,只是数字变成了小数,并且总和不大于1。

先套公式来计算一下:

1)计算超出空间中多少用来压缩。

要压缩的空间
 = 总超出空间 * ( 所有项目的flex-shrink之和 >= 1 ? 1 : 所有项目的flex-shrink之和 ) 。
 = 150px * ( 0.6 >= 1 ? 1 : 0.6)
 = 90px

2)计算每个项目缩小多少空间。

项目1压缩的空间
 = 90px * ( 0.1 / 0.6 )
 = 15px

项目2压缩的空间
 = 90px * ( 0.2 / 0.6 )
 = 30px

项目3压缩的空间
 = 90px * ( 0.3 / 0.6 )
 = 45px

所以最终:项目1宽为185x、项目2宽为170px、项目3宽为155px。

样式代码如下:

.item {
	/* flex-basis属性定义了项目占据主轴空间(main size)大小。 */
	flex-basis: 200px;
}

.item1 {
	flex-shrink: .1;
}

.item2 {
	flex-shrink: .2;
}

.item3 {
	flex-shrink: .3;
}

运行效果如下:
在这里插入图片描述
符合计算预期。

本节总结

  1. 项目的总大小超出容器部分成为超出空间。

  2. flex-shrink用于设置项目的缩小系数。

  3. 项目缩小尺寸计算包含两个公式:

1)计算超出空间中多少用来压缩。

公式:总超出空间 * ( 所有项目的flex-shrink之和 >= 1 ? 1 : 所有项目的flex-shrink之和 ) 。

2)计算每个项目缩小多少空间。

公式:要压缩的空间 * ( 单个项目flex-shrink / 所有项目的flex-shrink之和 )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flex弹性布局教程-05项目属性flex-shrink 的相关文章

  • 悬停时的 CSS 过渡

    我有个问题 实际上 当我将鼠标悬停在对象上时 我尝试在 div 上进行转换 所以基本上我有一个div 当我将鼠标悬停在div上时 它应该在其顶部显示另一个div 但是它应该被转换 这样悬停效果会更平滑 如果我有这两个 div 怎么可能 di
  • 深层嵌套 Flexbox 布局是否会导致性能问题?

    我一直在开发一个 ReactJS 项目 其中我使用 Flexbox 布局创建了大部分组件 由于使用 React 我们可以拥有深度嵌套的组件 因此我的布局具有嵌套的 Flexbox 布局 现在我的问题是 这对性能有任何问题吗 在一个页面上 有
  • 使用 ul 和 li 标签选择框

    我想插入 img 每个中的标签
  • 最大宽度不适用于弹性项目

    我有一列中有一个弹性容器和两个弹性子容器 顶部 div 应填充所有剩余空间 底部 div 的高度应由内容和max width 但底部 div 的宽度正在缩小到其内容的宽度 这max width正在被忽视 hero image min hei
  • 检测计算机是否可以正确支持 3D 变换

    当我检测到 webkit 时 我使用 3D Transforms 属性添加额外的样式表 尽管它在许多不同的计算机上运行良好 全部使用相同的 chrome 版本 有些无法正确渲染动画 这些是较旧的计算机 具有更便宜的显卡 我猜这就是导致问题的
  • 如何在html中创建字体选择栏

    我想创建一个下拉菜单 在其中我们可以看到所有可用的字体 并且可以选择我们选择的任何字体 我还想创建一个字体颜色选择小部件 存在大量的字体样式 我想知道如何获取所有这些字体以及如何创建一个小部件 用户可以使用该小部件选择他选择的颜色 为了创建
  • 名称属性的 CSS 选择器?

    这可能是一个愚蠢的问题 但是属性的 CSS 选择器是什么 a 那是 名字 document body innerHTML myString anchor HTML String 这段 JavaScript 创建了一个 a 带有名称的元素 H
  • 如何使CSS图像溢出其所在的div

    我在 css 中输入了一个图像 代码如下 imgtemp float right top 0px left 0px overflow visible width 100 我还在页面中添加了 div 标签 以便其显示 但由于设计原因 图像比
  • 父级 div 未扩展到子级的高度

    正如你将看到的 我有一个div innerPageWrapper 包围包含内容的 div innerPageWrapper在视觉上也确实充当布局中的半透明边框 我的问题是 innerPageWrapper不会扩展以容纳内部的子元素 更不用说
  • CSS精灵什么时候适合使用,什么时候不适合使用?

    CSS精灵在什么情况下适合使用 什么时候不适合使用 是节省时间还是仅节省服务器请求 我认为带宽使用将是相同的 因为图像与大图像相同 但它是在一个部分中 何时何地使用 css sprite 是节省时间 工作中 的选择 对于导航来说 它有利于翻
  • React 嵌入脚本标签不可样式化

    我打算将 SurveyMonkey 调查嵌入到我的网站中 用 React 制作 只是让它工作起来很麻烦 但最终这段代码工作了 let script let extractScript
  • 使用 Node-sass 缩小 CSS

    我在 NodeJS 项目中使用 SCSS 并让我的脚本使用以下命令将所有单独的 SCSS 文件转换为单个 CSS 文件 node sass w public css scss style scss public css style css
  • 如何使用 JavaScript 隐藏滚动条

    怎样才能隐藏滚动条呢 我想这样做是因为滚动条不太好 overflow hidden没有用 因为我的 div 元素还有许多其他元素 所以设置overflow不能解决我的问题 你可以用这个隐藏滚动条 document body style ov
  • CSS - 设计类样式的不同方法

    阅读下面的 CSS 代码我想知道 a 和 b 之间有什么区别 第一个声明是一种好的样式方式吗 a round box icon b round box icon 使用 A 您选择具有 2 个类的所有元素 同时 使用 B 您选择所有具有类 r
  • 如何替换通过 JS 显示的图像?

    我想嵌入 Wanelo 的分享按钮 这是嵌入代码 a class wanelo save button href wanelo com a 当我嵌入它时 我得到这个按钮 我想用他们的图标替换该按钮 如下所示 作为 JS 的新手 我无法理解如
  • Safari 中透明颜色会发生什么情况?

    有一个块 其中接近末尾的文本逐渐消失 这是使用以下方法完成的 after 给定linear gradient从透明色到背景色 最近注意到 在当前版本的浏览器中 除了 safari 之外 一切都很好 在第 11 版中 情况太糟糕了 Autop
  • CSS/html - 使页脚仅在滚动后可见?坚持到可见页面区域下方的底部吗?

    好的 我已经完全按照这个链接进行操作 并试图实现稍微改变的效果 https css tricks com snippets css sticky footer https css tricks com snippets css sticky
  • CSS 中“body > *”是什么意思?

    我试图了解 jQTouch 实现的 CSS 效果 http www jqtouch com http www jqtouch com 它有一些 CSS 定义 其中包含如下语法body gt body gt webkit backface v
  • 如何解决输入字段上的错误行高?

    如何为具有固定高度的输入字段提供其所包含文本的跨浏览器垂直对齐方式 截至目前看来line height是我最好的选择 但是 在 Chrome 或 Safari 等 webkit 浏览器上 复制 粘贴时光标会跳至顶部对齐 我注意到 WordP
  • 用左div填充剩余空间

    谁能告诉我如何让左侧 div 填充剩余空间 而不固定右侧 div 大小 我想要与以下示例完全相反的内容 left float left border 1px solid blue right overflow hidden border 1

随机推荐

  • GitLab服务器修改管理员用户root密码

    我们搭建好GitLab服务 打开页面后 需要输入用户名密码 但它们是什么呢 初始管理员用户为root 密码在安装过程中已随机生成并保存在 etc gitlab initial root password中 有效期24小时 我们可以自己去查找
  • 【知网研学】使用方法

    目录 前言 一 下载知网研学途径 二 使用步骤 1 导入文档 2 论文内笔记标记 3 对论文内容复制 说明 前言 注 本文对 知网研学 该软件的使用方法包括下载 导入文档 编辑论文等的详细解说 一 下载知网研学途径 1 浏览器搜索进行下载
  • 入门FFmpeg编程 --Android

    1 前言 FFmpeg是一个强大的音视频处理库 但是通常接触时以命令形式较多 本篇文章讲了FFmpeg相关api的使用 尤其是它强大的过滤器filter库的使用 1 1 能学到什么 Android下集成FFmpeg 使用avcodec解码库
  • 如何辨别ChatGPT是不是真的

    随着ChatGPT爆红 国内陆续出现了几个所谓的 ChatGPT 反向代理站点 乍一试回答似乎还挺靠谱 但它们真的是ChatGPT吗 本文以其中一个站点为例 对其真伪进行辨别 其实最多只需要问两个问题 基本上就可以做出判断了 1 你是谁 2
  • 为什么说区块链共享的不仅仅是数据?

    数据共享是人与生俱来的需求 比如 在咖啡馆谈人生理想 执笔书写文字等等 这些都是普通人用来和他人交流信息的重要方式 互联网的出现 打破了数据共享在地域和时间方面的限制 它可以让不同人在地球的不同位置进行即时交流 电子邮件 网上即时通讯等技术
  • 单片机及C语言入门

    一 什么是单片机 将CPU芯片 存储器芯片 I O接口芯片和简单的I O设备 小键盘 LED显示器 等装配在一块印刷电路板上 再配上监控程序 固化在ROM中 就构成了一台单片微型计算机 简称单片机 由于单片机在使用时 通常处于测控系统的核心
  • go+gSoap+onvif学习总结:7、进行镜头调焦、聚焦和预置点的增删改查

    cgo gSoap onvif学习总结 7 进行镜头调焦 聚焦和预置点的增删改查 文章目录 cgo gSoap onvif学习总结 7 进行镜头调焦 聚焦和预置点的增删改查 1 前言 2 gSoap生成c代码框架 3 完成c代码实例并测试
  • 接口测试小知识

    1 什么是接口 电脑 USB 投影仪等 数据传输 软件 统称为API application program interface 支付宝支付 微信提现和充值 银联支付接口 鉴权码 token key appkey 接口包括 内部接口和外部接
  • deblurGAN-v2 去模糊深度学习算法。

    https blog csdn net weixin 42784951 article details 100168882 论文 https arxiv org pdf 1908 03826 pdf 代码 https github com
  • 算法基础课:第二讲——数据结构

    文章目录 单链表 算法思想 注意点 模板 例题 AC代码 双链表 算法思想 注意点 模板 例题 AC代码 栈 算法思想 模板 例题 AC代码 队列 算法思想 模板 例题 AC代码 单调栈 作用 算法思想 模板 例题 AC代码 单调队列 作用
  • Java中灵活获取excel中的数据

    在java当中获取excel数据 获取每一列数据 每一行数据 在这里例子是将每一行数据获取出来 并带着表头数据返回 代码 具体实现逻辑在代码注释当中可以参见 public static List
  • 杨桃的Python进阶讲座16——数组array(六)一维数组和二维数组的索引和取值(配详细图解)

    本人CSDN博客专栏 https blog csdn net yty 7 Github地址 https github com yot777 在进阶讲座8中讲过数组 矩阵 的维度 我们再看看多维矩阵的索引和取值方法 一维数组的索引和取值 和列
  • C语言计算两个整数之和

    要求输入2个整数A和B 然后输出它们的和 输入格式 输入在一行中给出整数A和B 输出格式 输出A B的值 输入样例 在这里给出一组输入 例如 3 5 结尾无空行 输出样例 在这里给出相应的输出 例如 8 结尾无空行 include
  • 简析 JavaScript报错 Uncaught TypeError Cannot read properties of null (reading ‘...‘) at new

    JS报错 如下图 报错原因 引入JS的位置错误 为什么位置错误 JS 在页面渲染 生成 之前就执行了代码 发现获取不到页面元素 解决方法 放到页面代码下面 body内部或者下部 随意吧
  • Python爬虫从0到1(完结篇)——增量式爬虫

    本篇是基础爬虫专栏的最后一篇文章 有关进阶爬虫技术的内容现已开始更新 但不会每一篇都会在此处发布 有需要的可直接加群了解 废话不多说 直接进入今天的文章内容 增量式爬虫 基本定义 增量式爬虫就是一个能够在网站原有数据的基础上采集最新公开的一
  • 玩转Java IO流:轻松读写文件、网络

    申明 本人于公众号Java筑基期 CSDN先后发当前文章 标明原创 转载二次发文请注明转载公众号 另外请不要再标原创 注意违规 字符流和字节流 在Java中 IO 输入输出 操作涉及字符流和字节流 它们是两种不同的抽象类 用于处理不同类型的
  • Head Pose系列

    BIWI数据集 下载kinect head pose db tgz 解压如下 hpdb 01 depth cal rgb cal frame 00003 depth bin frame 00003 pose txt frame 00003
  • windows环境下启动和配置nacos最全流程

    一直在用nacos 作为配置中心和服务管理中心 但是nacos服务自己没有部署过 在看了nacos的架构以后 自己决定动手部署下 官网上提供了linux window docker环境部署文档 感觉很简单 按照文档操作一遍发现 启动不了 后
  • R语言中插补缺失值的R包simputation

    R语言中有很多插补缺失值的R包 但是这些R包的使用语法都不一样 不利于学习和记忆 simputation包旨在简化缺失值插补的流程 提供了统一的使用语法 提供多种常见的插补缺失值的方法 可以和管道符 gt 连用 非常值得学习 这个包和之前介
  • flex弹性布局教程-05项目属性flex-shrink

    本节目标 掌握flex shrink的使用 同flex grow类似 掌握flex shrink缩小的计算公式 难点 内容摘要 本篇介绍了 flex shrink 属性 flow grow 用于放大 那么 flex shrink 就是缩小了