一文搞懂 flex 属性

本文详细介绍了Flex布局中的三个关键属性:flex-grow、flex-shrink和flex-basis,包括它们的作用、默认值以及如何影响子元素的扩展和收缩。通过具体的示例和计算公式,帮助读者深入理解这些属性在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. flex 属性简介

flex-grow:扩展子元素长度
flex-shrink:收缩子元素长度
flex-basic:设置子元素长度

flex-growflex-shrink 属性是基于父元素的长度进行计算的
flex-basic 实际上就是给子元素设定默认值,可以理解为直接他宽高设定默认值

建议概念比较模糊的同学先不要合起来使用 flex 属性,如 flex: 0 1 auto
因为拆分用对每个属性的用途会更加清晰

2. flex-grow 扩展比,默认值为0

扩展长度公式 = ( 父元素长度 - 所有子元素长度 ) / flex-grow 比值总数 * flex-grow

容器宽度为 800px,子元素 width 为 150px,一个有 4

  • 例子1
    flex-grow 比为 1 : 1 : 1 : 1 时
    扩展长度 = ( 800 - 600 ) / 4 * 1 = 50
    所以实际 flex子元素 宽度为 200px
    在这里插入图片描述
  • 例子2

    flex-grow 比为 1 : 2 : 3 : 4 时,flex-grow 比值总数 = 1+2+3+4 = 10
    扩展长度1 = ( 800 - 600 ) / 10 * 1 = 20
    扩展长度2 = ( 800 - 600 ) / 10 * 2 = 40
    扩展长度3 = ( 800 - 600 ) / 10 * 3 = 60
    扩展长度4 = ( 800 - 600 ) / 10 * 4 = 80
    所以实际 flex子元素 宽度为
    150 + 20 = 170
    150 + 40 = 190
    150 + 60 = 210
    150 + 80 = 230

    在这里插入图片描述

3. flex-shrink 扩展比,默认值为0

收缩长度公式 = abs( 父元素长度 - 所有子元素长度 ) / flex-shrink 比值总数 * flex-shrink

容器宽度为 800px,子元素 width 为 300px,一个有 4

  • 例子1
    flex-shrink 比为 1 : 1 : 1 : 1 时
    收缩长度 = abs( 800 - 1200 ) / 4 * 1 = 100
    所以实际 flex子元素 宽度为 200px
    在这里插入图片描述

  • 例子2
    flex-shrink 比为 1 : 2 : 3 : 4 时,flex-shrink 比值总数 = 1+2+3+4 = 10
    扩展长度1 = abs( 800 - 1200 ) / 10 * 1 = 20
    扩展长度2 = abs( 800 - 1200 ) / 10 * 2 = 40
    扩展长度3 = abs( 800 - 1200 ) / 10 * 3 = 60
    扩展长度4 = abs( 800 - 1200 ) / 10 * 4 = 80
    所以实际 flex子元素 宽度为
    300 - 40 = 260
    300 - 80 = 220
    300 - 120 = 180
    300 - 160 = 140

    在这里插入图片描述

  • 例子3
    当某一子元素 flex-shrink 比值过于大时,如 1:2:3:18
    该子元素计算得出 宽度 将趋近于0,flex布局就会按照该元素内容的宽度大小来设置其宽度,同时这个宽度也会影响到其他的 flex子元素
    假设这个 flex-shrink 为18的 flex子元素 内容宽度为18px
    300 - ( 800 - 1200 ) / 24 * 1 - 18 / ( 1 + 2 + 3 ) * 1 = 280.34
    300 - ( 800 - 1200 ) / 24 * 2 - 18 / ( 1 + 2 + 3 ) * 2 = 260.66
    300 - ( 800 - 1200 ) / 24 * 3 - 18 / ( 1 + 2 + 3 ) * 3 = 241
    在这里插入图片描述

4. flex-basic扩展比,默认值为0

  • flex-basic 值为auto时,按照 子元素 宽度来计算
    下面例子的第一个子元素内容为空,宽度没有设置,所以没有展示
    在这里插入图片描述
  • 子元素设置了 flex-basic 值,同时也设置了子元素 width,则按 flex-basic 值 计算
    下面例子 flex-basic 为150px, width 为160px,最终展示时150
    在这里插入图片描述
  • 设置了 flex-growflex-shrink,flex子元素实际宽度不会直接按 flex-basic 展示,会根据伸缩比计算再分配相应宽度
    下面例子 flex-basic 为150px,flex-grow为1,最终展示是经过扩展的
    在这里插入图片描述
  • 如 flex子元素 设置了 min-widthmax-width,当 flex-basic 值小于 min-width 则按照 min-width 值设置 flex子元素 宽度,同理 min-width 亦然
    下面例子第一个子元素 min-width 为180px,其他子元素 flex-basic 为150px
    在这里插入图片描述
    下面例子第一个子元素 max-width 为50px,其他子元素 flex-basic 为150px,flex-grow 为1
    在这里插入图片描述

文中的代码地址:https://codepen.io/davidwong9785/pen/KKpqRoo

本文参考自:https://zhuanlan.zhihu.com/p/50449041

<think>好的,我现在需要帮助用户解决如何将JCG Q30 Pro路由器OpenWRT固件的问题。首先,我要回顾用户提供的引用内容,尤其是引用[2]和[3],因为它们直接提到了机过程和相关固件。 用户的需求是详细的步骤,所以需要确保每一步都清晰。根据引用[2],JCG Q30 Pro机过程不需要拆机,直接通过原系统升级过渡固件,然后pb-boot或uboot,最后安装最终固件。引用[3]提到了一些具体的固件文件名和开发环境,可能需要确认用户是否需要特定的版本。 接下来,我需要将步骤分解成准备、过渡固件、引导程序、安装OpenWRT这几个部分。同时要注意不同批次的内存容量(256MB和512MB),确保用户检查自己的设备版本,避免错固件。 另外,需要提醒用户备份原厂固件,以防万一。在步骤中要强调通过SSH连接路由器,可能需要使用PuTTY或者终端。在写引导程序时,必须准确输命令,避免变砖。最后,要确认固件兼容性,可能需要参考引用[3]中的固件名称,比如openwrt-mediatek-mt7981-xxx.bin。 可能还需要警告用户操作风险,比如断电可能导致设备损坏,以及机后可能失去官方保修。此外,生成相关问题时要围绕机步骤、故障排除和固件选择展开,帮助用户进一步了解相关主题。</think>以下是为JCG Q30 Pro路由器OpenWRT固件的详细教程,结合设备特性和公开机方案整理: ### 一、机准备 1. 确认设备版本:查看路由器底部标签,新批次为512MB内存(建议优先选择237176253编译的固件),旧批次为256MB内存[^2] 2. 下载必要文件: - 过渡固件:`openwrt-mediatek-filogic-jcg_q30-pro-initramfs-recovery.itb` - 正式固件:选择MT7981平台适配的OpenWRT固件,例如`openwrt-mediatek-mt7981-jcg_q30-pro-squashfs-sysupgrade.bin`[^3] - SSH工具:PuTTY或Termius 3. 连接准备:用网线连接路由器LAN口与电脑,关闭防火墙/杀毒软件 ### 二、机步骤 1. **过渡固件** - 登录原厂后台:`192.168.10.1`,使用标签密码 - 进「系统升级」界面,上传过渡固件 - 等待自动重启(约3分钟),新IP变更为`192.168.1.1` 2. **引导程序** ```bash ssh root@192.168.1.1 # 默认无密码 mtd write /tmp/xxx/uboot.bin FIP # 替换为实际引导程序路径 ``` 注意:不同开发者提供的引导程序名称可能为`uboot.bin`或`pb-boot.bin`[^3] 3. **正式固件** - 按住RESET键通电,进引导程序恢复模式(LED快闪) - 访问`192.168.1.1`上传sysupgrade格式固件 - 等待自动完成(约5分钟) ### 三、兼容性说明 1. 无线驱动:支持MT7976DN+MT7916AN双频芯片组 2. 硬件加速:默认启用HNAT硬件转发,WAN-LAN吞吐量可达940Mbps+ 3. 存储方案:SPI NAND闪存适配良好,支持overlay扩容 4. USB功能:需自行编译添加相关驱动模块
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值