scss 转为原子css unocss

文章目录

  • 前言
    • 🎯 **方案一:混合模式 (推荐)**
    • 🎯 **方案二:语义化组件类**
    • 🎯 **方案三:CSS 模块化**
    • 🎯 **方案四:BEM 命名规范**
    • 💡 **推荐做法**


前言

记录让c4 从scss 转为 原子css unocss

🎯 方案一:混合模式 (推荐)

保留语义化的 SCSS 类名,内部使用 @apply 指令应用 UnoCSS:

让我展示如何重构为语义化的 SCSS + UnoCSS 混合模式:

<template><view class="page"><view class="tab-bar"><viewv-for="(tab, index) in tabList":key="tab.key"class="tab-item":class="{ 'active': currentTab === index }"@click="changeTab(index)"><text class="tab-text">{{ tab.label }}</text><text class="tab-count">({{ tab.count }})</text></view></view><!-- 成员列表 --><view class="content"><scroll-view scroll-y class="scroll-container"><view class="member-list"><viewv-for="member in currentMemberList":key="member.id"class="member-item"><view class="member-info"><image :src="member.avatar" class="avatar" mode="aspectFill" /><view class="info">xxx</view></view></view><view class="delete-btn" @click="deleteMember(member.id)">删除</view></view><!-- 空状态 --><view v-if="currentMemberList.length === 0" class="empty-state"><image src="/static/images/mine/no_list.webp" class="empty-icon" mode="aspectFit" /><text class="empty-text">暂无成员</text></view></view></scroll-view></view></view>
</template><style lang="scss" scoped>
/* 使用 @apply 指令结合 UnoCSS */
.page {@apply min-h-screen flex flex-col bg-#f7f7f7;
}.tab-bar {@apply bg-white flex px-32rpx border-b-2rpx border-#f5f5f5;
}.member-item {@apply flex items-center justify-between h-174rpx bg-white rounded-20rpx px-32rpx mb-24rpx;box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
}.add-text {@apply text-32rpx font-600 text-white;
}.modal-overlay {@apply fixed top-0 left-0 right-0 bottom-0 z-1000 flex items-center justify-center p-40rpx bg-black bg-opacity-50;
}/* 其他弹窗样式... */
</style>

🎯 方案二:语义化组件类

创建语义化的组件类,内部使用 UnoCSS:

<template><view class="member-management-page"><view class="navigation-tabs"><view class="tab-item" :class="{ 'is-active': currentTab === index }"><!-- 内容 --></view></view><view class="member-content"><view class="member-card"><view class="member-basic-info"><!-- 成员信息 --></view><view class="member-actions"><!-- 操作按钮 --></view></view></view><view class="floating-add-section"><view class="primary-add-button"><!-- 添加按钮 --></view></view></view>
</template><style lang="scss" scoped>
.member-management-page {@apply min-h-screen flex flex-col bg-#f7f7f7;
}.navigation-tabs {@apply bg-white flex px-32rpx border-b-2rpx border-#f5f5f5;
}.tab-item {@apply flex-1 py-32rpx relative flex items-center justify-center gap-8rpx cursor-pointer;&.is-active {&::after {content: '';position: absolute;bottom: 0;left: 50%;transform: translateX(-50%);width: 40rpx;height: 4rpx;background: #ff6600;border-radius: 2rpx;}}
}.member-content {@apply flex-1 flex flex-col;
}.member-card {@apply flex items-center justify-between h-174rpx bg-white rounded-20rpx px-32rpx mb-24rpx;box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
}.member-basic-info {@apply flex items-center flex-1 gap-24rpx mr-24rpx;
}.member-actions {@apply min-w-88rpx py-16rpx bg-white rounded-24rpx text-24rpx font-500 text-center flex-shrink-0 cursor-pointer transition-all-300ms;
}.floating-add-section {@apply fixed bottom-0 left-0 right-0 bg-white rounded-t-48rpx px-32rpx pt-24rpx pb-120rpx;box-shadow: 0 -4rpx 20rpx rgba(0, 0, 0, 0.06);
}.primary-add-button {@apply w-full h-88rpx flex items-center justify-center bg-#ff6600 rounded-44rpx cursor-pointer transition-all-300ms;box-shadow: 0 8rpx 24rpx rgba(255, 102, 0, 0.3);&:active {@apply opacity-90 scale-98;}
}
</style>

🎯 方案三:CSS 模块化

使用 CSS 变量 + 语义化类名:

<template><view class="page"><view class="tab-bar"><view class="tab-item" :class="{ 'active': currentTab === index }"><!-- 内容 --></view></view></view>
</template><style lang="scss" scoped>
:root {--primary-color: #ff6600;--text-primary: #333333;--text-secondary: #666666;--text-placeholder: #999999;--bg-page: #f7f7f7;--bg-card: #ffffff;--border-light: #f5f5f5;--shadow-card: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);--shadow-floating: 0 -4rpx 20rpx rgba(0, 0, 0, 0.06);--radius-small: 20rpx;--radius-medium: 24rpx;--radius-large: 48rpx;
}.page {min-height: 100vh;display: flex;flex-direction: column;background: var(--bg-page);
}.tab-bar {background: var(--bg-card);display: flex;padding: 0 32rpx;border-bottom: 2rpx solid var(--border-light);
}.tab-item {flex: 1;padding: 32rpx 0;position: relative;display: flex;align-items: center;justify-content: center;gap: 8rpx;cursor: pointer;&.active::after {content: '';position: absolute;bottom: 0;left: 50%;transform: translateX(-50%);width: 40rpx;height: 4rpx;background: var(--primary-color);border-radius: 2rpx;}
}.member-item {display: flex;align-items: center;justify-content: space-between;height: 174rpx;background: var(--bg-card);border-radius: var(--radius-small);padding: 0 32rpx;margin-bottom: 24rpx;box-shadow: var(--shadow-card);
}.add-button-wrapper {position: fixed;bottom: 0;left: 0;right: 0;background: var(--bg-card);border-radius: var(--radius-large) var(--radius-large) 0 0;padding: 24rpx 32rpx 120rpx;box-shadow: var(--shadow-floating);
}
</style>

🎯 方案四:BEM 命名规范

使用 BEM 命名约定保持语义性:

<template><view class="member-page"><view class="member-page__tabs"><view class="member-page__tab member-page__tab--active"><!-- 标签内容 --></view></view><view class="member-page__content"><view class="member-card"><view class="member-card__info"><view class="member-card__avatar"></view><view class="member-card__details"><view class="member-card__name-section"><!-- 姓名和编辑 --></view><view class="member-card__address-section"><!-- 地址和复制 --></view></view></view><view class="member-card__actions"><!-- 删除按钮 --></view></view></view><view class="member-page__floating-actions"><button class="member-page__add-btn"><!-- 添加按钮 --></button></view></view>
</template><style lang="scss" scoped>
.member-page {@apply min-h-screen flex flex-col bg-#f7f7f7;&__tabs {@apply bg-white flex px-32rpx border-b-2rpx border-#f5f5f5;}&__tab {@apply flex-1 py-32rpx relative flex items-center justify-center gap-8rpx cursor-pointer;&--active::after {content: '';position: absolute;bottom: 0;left: 50%;transform: translateX(-50%);width: 40rpx;height: 4rpx;background: #ff6600;border-radius: 2rpx;}}&__content {@apply flex-1 flex flex-col;}&__floating-actions {@apply fixed bottom-0 left-0 right-0 bg-white rounded-t-48rpx px-32rpx pt-24rpx pb-120rpx;box-shadow: 0 -4rpx 20rpx rgba(0, 0, 0, 0.06);}&__add-btn {@apply w-full h-88rpx flex items-center justify-center bg-#ff6600 rounded-44rpx cursor-pointer transition-all-300ms;box-shadow: 0 8rpx 24rpx rgba(255, 102, 0, 0.3);&:active {@apply opacity-90 scale-98;}}
}.member-card {@apply flex items-center justify-between h-174rpx bg-white rounded-20rpx px-32rpx mb-24rpx;box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);&__info {@apply flex items-center flex-1 gap-24rpx mr-24rpx;}&__avatar {@apply w-88rpx h-88rpx rounded-20rpx flex-shrink-0;}&__details {@apply flex-1;}&__name-section {@apply flex items-center gap-12rpx mb-12rpx;}&__address-section {@apply flex items-center gap-8rpx;}&__actions {@apply min-w-88rpx py-16rpx bg-white rounded-24rpx text-24rpx font-500 text-center flex-shrink-0 cursor-pointer transition-all-300ms;color: var(--text-placeholder);&:active {@apply bg-#f8f8f8 text-#333333;}}
}
</style>

💡 推荐做法

方案一(混合模式),因为它:

  1. 保持语义性: 类名清晰表达组件功能
  2. 利用 UnoCSS: 通过 @apply 获得原子化 CSS 的好处
  3. 易于维护: 样式集中管理,便于修改
  4. 性能优化: 结合两种方案的优势
  5. 团队友好: 新成员容易理解代码结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95665.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试题】生成式排序了解吗?

生成式排序是搜索排序的前沿方向&#xff0c;核心思想是利用生成式模型的能力来改善排序效果。 技术实现方式&#xff1a;序列到序列重排序 将候选文档列表作为输入序列使用encoder-decoder模型生成重排后的文档序列优势&#xff1a;能捕捉文档间的全局相关性生成式特征提取 使…

【系统架构设计(15)】软件架构设计一:软件架构概念与基于架构的软件开发

文章目录一、核心思想二、软件架构概念&#xff1a;系统设计的高级抽象三、软件架构设计与生命周期&#xff1a;架构在开发流程中的演进四、架构描述语言ADL&#xff1a;架构的标准化表达五、41视图&#xff1a;多角度的架构展现六、基于架构的软件开发概念&#xff1a;架构驱动…

文件系统-哈希结构文件

一、核心思想哈希文件的核心思想非常简单直接&#xff1a;通过一个计算&#xff08;哈希函数&#xff09;&#xff0c;将记录的键&#xff08;Key&#xff09;直接转换为该记录在磁盘上的物理地址&#xff08;通常是块地址&#xff09;&#xff0c;从而实现对记录的快速存取。它…

一文吃透 C#中异步编程Task

一文吃透 C#中异步编程Task 一、Task 是什么 二、推荐使用场景 三、Demo:Task 的核心用法 1. 最常用的启动方式Task.Run 2. task完成状态与结果获取 3. 多个任务怎么等?Wait/WaitAll/WaitAny 4. 任务想中途停掉?取消与异常处理 四、必备 API 速查表 五、避坑指南、注意事项 …

TDengine TIMETRUNCATE 函数用户使用手册

TDengine TIMETRUNCATE 函数用户使用手册 函数概述 TIMETRUNCATE 是 TDengine 中的一个时间处理标量函数&#xff0c;用于将时间戳按照指定的时间单位进行截断操作。该函数在时间数据聚合、分组和统计分析中非常有用&#xff0c;特别适用于智能电表等时序数据的分析场景。 语法…

KSZ8081寄存器介绍

一、寄存器概览KSZ8081MNX/RNB 支持 IEEE 802.3 标准的 MII 管理接口&#xff08;MDIO&#xff09;&#xff0c;寄存器地址范围为 0x00 - 0x1F&#xff0c;其中寄存器 0x00 - 0x08 为 IEEE 标准寄存器&#xff0c;0x09 - 0x1F 为扩展功能寄存器。寄存器按功能可分为基本控制与状…

力扣190:颠倒二进制位

力扣190:颠倒二进制位题目思路代码题目 颠倒给定的 32 位无符号整数number的二进制位。 思路 思路很简单&#xff0c;我们只需要得到number从低位到高位的每一个二进制位再把二进制位移到颠倒的res的对应二进制位即可&#xff0c;例如number的最低位为1那么res的最高位即1&a…

鸿蒙NEXT交互机制解析:从输入设备到手势响应的全面指南

深入探索鸿蒙NEXT的交互设计&#xff0c;掌握下一代人机交互核心技术在智能设备无处不在的今天&#xff0c;一个操作系统的交互设计质量直接影响着用户体验。鸿蒙NEXT作为华为推出的新一代操作系统&#xff0c;在交互设计上带来了许多创新和突破。本文将全面解析鸿蒙NEXT的交互…

通过IDEA写一个服务端和一个客户端之间的交互

服务端代码&#xff1a;WebSocketConfig代码package org.example.hufamessagedemo;import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.config.annotation.*;Configuration EnableWebSocket public class WebSocketConfig i…

玩客云刷机Armbian + CasaOS,轻nas系统,以及扩展

网上太多的教程&#xff0c;综合了一下&#xff0c;自己一边参考一边尝试&#xff0c;昨天晚上做的&#xff0c;感觉今天快忘了&#xff0c;记录一下&#xff0c;少走弯路。 随着矿潮的退去&#xff0c;市场上涌现出了众多所谓的“矿渣盒子”&#xff0c;这些设备往往因为价格低…

【Linux】环境变量与程序地址空间详解

前言&#xff1a;欢迎各位光临本博客&#xff0c;这里小编带你直接手撕Linux程序地址空间&#xff0c;文章并不复杂&#xff0c;愿诸君耐其心性&#xff0c;忘却杂尘&#xff0c;道有所长&#xff01;&#xff01;&#xff01;&#xff01; **&#x1f525;个人主页&#xff1a…

机器学习 - Kaggle项目实践(8)Spooky Author Identification 作者识别

Spooky Author Identification | Kaggle Approaching (Almost) Any NLP Problem on Kaggle &#xff08;参考&#xff09; Spooky Author Identification | Kaggle &#xff08;My work&#xff09; 根据三位的一些作品训练集&#xff0c;三分类测试集是哪个作家写的概率。 …

[frontend]WebGL是啥?

对于初学者来说&#xff0c;通常的建议是&#xff1a; 不要直接从原生 WebGL 开始&#xff0c;而是先使用一个基于 WebGL 的高级框架或库&#xff0c;最著名的就是 Three.js。 webgl是啥 three.js是啥&#xff1f; Three.js 封装了 WebGL 的复杂细节&#xff0c;提供了更简单、…

[光学原理与应用-400]:设计 - 深紫外皮秒脉冲激光器 - 元件 - 声光调制器AOM

声光调制器&#xff08;Acousto-Optic Modulator, AOM&#xff09;是深紫外皮秒脉冲激光器中实现脉冲主动控制、频率稳定及光束管理的核心元件。其通过声波与光波的弹光相互作用&#xff0c;在皮秒时间尺度内实现激光强度、频率或传播方向的精准调制。以下从工作原理、关键性能…

25高教社杯数模国赛【D题顶流思路+问题分析】

注&#xff1a;本内容由”数模加油站“ 原创出品&#xff0c;虽无偿分享&#xff0c;但创作不易。欢迎参考teach&#xff0c;但请勿抄袭、盗卖或商用。后续都在”数模加油站“......

利用 openssl api 实现 TLS 双向认证

1. 环境 openssl1.1.1gwget https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1g/openssl-1.1.1g.tar.gz sha256 为&#xff1a; ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46Linux 环境 2. 静态编译 openssl tar -zxvf openssl-1.1.1…

低代码开发平台技术总结

一、 核心定义 低代码开发平台&#xff08;Low-Code Development Platform, LCDP&#xff09;是一种通过图形化界面、可视化建模、拖拽组件和模型驱动逻辑来构建应用程序的开发环境。其核心目标是显著减少传统手写代码的数量&#xff0c;从而降低开发门槛&#xff0c;提升应用交…

Web与Nginx网站服务

文章目录前言1、Web 概念1.1 Web 的特点1.2 B/S 架构模型1.3 Web 请求与响应过程1.4 静态资源与动态资源1.5 Web 的发展阶段1.6 小结2、HTTP 与 HTTPS 协议2.1 http与https区别2.2 HTTPS 握手流程2.3 HTTP状态码2.3.1 HTTP 状态码概览2.3.2 常用状态码详解3、Nginx 概念3.1 Ngi…

【算法--链表】25.K个一组翻转链表--通俗讲解

一、题目是啥?一句话说清 给你一个链表,每k个节点一组进行反转,如果最后剩余的节点不足k个,则保持原状。需要实际交换节点,而不仅仅是改变值。 示例: 输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5](因为每2个一组反转,最后剩余5不足2个,保持原状) 二、解题核…

Git指令 | 个人学习笔记

主要包含git的日常核心操作。 1.创建新仓库 创建新文件夹&#xff0c;打开&#xff0c;然后执行。 git init2.创建一个本地仓库的克隆版本 先cd到指定的目录下&#xff0c;再 git clone /path/to/respository # 指定远程分支 git clone -b <分支名> <仓库地址> …