当前位置: 首页 > news >正文

uniapp 系统学习,从入门到实战(六)—— 样式与布局

全篇大概 4700 字(含代码),建议阅读时间 30min


📚 目录

  1. Flex 布局在 UniApp 中的应用
  2. 响应式设计与适配多端
  3. 使用 SCSS 提升样式开发效率
  4. 实战案例演示
  5. 总结

1. Flex 布局在 UniApp 中的应用

1.1 基础布局实现

通过 display: flex 快速构建弹性容器,支持横向/纵向排列和灵活对齐:

<template><view class="flex-container"><view class="item">商品图片</view><view class="item">价格信息</view><view class="item">操作按钮</view></view>
</template><style lang="scss">
.flex-container {display: flex;justify-content: space-between; /* 主轴两端对齐 */align-items: center;        /* 交叉轴居中对齐 */padding: 20rpx;background: #f8f8f8;.item {flex: 1 0 200rpx;       /* 最小宽度200rpx,自动扩展 */margin: 0 10rpx;background: #fff;border-radius: 10rpx;padding: 20rpx;box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.1);&:first-child { background: #4CAF50; color: white; }&:last-child { background: #FF5722; color: white; }}
}
</style>

效果预览​
请添加图片描述

2. 响应式设计与适配多端

2.1 全局适配方案

使用 rpx单位和媒体查询构建跨平台界面:

<template><view class="responsive-layout"><view class="header">导航栏</view><view class="content"><view class="grid-item" v-for="i in 12" :key="i">内容{{i}}</view></view><view class="footer">底部信息</view></view>
</template><style lang="scss">
.responsive-layout {min-height: 100vh;display: flex;flex-direction: column;.header, .footer {height: 100rpx;background: #333;color: white;text-align: center;}.content {flex: 1;display: flex;flex-wrap: wrap;gap: 20rpx;.grid-item {flex: 1 1 200rpx;min-height: 200rpx;background: #f0f0f0;border-radius: 10rpx;@media (max-width: 768px) {flex: 1 1 100%;}}}
}
</style>

请添加图片描述

适配效果对比​

设备类型布局模式列数交互说明
手机竖屏单列布局1列下拉刷新内容
手机横屏双列布局2列左右滑动切换
平板三列布局3列滑动浏览
PC浏览器四列布局4列键盘快捷操作

3. 使用 SCSS 提升样式开发效率

3.1 企业级样式管理

通过 SCSS变量和混合宏构建可维护的样式系统:

// 全局变量定义(variables.scss)
$primary-color: #2b9939;
$font-family: '微软雅黑', sans-serif;
$breakpoints: ('mobile': 768px,'tablet': 1024px,'desktop': 1280px
);
// 混合宏定义(mixins.scss)
@mixin flex-center($direction: row) {display: flex;flex-direction: $direction;justify-content: center;align-items: center;
}@mixin responsive-grid($columns: 4) {display: flex;flex-wrap: wrap;gap: 20rpx;@each $bp, $val in $breakpoints {@media (min-width: $val) {.grid-item {flex: 1 1 calc(100% / $columns - 20rpx / $columns);}}}
}

3.2 组件样式复用

在 Vue 组件中使用 SCSS 实现模块化开发:

<template><view class="card"><image class="card-image" src="static/phone.jpg" mode="aspectFill"></image><view class="card-content"><text class="card-title">手机</text><text class="card-price">¥100.00</text></view></view>
</template><style lang="scss">
@import "@/scss/variables.scss";
@import "@/scss/mixins.scss";.card {@include flex-center(row);background: white;border-radius: 16rpx;box-shadow: 0 4rpx 12rpx rgba(0,0,0,0.1);overflow: hidden;.card-image {width: 30%;height: 200rpx;object-fit: cover;}.card-content {width: 70%;padding-left: 20rpx;.card-title {font-size: $font-family-bold;color: $primary-color;}.card-price {font-size: 24rpx;color: #ff9f00;}}
}
</style>

4. 实战案例演示

4.1 电商商品列表页

  1. 在根目录下创建 variables.scss 文件
// src/scss/variables.scss
$primary-color: #2b9939;       // 主色调(绿色)
$secondary-color: #333;         // 辅助色(深灰色)
$font-size-base: 28rpx;        // 基础字体大小
$border-radius-base: 10rpx;     // 基础圆角
  1. 在static文件夹中存放三张图片用于展示使用

  2. 创建product-list.vue文件

<template><view class="product-list"><scroll-view scroll-y style="height: 100vh;"><view v-for="product in products" :key="product.id"class="product-card"@click="handleCardClick(product)"><image class="product-image" :src="'/static/' + product.image"></image><view class="product-info"><text class="product-name">{{ product.name }}</text><text class="product-price">¥{{ product.price }}</text><button class="add-to-cart" @click="addToCart(product)"></button></view></view></scroll-view></view>
</template><script>
import { primaryColor } from '@/variables.scss';export default {name: 'ProductList',data() {return {// 模拟商品数据products: [{id: 1,image: 'phone.jpg',name: '智能手机 Pro Max',price: 4999},{id: 2,image: 'earphone.jpeg',name: '无线耳机 AirPods',price: 1299},{id: 3,image: 'computer.jpg',name: '笔记本电脑 MacBook Pro',price: 12999},]};},methods: {handleCardClick(product) {console.log('查看商品详情', product);// 可在此处跳转详情页this.$router.push({name: 'ProductDetail',params: { productId: product.id }});},// 加入购物车功能addToCart(product) {console.log('加入购物车', product);// 1. 本地存储方案(简单示例)uni.setStorageSync('cart', [...this.$store.state.cart, product]);// 2. Vuex 方案(推荐生产环境使用)this.$store.dispatch('cart/addProduct', product);// 显示提示uni.showToast({title: '已加入购物车',icon: 'success',duration: 2000});}},onLoad() {// 模拟数据加载console.log('页面加载完成');},fetchProducts() {}
};
</script><style lang="scss">
// 引入全局变量
@import "@/variables.scss";.product-list {.product-card {display: flex;flex-direction: column;background: white;border-radius: 10rpx;padding: 20rpx;margin-bottom: 20rpx;box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.1);.product-image {width: 100%;height: 300rpx;object-fit: cover;}.product-info {margin-top: 20rpx;.product-name {font-size: 32rpx;color: #333;}.product-price {font-size: 28rpx;color: $primary-color; // 使用全局主题色margin-top: 10rpx;}.add-to-cart {background: $primary-color; // 主题色按钮color: white;padding: 10rpx 20rpx;border-radius: 5rpx;margin-top: 20rpx;// 按钮悬停效果&:hover {opacity: 0.9;}}}}
}
</style>

5. 总结

通过合理运用 ​ Flex 布局​ 实现灵活界面设计,结合 ​rpx 单位+ 媒体查询​ 完成跨端适配,再借助 ​SCSS 变量+混合宏​ 提升样式复用率,开发者可以显著提升 UniApp 项目的开发效率和代码质量。
建议在实际项目中:

  • 建立统一的 ​ SCSS 变量库
  • 制作 ​ 响应式断点配置表
  • 开发 ​可复用的 Flex布局组件
  • 定期进行 ​ 样式性能检测

相关文章:

uniapp 系统学习,从入门到实战(六)—— 样式与布局

全篇大概 4700 字(含代码)&#xff0c;建议阅读时间 30min &#x1f4da; 目录 Flex 布局在 UniApp 中的应用响应式设计与适配多端使用 SCSS 提升样式开发效率实战案例演示总结 1. Flex 布局在 UniApp 中的应用 1.1 基础布局实现 通过 display: flex 快速构建弹性容器&#…...

‘ts-node‘ 不是内部或外部命令,也不是可运行的程序

新建一个test.ts文件 let message: string = Hello World; console.log(message);如果没有任何配置的前提下,会报错’ts-node’ 不是内部或外部命令,也不是可运行的程序。 此时需要安装一下ts-node。 npm install...

mysql 全方位安装教程

下载 MySQL 【官网下载地址】 注意要选择较大的哪个安装包&#xff0c;小的安装包是一个安装器。 我们不用登录&#xff0c;直接下载 直接运行下载好的安装包 MySQL如果是 安装包安装, 可以图形化界面自主配置 如果是压缩包解压, 可以配置 配置文件, 可以解压安装到指定的…...

22-接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 方法一&#xff1a;双指针法 思路 使用两个指针 left 和 right 分别指向数组的两端&#xff0c;同时记录左边的最大高度 leftMax 和右边的最大高度 rig…...

使用Spring Boot与达梦数据库(DM)进行多数据源配置及MyBatis Plus集成

使用Spring Boot与达梦数据库(DM)进行多数据源配置及MyBatis Plus集成 在现代企业级应用开发中&#xff0c;处理多个数据源是一个常见的需求。本文将详细介绍如何使用Spring Boot结合达梦数据库&#xff08;DM&#xff09;&#xff0c;并通过MyBatis Plus来简化数据库操作&…...

leetcode28 找出字符串第一个匹配值的下标 KMP算法

KMP 算法——快速的从主串中找到模式串 当出现字符串不匹配时&#xff0c;可以知道一部分之前已经匹配的文本内容&#xff0c;可以利用这些信息避免从头再去做匹配了。 KMP 算法 比较指针不回溯&#xff0c;仅仅是后移模式串。 每次不匹配的时候&#xff0c;找之前已匹配部分…...

【Bug】natten:安装报错(临近注意力机制的高效cuda内核实现)

正常安装natten报错 pip install natten 报错 可以尝试使用以下网站进行安装 https://shi-labs.com/natten/ 可以根据自己的cuda与pytorch版本进行安装 之间复制命令即可&#xff0c;不需要进行任何修改...

AI 实战2 - face -detect

人脸检测 环境安装源设置conda 环境安装依赖库 概述数据集wider_face转yolo环境依赖标注信息格式转换图片处理生成 train.txt 文件 数据集展示数据集加载和处理 参考文章 环境 安装源设置 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/f…...

Spring Boot 项目开发流程全解析

目录 引言 一、开发环境准备 二、创建项目 三、项目结构 四、开发业务逻辑 1.创建实体类&#xff1a; 2.创建数据访问层&#xff08;DAO&#xff09;&#xff1a; 3.创建服务层&#xff08;Service&#xff09;&#xff1a; 4.创建控制器层&#xff08;Controller&…...

从Java到MySQL8源码:深入解析PreparedStatement参数绑定与执行机制

引言 在数据库开发中&#xff0c;PreparedStatement&#xff08;预处理语句&#xff09;是防止SQL注入、提升性能的重要工具。它通过分离SQL结构与参数值&#xff0c;不仅增强了安全性&#xff0c;还能利用预编译优化执行效率。本文将从Java JDBC驱动和MySQL 8源码的双重视角&…...

mysql的主从同步

1、异步复制&#xff1a;这是MySQL默认的复制模式。在这种模式下&#xff0c;主库在执行完客户端提交的事务后会立即将结果返回给客户端&#xff0c;并不关心从库是否已经接收并处理。这种模式的优点是实现简单&#xff0c;但缺点是如果主库崩溃&#xff0c;已经提交的事务可能…...

工程化与框架系列(10)--微前端架构

微前端架构 &#x1f3d7;️ 微前端是一种将前端应用分解成更小、更易管理的独立部分的架构模式。本文将详细介绍微前端的核心概念、实现方案和最佳实践。 微前端概述 &#x1f31f; &#x1f4a1; 小知识&#xff1a;微前端的核心理念是将前端应用分解成一系列独立部署、松耦…...

【3天快速入门WPF】11-附加属性

目录 1. 步骤1:定义附加属性2. 示例代码3. 步骤2:在XAML中使用附加属性3.1. 示例代码4. 步骤3:扩展使用场景4.1. 示例代码5. 总结上一篇讲到了依赖属性,本篇主要想说一下附加属性。 在WPF中,附加属性(Attached Property)是一种特殊的依赖属性,允许你在不属于某个类的控…...

MySQL并发知识(面试高频)

mysql并发事务解决 不同隔离级别下&#xff0c;mysql解决并发事务的方式不同。主要由锁机制和MVCC(多版本并发控制)机制来解决并发事务问题。 1. mysql中的锁有哪些&#xff1f; 表级锁&#xff1a; 场景&#xff1a;表级锁适用于需要对整个表进行操作的情况&#xff0c;例如…...

现存脑容知识库

Redis import queue import threading import asyncio 异步&#xff1a;在一个线程内&#xff0c;等待的时候可以切换到其他任务。 多线程&#xff1a;每个线程独立运行&#xff0c;同时处理多个任务。 回调函数 网络请求&#xff08;JavaScript&#xff09;在浏览器中&a…...

Mysql-如何理解事务?

一、事务是什么东西 有些场景中&#xff0c;某个操作需要多个sql配合完成&#xff1a; 例如&#xff1a; 李四这个月剩下的前不够交房租了&#xff0c;找张三借1000元急用&#xff1a; &#xff08;1&#xff09;给张三的账户余额 减去1000元 updata 账户表 set money money -…...

dify绑定飞书多维表格

dify 绑定飞书和绑定 notion 有差不多的过程&#xff0c;都需要套一层应用的壳子&#xff0c;而没有直接可以访问飞书文档的 API。本文记录如何在dify工具中使用新增多条记录工具。 创建飞书应用 在飞书开放平台创建一个应用&#xff0c;个人用户创建企业自建应用。 自定义应…...

QT播放视频保持视频宽高比消除黑边

QT播放视频保持视频宽高比消除黑边 1、问题 在播放视频的时候&#xff0c;由于框架的大小发生变化&#xff0c;导致视频出现黑边很不好看。 因此需要像一种方法消除黑边 2、处理 1、读取视频的宽高比 2、设置视频的Widget的大小固定&#xff0c;Widget的宽高比和视频宽高比…...

1. IO的基础知识

1.1 流 Java程序通过流执行IO。流是一种抽象&#xff0c;它要么生成信息&#xff0c;要么使用信息。流通过java的IO系统链接到物理设备。所有流的行为方式都是相同的&#xff0c;尽管它们链接的物理设备是不同的。 1.2 字节流和字符流 Java定义了两种类型的流 : 字节流和字符流…...

科普:ROC AUC与PR AUC

在评价二分类模型性能时&#xff0c;有许多评价指标&#xff0c;其中&#xff0c;有一对是用面积AUC&#xff08;Area Under the Curve&#xff09;做评价的&#xff1a;ROC AUC与PR AUC 本文我们对ROC AUC与PR AUC进行多维度对比分析&#xff1a; 一、定义与核心原理 维度RO…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...

深入理解 React 样式方案

React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...

基于Uniapp的HarmonyOS 5.0体育应用开发攻略

一、技术架构设计 1.混合开发框架选型 &#xff08;1&#xff09;使用Uniapp 3.8版本支持ArkTS编译 &#xff08;2&#xff09;通过uni-harmony插件调用原生能力 &#xff08;3&#xff09;分层架构设计&#xff1a; graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...

中国政务数据安全建设细化及市场需求分析

(基于新《政务数据共享条例》及相关法规) 一、引言 近年来,中国政府高度重视数字政府建设和数据要素市场化配置改革。《政务数据共享条例》(以下简称“《共享条例》”)的发布,与《中华人民共和国数据安全法》(以下简称“《数据安全法》”)、《中华人民共和国个人信息…...