常见布局实现详解(Flex 实战版)

在快应用开发中,由于布局能力有所限制(例如不支持 absolute),我们通常需要借助 Flex 布局 来实现常见页面结构。下面通过几个典型案例来讲解👇


一、左右三栏布局(横向分布)

这种布局适用于:导航 + 内容 + 侧边栏等场景。

示例代码:

复制代码
复制代码
<template>
<div class="main">
<div class="cell cell--left"></div>
<div class="cell cell--center"></div>
<div class="cell cell--right"></div>
</div>
</template>

<style>
.main {
display: flex;
flex-direction: row;
}
.cell {
flex: 1;
height: 200px;
background-color: rgb(78, 192, 245);
border: 2px solid #444;
}
</style>

核心思路:

  • 使用 flex-direction: row 控制横向排列
  • 每个子元素设置 flex: 1,实现等分布局
  • 不需要计算宽度,自动均分空间

二、上下三块布局(纵向排列)

适合页面结构:头部 / 内容 / 底部

示例代码:

复制代码
复制代码
<template>
<div class="main">
<div class="cell cell--top"></div>
<div class="cell cell--middle"></div>
<div class="cell cell--bottom"></div>
</div>
</template>

<style>
.main {
display: flex;
flex-direction: column;
height: 600px;
}
.cell {
flex: 1;
background-color: rgb(78, 192, 245);
border: 2px solid #444;
}
</style>

实现要点:

  • 将主轴方向改为 column
  • 设置容器高度(否则无法均分)
  • 子元素同样使用 flex: 1 自动分配高度

三、九宫格布局(网格排列)

适用于:商品列表、图片宫格等

示例代码:

复制代码
复制代码
<template>
<div class="main">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
</template>

<style>
.main {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.cell {
width: 33.333%;
height: 200px;
background-color: rgb(78, 192, 245);
border: 2px solid #444;
}
</style>

技术重点:

  • 使用 flex-wrap: wrap 开启换行
  • 每个元素设置 width: 33.333% 实现三列
  • 自动形成 3×3 网格结构

四、图片上叠加文字(覆盖效果)

在快应用中,由于不支持 absolute 定位,实现"文字覆盖图片"需要换一种思路👇

示例代码:

复制代码
复制代码
<template>
<div class="stack">
<image class="stack__cover" src="xxx.png" />
<div class="stack__content">
<text class="text">Hero</text>
</div>
</div>
</template>

<style>
.stack {
display: flex;
flex-direction: column;
align-items: center;
}
.stack__cover,
.stack__content {
height: 300px;
}
.stack__cover {
width: 100%;
}
.stack__content {
margin: -300px 0 0 0;
}
.text {
color: red;
font-size: 80px;
font-weight: bold;
}
</style>

实现原理:

  • 利用 负 margin 将文字层"拉回"覆盖到图片上
  • 两个元素高度一致
  • 不依赖绝对定位

五、注意事项(重点)

  1. ❌ 不支持 absolute 布局
  2. ✅ 可以用 负 margin 实现叠加效果
  3. ⚠ 背景图暂不支持网络资源(需本地图片)
  4. ✅ 推荐优先使用 Flex 解决布局问题
  5. 编程语言C++head.wmwnxhp.cn++C语言的魅力
    编程语言C++blog.nsxdnjk.cn++C语言的魅力
    编程语言C++read.otjogow.cn++C语言的魅力
    编程语言C++work.ndqgwmr.cn++C语言的魅力
    编程语言C++wap.share.dffipjx.cn++C语言的魅力
    编程语言C++www.share.hblgwdw.cn++C语言的魅力
    编程语言C++mobile.share.asfbyjx.cn++C语言的魅力
    编程语言C++www.www.share.fhaxegd.cn++C语言的魅力
    编程语言C++www.m.share.swcpoll.cn++C语言的魅力
    编程语言C++baike.share.ttsdgje.cn++C语言的魅力
    编程语言C++tools.ooggxey.cn++C语言的魅力
    编程语言C++video.spgmisf.cn++C语言的魅力
    编程语言C++mobile.puvqfjp.cn++C语言的魅力
    编程语言C++book.rxemcei.cn++C语言的魅力
    编程语言C++wap.vznwuen.cn++C语言的魅力
    编程语言C++h5.xxlxnyx.cn++C语言的魅力
    编程语言C++www.dtooidq.cn++C语言的魅力
    编程语言C++www.blog.lhxthow.cn++C语言的魅力
    编程语言C++m.qvipxhj.cn++C语言的魅力
    编程语言C++read.share.rixjzls.cn++C语言的魅力

六、进阶优化:封装为 SCSS 复用

为了提升开发效率,可以将叠加布局抽象为一个 mixin👇

复制代码
@mixin stack($height) {
display: flex;
flex-direction: column;

.stack__cover,
.stack__content {
height: $height;
}

.stack__cover {
width: 100%;
}

.stack__content {
margin: -$height 0 0 0;
}
}

使用方式:

.stack {
align-items: center;
@include stack(300px);
}

.text {
color: red;
font-size: 80px;
font-weight: bold;
}

七、总结

以上几种布局基本覆盖了快应用开发中的常见需求:

  • 横向布局 → flex + row
  • 纵向结构 → flex + column
  • 网格排列 → flex + wrap
  • 图文叠加 → 负 margin 技巧

掌握这些方法后,即使在功能受限的环境下,也能灵活实现复杂页面效果。

相关推荐
Sherotree7 小时前
Google Antigravity——Agent 被提到主界面
前端·ide·后端·edge浏览器
Mr数据杨7 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
里欧跑得慢7 小时前
Flutter 像素级还原:设计稿到代码的视觉无损转换技巧
前端·css·flutter·web
里欧跑得慢8 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
苏灿烤鱼8 小时前
没有机密文件,也没有付费数据,在浏览器里造一颗"间谍卫星"
前端·javascript·github
泯泷8 小时前
手搓JSVM第 5 篇:写第一个编译器:从 AST 生成 IR
前端·javascript·算法
泯泷8 小时前
手搓JSVM第 7 篇:控制流:if、while 与 jump
前端·javascript·算法
泯泷9 小时前
手搓JSVM第 6 篇:把 IR 编成字节码:emit 与 label fixup
前端·javascript·算法
泯泷9 小时前
手搓JSVM第 3 篇:从栈式 VM 到寄存器式 VM:为什么我们选择寄存器
前端·javascript·算法
泯泷9 小时前
第 4 篇:让 VM 支持变量:Slot、Environment 与 TDZ
前端·javascript·算法