程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 原生微信小程序

  • uniapp多端开发

    • 快速入门

      • 环境搭建和介绍
      • 全局配置文件(pages.json)
      • 创建新页面和页面路由跳转
      • 配置底部导航栏(tabBar)
      • 文本和图标组件
      • uni-row 快速布局
      • 页面样式设计
        • 一、尺寸单位
          • 1.1 px 单位
          • 1.2 rpx 单位
        • 二、样式导入
        • 三、常见选择器
        • 四、全局样式与局部样式
          • 4.1 全局样式
          • 4.2 局部样式
        • 五、使用 Sass
          • 5.1 安装 Sass 插件
          • 5.2 使用 Sass 编写样式
      • 下拉刷新和上拉加载
      • 发送网络请求
      • 数据的缓存
      • 图片的上传
    • 内置组件

    • 扩展组件

  • 小程序开发
  • uniapp多端开发
  • 快速入门
scholar
2025-01-28
目录

页面样式设计

# 页面样式设计

前言

uni-app 的 CSS 与 Web 的 CSS 基本一致。uni-app 包含两种页面类型:

  • vue 页面:通过 webview 渲染。
  • nvue 页面:在 app 端通过原生渲染,其样式限制更多。

本文重点介绍 vue 页面的样式注意事项。

# 一、尺寸单位

在 uni-app 中,我们常用的 CSS 单位包括 px 和 rpx。

# 1.1 px 单位

  • px 为像素单位,表示固定尺寸,无论设备屏幕如何变化,所设定的像素值保持不变。

# 1.2 rpx 单位

  • rpx(响应式 px) 是一种动态单位,能根据屏幕宽度自适应。以 750 宽的设计稿为基准,750rpx 恰好等于屏幕宽度。
  • 当屏幕变宽时,1rpx 对应的实际像素数也会等比例增大,从而达到响应式布局效果。

下列图片直观展示了 rpx 单位的实际效果:

rpx 示例1 rpx 示例2

rpx 示例3 rpx 示例4

rpx 示例5 rpx 示例6

rpx 示例7 rpx 示例8

通过这些图片,你可以直观看出使用 rpx 时,不同屏幕宽度下布局和元素尺寸如何自动调整,确保页面风格的一致性。

# 二、样式导入

为了方便样式的统一管理和复用,我们可以使用 @import 语句导入外部样式表。

  • 写法:

    @import "相对路径";
    
    1
  • 说明:

    • 在 @import 后跟随需要导入的外联样式表的相对路径。
    • 每条语句末尾必须以 ; 结束。

下图展示了使用 @import 导入样式的写法,编辑器中显示的效果也十分直观:

样式导入示例1

样式导入示例2

样式导入示例3

通过这种方式,可以将公共样式抽离到单独的文件中,方便在多个页面间复用和统一管理。

# 三、常见选择器

uni-app 支持的 CSS 选择器与传统 Web 类似,但由于目标平台的限制,支持的选择器种类和用法有所不同。

选择器 示例代码 说明
类选择器 (.class) .intro 选中所有具有 class="intro" 的组件
ID 选择器 (#id) #firstname 选中具有 id="firstname" 的组件
标签选择器 (element) view 选中所有 view 组件(uni-app 中常用的基础组件)
组合选择器 view, checkbox 同时选中所有 view 组件和 checkbox 组件
伪元素选择器 ::after view::after 在 view 组件后插入内容(仅在 vue 页面生效)
伪元素选择器 ::before view::before 在 view 组件前插入内容(仅在 vue 页面生效)

注意事项

  • 不支持通用选择器:在 uni-app 中不能使用 * 选择器。

  • 微信小程序限制:自定义组件中仅支持类选择器。

  • 特殊选择器 page:

    • page 选择器相当于 HTML 中的 body 标签,用于设置整个页面的样式。

    • 示例用法:

      /* 设置页面背景色,注意使用 scoped 时可能失效 */
      page {
        background-color: #ccc;
      }
      
      1
      2
      3
      4

# 四、全局样式与局部样式

uni-app 中样式分为全局样式和局部样式两种,它们的作用范围和覆盖规则有所不同。

# 4.1 全局样式

  • 定义位置:通常定义在 App.vue 文件内 <style> 标签中的样式。
  • 作用范围:这些样式会自动作用于项目中所有页面。
  • 外联样式:你可以在 App.vue 中使用 @import 语句引入外部样式表,从而使这些样式全局生效。

下图展示了在 App.vue 中导入全局样式的写法:

全局样式示例

# 4.2 局部样式

  • 定义位置:在 pages 目录下各个 vue 文件内 <style> 标签中的样式。
  • 作用范围:局部样式仅作用于当前页面,并且会覆盖全局样式中相同选择器的样式。
  • nvue 页面注意:目前 nvue 页面不支持全局样式,因此样式需要在每个页面中单独定义。

这种区分方式既能保证全局风格的一致,又能满足单个页面的个性化需求。

# 五、使用 Sass

为了提高 CSS 的开发效率和可维护性,uni-app 支持 Sass(SCSS)预处理器,同时内置了 uni-scss 全局样式库,方便进行页面布局和样式调整。

# 5.1 安装 Sass 插件

在项目根目录下安装相应的 Sass 编译插件,确保项目支持 .scss 文件。 如下图所示,通过编辑器安装插件后,项目即可识别 Sass 语法:

安装 Sass 插件示例1 安装 Sass 插件示例2

# 5.2 使用 Sass 编写样式

在 Vue 文件中的 <style> 标签上添加 lang="scss" 属性,即可开始使用 Sass 编写样式。例如:

<style lang="scss">
  $primary-color: #42b983;

  .container {
    background-color: $primary-color;
    padding: 20px;
    border-radius: 5px;
  }
</style>
1
2
3
4
5
6
7
8
9

下图展示了在页面中使用 Sass 语法的效果:

Sass 使用示例1 Sass 使用示例2

通过 Sass,你不仅可以使用变量、嵌套规则,还能通过混入(mixin)、继承等高级特性,大大提高代码的复用性和可维护性。

编辑此页 (opens new window)
上次更新: 2025/02/03, 00:09:13
uni-row 快速布局
下拉刷新和上拉加载

← uni-row 快速布局 下拉刷新和上拉加载→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式