UniApp中Flex布局学习

文章目录

前言

使用uniapp过程中,经常遇到flex 不知道如何使用

有时候想换个行,真的很蛋疼。

一、学习

1、父节点

css 复制代码
.parent {
  display: flex; /* 启用弹性布局 */ 
  flex-direction: row; /* 或 column  -子元素排列方向 */
  justify-content:flex-start;/*左对齐、center居中、space-between两端分散  -主轴对齐方式*/
  align-items:flex-start; /*顶部对齐)、center垂直居中  -交叉轴对齐*/
  flex-wrap: wrap; /* 允许子元素换行 */
}

2、子节点

css 复制代码
.item {
  flex: 1; /* 所有子元素等分宽度 */
}
.item-2x {
  flex: 2; /* 占据2份空间 */
}
.item {
  width: 50%; /* 每行显示2个子元素 */
}
.item {
  flex: 0 0 33.333%; /* 每行显示3个,不允许伸缩 */
}
.item {
  flex: 0 0 calc(33.333% - 15rpx); /* 三列布局 -间距处理*/
}
.fixed-item {
  flex: none; /* 固定宽度,不伸缩 */
  width: 200rpx; 
}

二、避坑指南

1、子元素宽度超出预期

原因 :Flex 项目默认 min-width: auto 会使元素至少等于内容宽度
正确

css 复制代码
.item {
  min-width: 0; /* 允许内容收缩 */
  overflow: hidden; /* 文本溢出处理 */
}

2、 垂直对齐失效

原因align-items 需容器有明确高度
正确

css 复制代码
.container {
  display: flex;
  height: 100vh; /* 必须声明高度 */
  align-items: center;
}

3、多行对齐陷阱

现象align-content 仅在 flex-wrap: wrap 时生效
正确

css 复制代码
.container {
  flex-wrap: wrap;
  align-content: space-between; /* 控制多行间距 */
}

4、在 ScrollView 内无法滚动

原因 :Flex 容器默认 overflow: visible
正确

css 复制代码
.scroll-container {
  display: flex;
  flex-direction: column;
  overflow: auto; /* 启用滚动 */
  height: 300px; /* 必须限定高度 */
}

5、Gap 属性兼容方案

css 复制代码
.container {
  display: flex;
  flex-wrap: wrap;
  margin: -5px; /* 负边距抵消 */
}

.item {
  margin: 5px; /* 实际间距 */
  flex-basis: calc(25% - 10px); /* 四列布局 */
}

6、 最后一行左对齐

css 复制代码
.container::after {
  content: "";
  flex: auto; /* 填充剩余空间 */
}

7、绝对定位的冲突

现象 :绝对定位子元素破坏布局
正确

css 复制代码
.container {
  position: relative; /* 创建定位上下文 */
}

.absolute-item {
  position: absolute;
  top: 0;
  left: 0;
  /* 避免使用 flex 属性 */
}

8、 移动端适配技巧:

css 复制代码
.item {
  flex: 1 1 100%; /* 移动端单列 */
}

@media (min-width: 768px) {
  .item {
    flex: 1 1 50%; /* 平板双列 */
  }
}

9、动画性能优化

错误

css 复制代码
.item {
  transition: flex 0.3s; /* 可能引发重排 */
}

正确

css 复制代码
.item {
  transition: transform 0.3s; /* GPU加速 */
}

三、性能优化注意事项

  1. 避免深层嵌套:超过 3 层嵌套影响渲染性能
  2. 慎用 flex-grow: 1:在动态数据容器中可能导致布局抖动
  3. 替代方案:简单布局用 Grid,复杂交互用 Flex

相关推荐
杰米不放弃10 小时前
AI大模型应用开发学习-23【20251217】
学习
2501_9151063211 小时前
HTTP 协议详解,HTTP 协议在真实运行环境中的表现差异
网络·网络协议·http·ios·小程序·uni-app·iphone
雍凉明月夜11 小时前
c++ 精学笔记记录Ⅲ
c++·笔记·学习
(●—●)橘子……11 小时前
记力扣1471.数组中的k个最强值 练习理解
数据结构·python·学习·算法·leetcode
阿蒙Amon11 小时前
JavaScript学习笔记:17.闭包
javascript·笔记·学习
想不出名字ಥ_ಥ12 小时前
STM32学习笔记--01学会如何点亮一颗LED灯
笔记·stm32·学习
لا معنى له12 小时前
学习笔记:循环神经网络(RNN)
人工智能·笔记·学习·机器学习
炒毛豆12 小时前
前端可视化-----svg学习笔记
笔记·学习
暗之星瞳12 小时前
PYTHON学习——决策树
python·学习·随机森林
炽烈小老头12 小时前
【 每天学习一点算法 2025/12/17】验证二叉搜索树
学习·算法