一文搞懂 flex 属性

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

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

### 推荐算法概述 推荐系统旨在预测用户的兴趣并向用户提供个性化的建议。这类系统广泛应用于电子商务、社交媒体以及娱乐行业等领域,帮助用户发现感兴趣的商品或内容。为了构建有效的推荐引擎,通常采用三种主要类型的推荐技术:基于内容的过滤(Content-based Filtering),协同过滤(Collaborative Filtering),混合模型(Hybrid Models)[^4]。 #### 协同过滤原理 在众多推荐算法中,协同过滤是最常用的一种方法之一。其核心思想在于利用大量其他用户的行为数据来进行个性化推荐。具体来说,如果两个用户在过去表现出相似的兴趣偏好,则认为他们在未来也会有类似的喜好;同样地,对于同一类商品而言,被一群具有相同品味的人所喜爱意味着这些产品之间存在关联性[^4]。 ##### 用户-项目矩阵(U-V矩阵) 以视频平台为例,可以建立一个二维表格形式的关系结构——用户-视频矩阵(User-to-Item Matrix),其中每一行代表一位特定观众的历史观看记录,而每列则对应不同影片的信息。当面对稀疏的数据集时,可以通过填充缺失值或者仅保留评分较高的条目等方式简化处理过程。 ##### 计算相似度 针对上述提到的两种情况(即寻找相似用户和查找相近物品),需要定义合适的距离度量方式来量化彼此间的差异程度。常见的衡量标准包括余弦相似度(Cosine Similarity)、皮尔逊相关系数(Pearson Correlation Coefficient)等。例如,在计算两部电影之间的相似度时,可以选择后者作为评价指标: \[ \text{similarity}(A, B)=\frac{\sum_{i=1}^{n}\left(r_{Ai}-\bar{r}_{A}\right)\left(r_{Bi}-\bar{r}_{B}\right)}{\sqrt{\sum_{i=1}^{n}\left(r_{Ai}-\bar{r}_{A}\right)^{2}} \cdot \sqrt{\sum_{i=1}^{n}\left(r_{Bi}-\bar{r}_{B}\right)^{2}}} \] 这里 \( r_{Xj} \) 表示第 j 位用户给定 X 物品打下的分数,\( \overline {r_X } \) 则表示所有涉及此项目的平均得分。 ```python import numpy as np from scipy.spatial.distance import pdist, squareform def pearson_corr_matrix(data): """Calculate the Pearson correlation coefficient matrix.""" corr = 1 - squareform(pdist(data.T, metric='correlation')) return corr ``` #### 实现步骤 尽管具体的实施方案可能因应用场景的不同有所变化,但总体上遵循以下几个原则: - **数据预处理**:清洗并整理原始日志文件中的交互事件; - **特征提取**:根据业务需求选取恰当维度描述实体属性; - **模型训练**:运用机器学习框架完成参数估计工作; - **效果评估**:借助离线测试集验证性能表现,并持续迭代优化方案。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值