UniApp Vue2 动态修改 SCSS 伪类颜色

一、需求说明

在 UniApp Vue2 项目中,导航栏文字、底部下划线为静态白色,现需要从本地缓存读取自定义颜色值 ,动态控制文字颜色与 :after 伪类下划线颜色。

二、技术难点

  1. 普通 DOM 元素可通过行内 :style 动态改色;

  2. CSS 伪类(:after / :before)不属于 DOM 节点 ,无法直接绑定行内样式,需借助 CSS 变量实现动态赋值。

三、完整实现步骤

1. JS 逻辑:读取本地缓存色值

在页面 data 中定义变量,从缓存读取配色,并设置默认值防止空值失效。

复制代码

export default { data() { return { // 读取缓存中的导航栏颜色,无数据则默认白色 userHeaderBackground: uni.getStorageSync('navigationBarColor') || '#FFFFFF' } } }

2. 模板改造:绑定行内样式 + 注入 CSS 变量

  1. 外层容器挂载自定义 CSS 变量,供伪类使用;

  2. 导航子项通过 :style 动态绑定文字颜色。

复制代码

<template> <view class="ss-scroll-navbar" :style="{'--nav-active-color': userHeaderBackground}" > <view class="nav-item" :style="{color: userHeaderBackground}"> <view class="title">导航选项</view> </view> </view> </template>

3. SCSS 样式:通过 CSS 变量替换静态色值

删除样式内静态颜色,伪类使用 var(变量名) 读取动态颜色,同时修正代码中 upx 拼写错误(UniApp 标准单位为 rpx)。

复制代码

.ss-scroll-navbar { width: 100%; height: 80rpx; box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, .06); white-space: nowrap; text-align: start; .nav-item { height: 80rpx; text-align: center; padding: 0rpx 20rpx; display: inline-block; position: relative; font-size: 32rpx; .title { line-height: 80rpx; } &:after { content: ''; width: 0; height: 0; /* 使用动态CSS变量 */ border-bottom: 4rpx solid var(--nav-active-color); position: absolute; left: 50%; bottom: 0; transform: translateX(-50%); transition: .3s; } } }

四、颜色实时更新(拓展)

若项目支持手动切换颜色并持久化到本地缓存,修改变量后视图会自动刷新:

复制代码

methods: { // 切换自定义颜色 changeNavColor(color) { uni.setStorageSync('navigationBarColor', color) this.userHeaderBackground = color } }

相关推荐
JavaEdge.5 小时前
scoped 样式与 data-v-* 属性选择器(写给 Javaer)
开发语言·vue
sunphp开发者8 小时前
明灯智慧地图导览系统制作教程
vue·php·uniapp·js·贴图
南城以南溫暖如初1471 天前
社交裂变商城系统设计与实战开发指南
java·spring boot·mysql·vue·mybatis
南城以南溫暖如初1471 天前
分享返现商城系统开发实战:技术架构与运营经验指南
java·spring boot·mysql·架构·vue·mybatis
阿图灵1 天前
MakerHub 开发报告:v1.0.0 → v1.1.0(单日 26 提交,图片渲染、目录跟随与数据真实化)
前端·vue·个人网站·deepseek·开发报告
南城以南溫暖如初1471 天前
社群电商实战指南:从零搭建高转化社区的技术架构
java·spring boot·mysql·系统架构·vue·mybatis
南城以南溫暖如初1471 天前
会员返利商城系统开发实战:架构设计与实现指南
java·spring boot·mysql·vue·mybatis
jay神4 天前
【计算机毕业设计】基于Spring Boot的宠物领养管理系统
java·spring boot·后端·vue·毕业设计·宠物
要开心吖ZSH4 天前
腾讯 IM 前端对接小白教程:医患一对一聊天(含自定义报告卡片)
vue·健康医疗·即时通讯·im
深念Y4 天前
07-SSR水合问题实战排查与修复记录
前端·vue·vite·nuxt·ssr·csr·水合