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
英文地址,請注明出處:http://en.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 <分支名> <倉庫地址> …