uniapp\ taro 如何使用 UnoCSS 原子化css

news2024/11/17 16:37:22

unocss-preset-weapp

相较于 tailwindcss 和 windicss, unocss的性能和可扩展性都优于它们

UnoCSS小程序预设 unocss-preset-weapp

内置 transformer 用于兼容小程序

  • transformerClass 转换转义类名,解决小程序不支持`\\`,`\:`,`\[`, `\$`,`\.`等转义类名,保持原子化css的规范去书写class
  • transformerAttributify,用于支持 attributify mode

uniapp-vue3 demo 在线地址​playful-gumption-4bb42b.netlify.app/

使用

uniapp-vue2

使用配置与DEMO

uniapp-vue3

使用配置与DEMO

taro for react vue2 vue3

使用配置与DEMO

原生微信小程序 wxml

使用配置与DEMO


其他

修改 w h 默认单位

unocss-preset-weapp,wh默认单位 `rpx`,例如
.text-20 {
 font-size: 20rpx;
}

.h-10 {
 height: 10rpx;
}

.top-10 {
 top: 10rpx;
}
设置 whRpx为 false,修改默认单位,按 rem 规则递增
  • unocss.config.ts
import presetWeapp from 'unocss-preset-weapp'
export default defineConfig({
  presets: [
 presetWeapp({
      whRpx: false,
    }),
  ],
})

.text-20 {
 font-size: 160rpx;
}

.h-10 {
 height: 80rpx;
}

.top-10 {
 top: 160rpx;
}

自定义转换规则

如需更改默认的转换规则,可通过  transformRules 进行修改
  • unocss.config.js
import presetWeapp from 'unocss-preset-weapp'
import { extractorAttributify, transformerClass } from 'unocss-preset-weapp/transformer'
import { defineConfig } from 'unocss'

const transformRules = {
  '.': '-d111-',
  '/': '-s111-',
  ':': '-c111-',
  '%': '-p111-',
  '!': '-e111-',
  '#': '-w111-',
  '(': '-b111l-',
  ')': '-b111r-',
  '[': '-f111l-',
  ']': '-f111r-',
  '$': '-r111-',
  ',': '-r222-',
}

const { presetWeappAttributify, transformerAttributify } = extractorAttributify({
  transformRules
})

export default defineConfig({
  presets: [
    // https://github.com/MellowCo/unocss-preset-weapp
    presetWeapp({
      transformRules,
    }),
    // attributify autocomplete
    presetWeappAttributify()
  ],
  transformers: [
    // options 见https://github.com/MellowCo/unocss-preset-weapp/tree/main/src/transformer/transformerAttributify
    transformerAttributify({
      transformRules,
    }),

    // options 见https://github.com/MellowCo/unocss-preset-weapp/tree/main/src/transformer/transformerClass
    transformerClass({
      transformRules,
    }),
  ],
})

原子化 css 冲突问题

例如  tmui,自身有一套 原子化 css,导致与 unocss 冲突

  • unocss.config.ts
presetWeapp 配置  prefixtransformerAttributify 配置  classPrefix
import presetWeapp from 'unocss-preset-weapp'
import { extractorAttributify, transformerClass } from 'unocss-preset-weapp/transformer'
import { defineConfig } from 'unocss'

const prefix = 'li-'

const { presetWeappAttributify, transformerAttributify } = extractorAttributify({
  classPrefix: prefix
})

export default defineConfig({
  presets: [
    // https://github.com/MellowCo/unocss-preset-weapp
    presetWeapp({
      prefix
    }),
    // attributify autocomplet
    presetWeappAttributify()
  ],
  transformers: [
    // options 见https://github.com/MellowCo/unocss-preset-weapp/tree/main/src/transformer/transformerAttributify
    transformerAttributify(),

    // options 见https://github.com/MellowCo/unocss-preset-weapp/tree/main/src/transformer/transformerClass
    transformerClass(),
  ],
})
这样冲突问题就解决了
<view bg="#333" p="x-6 y-10" w100 h200 class="li-bg-red">
  this is a unocss
</view>

transform

<view class="li-bg-red li-bg-#333 li-p-x-6 li-p-y-10 li-w100 li-200">
  this is a unocss
</view>

tm-ui-demo

css预设

UnoCSS 文档

Windi CSS文档

默认单位 rpx,w-100 => w-100rpx

渐变背景 (v0.1.12)

gradients

<view class="bg-gradient-to-t from-#f39c12/60 via-#2ecc71:80 to-#9b59b6_70"></view>

animation (v0.1.9)

参考 windicss-animation @windicss/plugin-animations

相关动画网站 animate.css animista.net

  • unocss.config.js 自定义动画
import presetWeapp from 'unocss-preset-weapp'
import { defineConfig } from 'unocss'

export default defineConfig({
  presets: [
    // https://github.com/MellowCo/unocss-preset-weapp
    presetWeapp(),
  ],
  theme: {
    // v0.1.9 加入动画预设
    // https://github.com/MellowCo/unocss-preset-weapp#animation-v019
    // 设置自定义动画
    animation: {
      keyframes: {
        'my-animation': '{0% {letter-spacing: -0.5em;transform: translateZ(-700px);opacity: 0;}40% {opacity: 0.6;}100% {transform: translateZ(0);opacity: 1;}}',
      },
      durations: {
        'my-animation': '0.8s',
      },
      counts: {
        'my-animation': 'infinite',
      },
      timingFns: {
        'my-animation': 'cubic-bezier(0.215, 0.610, 0.355, 1.000)',
      },
    },
  },
})
<view class="animate-pulse"></view>

<view class="animate-back-in-down animate-iteration-infinite"></view>

<view class="animate-[4s_linear_0s_infinite_alternate_bounce]"></view>

.animate--fl-4s_linear_0s_infinite_alternate_bounce-fr- {
  -webkit-animation: 4s linear 0s infinite alternate bounce;
  animation: 4s linear 0s infinite alternate bounce;
}

safe-area (v0.1.6)

classProperties
p-safepadding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)
pt-safepadding-top: env(safe-area-inset-top)
pb-safepadding-bottom: env(safe-area-inset-bottom)
pl-safepadding-left: env(safe-area-inset-left)
pr-safepadding-right: env(safe-area-inset-right)

width and height

classProperties
h-1_2
h-1/2
h-half
height: 50%
w-1_3
w-1/3
width: 33.33333%
h-fullheight: 100%
width-20width: 20r
h-xsheight: 180rpx
预设
export const baseSize = {
  'xs': '180rpx',
  'sm': '220rpx',
  'md': '260rpx',
  'lg': '300rpx',
  'xl': '340rpx',
  '2xl': '390rpx',
  '3xl': '440rpx',
  '4xl': '490rpx',
  '5xl': '540rpx',
  '6xl': '590rpx',
  '7xl': '640rpx',
  '8xl': '690rpx',
  '9xl': '740rpx',
  'full': '100%',
  'half': '50%',
}

border

classProperties
border-2border-width:2rpx;border-style:solid;
b-2border-width:2rpx;border-style:solid;
border-dashedborder-style:dashed
rounded-1_2
rounded-1/2
rounded-half
border-radius:50%
rounded-mdborder-radius:12rpx
预设
export const borderRadius = {
  'DEFAULT': '8rpx',
  'none': '0',
  'sm': '4rpx',
  'md': '12rpx',
  'lg': '16rpx',
  'xl': '24rpx',
  '2xl': '32rpx',
  '3xl': '48rpx',
  'half': '50%',
  'full': '9999px',
}

border-color

classProperties
border-red-100
border-red-1
--un-border-opacity:1; border-color:rgba(254,226,226,var(--un-border-opacity))
border-opacity-20
border-op-20
--un-border-opacity:0.2
border-black_10
border-black/10
border-black:10
border-color:rgba(0,0,0,0.1)

color

classProperties
op-10
opacity-10
opacity:0.1
color-hex-157
c-hex-157
c-[#157]
--un-text-opacity:1;color:rgba(17,85,119,var(--un-text-opacity))
c-hex-157_10
c-hex-157/10
c-[#157]/10
c-[#157]:10
c-[#157]_10
color:rgba(17,85,119,0.1)
color-blue,
color-blue-400,
c-blue
--un-text-opacity:1;color:rgba(96,165,250,var(--un-text-opacity))
text-red-100
text-red100
text-red1
--un-text-opacity:1;color:rgba(254,226,226,var(--un-text-opacity))
text-red-100_20
text-red-100/20
text-red-100:20
color:rgba(254,226,226,0.2)

bg

classProperties
bg-hex-452233_40
bg-[#452233]_40
bg-[#452233]/40
bg-[#452233]:40
background-color:rgba(69,34,51,0.4)
bg-red-100
bg-red1
bg-red100
--un-bg-opacity:1;background-color:rgba(254,226,226,var(--un-bg-opacity))
bg-teal-100_55
bg-teal-100/55
bg-teal-100:55
background-color:rgba(204,251,241,0.55)
bg-opacity-45--un-bg-opacity:0.45

typography

classProperties
text-basefont-size:32rpx;line-height:48rpx
text-100
text-size-100
font-size:100rpx
text-2emfont-size:2em
font-900,
font-black
fw-900
font-weight:900
font-leading-2
leading-2
line-height:16rpx
indenttext-indent:48rpx
indent-2text-indent:16rpx
indent-1_2
indent-1/2
indent-1:2
text-indent:50%
indent-lgtext-indent:64rpx
text-shadow-lg--un-text-shadow:6rpx 6rpx 12rpx var(--un-text-shadow-color, rgba(0,0,0,0.26)),0 0 10rpx var(--un-text-shadow-color, rgba(15,3,86,0.22));text-shadow:var(--un-text-shadow)
word-spacing-2word-spacing:16rpx
tracking-2letter-spacing:16rpx
fontSize预设  text-base
export const fontSize: Theme['fontSize'] = {
  'xs': ['24rpx', '32rpx'],
  'sm': ['28rpx', '40rpx'],
  'base': ['32rpx', '48rpx'],
  'lg': ['36rpx', '56rpx'],
  'xl': ['40rpx', '56rpx'],
  '2xl': ['48rpx', '64rpx'],
  '3xl': ['60rpx', '72rpx'],
  '4xl': ['72rpx', '80rpx'],
  '5xl': ['96rpx', '1'],
  '6xl': ['120rpx', '1'],
  '7xl': ['144rpx', '1'],
  '8xl': ['192rpx', '1'],
  '9xl': ['256rpx', '1'],
}
text-100 => font-size:100rpx
textIndent 预设  indent-lg
export const textIndent: Theme['textIndent'] = {
  'DEFAULT': '48rpx',
  'xs': '16rpx',
  'sm': '32rpx',
  'md': '48rpx',
  'lg': '64rpx',
  'xl': '80rpx',
  '2xl': '96rpx',
  '3xl': '128rpx',
}
leadings  tracking  word-spacing  indent 计算方式

indent-2 原为 text-indent: 0.5rem 等于 8px ,

小程序使用 750rpx 的基准是 2倍px 等于 16rpx ,

所以计算为 2*0.5*1rem = 2*0.5*16px = 16rpx

indent-2    
text-indent: 0.5rem 
text-indent: 16rpx

tracking-2    
letter-spacing: 0.5rem  
letter-spacing:16rpx

word-spacing-2   
word-spacing: 0.5rem  
word-spacing:16rpx

leadings-2  
line-height: 0.5rem  
line-height:16rpx

spacing

classProperties
p-2,p2padding:16rpx
mx-2margin-left:16rpx;margin-right:16rpx
-m-lgmargin:-36rpx
pl-10pxpadding-left:10px
m-10rpxmargin:10rpx
> 预设
export const spacing = {
  'DEFAULT': '32rpx',
  'none': '0',
  'xs': '24rpx',
  'sm': '28rpx',
  'md': '36rpx',
  'lg': '40rpx',
  'xl': '48rpx',
  '2xl': '60rpx',
  '3xl': '72rpx',
  '4xl': '96rpx',
  '5xl': '120rpx',
  '6xl': '144rpx',
  '7xl': '192rpx',
  '8xl': '256rpx',
}

box-shadow

预设
export const boxShadow = {
  'DEFAULT': ['var(--un-shadow-inset) 0 1px 3px 0 rgba(0,0,0,0.1)', 'var(--un-shadow-inset) 0 1px 2px -1px rgba(0,0,0,0.1)'],
  'none': '0 0 rgba(0,0,0,0)',
  'sm': 'var(--un-shadow-inset) 0 1px 2px 0 rgba(0,0,0,0.05)',
  'md': ['var(--un-shadow-inset) 0 4px 6px -1px rgba(0,0,0,0.1)', 'var(--un-shadow-inset) 0 2px 4px -2px rgba(0,0,0,0.1)'],
  'lg': ['var(--un-shadow-inset) 0 10px 15px -3px rgba(0,0,0,0.1)', 'var(--un-shadow-inset) 0 4px 6px -4px rgba(0,0,0,0.1)'],
  'xl': ['var(--un-shadow-inset) 0 20px 25px -5px rgba(0,0,0,0.1)', 'var(--un-shadow-inset) 0 8px 10px -6px rgba(0,0,0,0.1)'],
  '2xl': 'var(--un-shadow-inset) 0 25px 50px -12px rgba(0,0,0,0.25)',
  'inner': 'inset 0 2px 4px 0 rgba(0,0,0,0.05)',
}
连体写法
<view class="shadow-[0px_4px_4px_0px_rgba(237,_0,_0,_1)]"></view>

flex gap

classProperties
flex-basis-1_2flex-basis:50%
flex-basis-2flex-basis:16rpx
gap-4grid-gap:32rpx;gap:32rpx
gap-x-2grid-column-gap:16rpx;column-gap:16rpx;

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

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

相关文章

瞬态抑制二极管TVS的工作原理?|深圳比创达电子EMC(下)

TVS二极管与Zener二极管同样作为过压保护&#xff0c; TVS着重浪涌电压的钳位保护&#xff0c;具有抗大电流冲击的能力;Zener管着重于稳压效果&#xff0c;具有浪涌电流小&#xff0c;保护电压稳的特点&#xff0c;两者在原理与保护特性有所区别&#xff0c;同时在个别应用领域…

回收站删除的文件怎么恢复?快来学习这3个方法!

“有时候我会先将一些不重要的文件放入回收站中&#xff0c;等需要用到时再将它还原。但是我刚刚不小心把回收站清空了&#xff0c;还有方法可以帮我找回我的数据吗&#xff1f;” 在使用电脑时&#xff0c;如果我们删除文件&#xff0c;这些文件会被先收入回收站中。如果我们是…

MODBUS-TCP转MODBUS-RTU通信应用(S7-1200和串口服务器通信)

在学习本博客之前,大家需要熟悉MODBUS-TCP和MODBUS-RTU通信,这2个通信的编程应用,大家可以查看下面文章链接: MODBUS-RTU通信 MODBUS-RTU通信协议功能码+数据帧解读(博途PLC梯形图代码)-CSDN博客MODBUS通信详细代码编写,请查看下面相关链接,这篇博客主要和大家介绍MODB…

商用工程运输车辆智能交通精细数字化管理中的大数据应用

在物联网蓬勃发展的今天&#xff0c;智能交通、智能工业控制、远程控制汽车基本不是什么难题&#xff0c;在集团、企业、都会涉及用车及安全管理&#xff0c;就拿车队管理系统来说&#xff0c;它的主要作用是进行车辆定位、机械诊断、驾驶员行为监测等&#xff0c;并能及时发现…

ubuntu18.04 RTX3060 rangnet++训练 bonnetal语义分割

代码链接&#xff1a; https://github.com/PRBonn/lidar-bonnetal 安装anaconda环境为 CUDA 11.0&#xff08;11.1也可以&#xff09; anaconda环境如下 numpy1.17.2 torchvision0.2.2 matplotlib2.2.3 tensorflow1.13.1 scipy0.19.1 pytorch1.7.1 vispy0.5.3 opencv_python…

工业高频读写器和超高频读写器怎么选?

在工业领域中&#xff0c;RFID技术是常用的信息采集和传输的方式之一&#xff0c;RFID根据频段还可以分为低频、高频和超高频等&#xff0c;在选择具体的频段应用时&#xff0c;很多企业却毫无头绪。接下来本文就高频RFID和超高频RFID读写器的特点进行分析&#xff0c;帮助企业…

Python综合练习题

题目 创建一个系统&#xff0c;里面可以添加学生、添加班级、查看班级里的学生&#xff0c;在控制台输出 效果图 关键代码 完整代码 # -*- coding: UTF-8 -*-#功能 Functionality0 #学生 Student [刘榕榕0, 秦英姿1, 王家乐0, 孟德赫3, 门子伟4, 明展宇5] #班级 Class [大…

景联文数据标注平台助力标注效率翻倍,年处理图像数据过亿

图像标注是指为图像添加文字描述或标签&#xff0c;包括物体、场景、情感、活动等多种内容&#xff0c;以帮助计算机更好地理解和处理图像信息的过程&#xff0c;提高图像处理的自动化程度和准确性&#xff0c;常用于计算机视觉、图像识别等领域。 选择图像标注工具时&#xff…

思必驰:离线语音识别芯片简介

一&#xff0e;使用场景 夏天某个凉爽的早晨&#xff0c;当你躺在床上玩着手机&#xff0c;突然一阵困意袭来&#xff0c;原来已经中午了&#xff0c;此时你一个侧身准备休息&#xff0c;突然发现一阵酷热袭来&#xff0c;你定睛一看&#xff0c;原来是风扇没有打开&#xff0c…

工业以太网RFID设备有哪些部分组成?

随着近年来物联网不断发展&#xff0c;RFID技术已经逐渐成为物联网中的关键技术&#xff0c;利用RFID技术可以实现实时数据采集、物流自动化、远程设备管理等功能&#xff0c;大大提高了物联网提取数据和物体识别能力的智能化水平。 工业RFID读写器作为数据采集最关键的一个设备…

使用Pytorch Geometric 进行链接预测代码示例

PyTorch Geometric (PyG)是构建图神经网络模型和实验各种图卷积的主要工具。在本文中我们将通过链接预测来对其进行介绍。 链接预测答了一个问题:哪两个节点应该相互链接?我们将通过执行“转换分割”&#xff0c;为建模准备数据。为批处理准备专用的图数据加载器。在Torch Ge…

书客护眼台灯好用吗?书客、柏曼、飞利浦多维度测评

护眼台灯作为一种辅助照明设备&#xff0c;旨在提供舒适的光线环境&#xff0c;以减轻眼睛疲劳和保护视力健康。它通常采用柔和的光线、调节亮度和色温的功能&#xff0c;以及一些附加的设计特点&#xff0c;如可调节灯颈、遮光罩等。虽然护眼台灯并不能完全解决眼部问题&#…

YOLOv8改进实战 | 更换主干网络Backbone(一)之轻量化模型Ghostnet

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

应用在冷链运输中的数字温度传感芯片

冷链运输&#xff08;Cold-chain transportation&#xff09;是指在运输全过程中&#xff0c;无论是装卸搬运、变更运输方式、更换包装设备等环节&#xff0c;都使所运输货物始终保持一定温度的运输。冷链运输要求在中、长途运输及短途配送等运输环节的低温状态。它主要涉及铁路…

论文笔记:Multi-Concept Customization of Text-to-Image Diffusion

0 概述 论文&#xff1a;Multi-Concept Customization of Text-to-Image Diffusion 源代码和数据&#xff1a;https://www.cs.cmu.edu/~custom-diffusion/ 当生成模型生成从大规模数据库中学习的概念的高质量图像时&#xff0c;用户通常希望合成他们自己的概念的实例(例如&…

Python技能树练习——python字符串转列表

一、题目与解 把下列字符串转为列表格式输出 top_ide_trend """ Rank Change IDE Share Trend 1 Visual Studio 29.24 % 3.5 % 2 Eclipse 13.91 % -2.9 % 3 Visual Studio Code 12.07 % 3.3 % 4 Android Studio 9.13 % -2.5 % 5 pyCharm 8.43 % 0.7 % 6 …

【设计模式】设计模式概述

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

中文编程工具开发软件实际案例:酒店饭店餐饮点餐管理系统软件编程实例

中文编程工具开发软件实际案例&#xff1a;酒店饭店餐饮点餐管理系统软件编程实例图片如下 软件的安装方法&#xff1a; 软件绿色免安装&#xff0c;压缩包文件解压后&#xff0c;将文件夹复制到电脑的D或E盘里&#xff0c;将软件目录下的红色程序图标按右键发送到桌面快捷方式…

泛微全新低代码平台e-builder在沪发布,超千名与会者共商数字化转型

10月18日下午&#xff0c;泛微低代码平台体验大会在上海顺利举办&#xff0c;大会以“智能、协同、全程数字化”为主题&#xff0c;吸引了上千位政府及企事单位的信息化负责人参与。 活动现场&#xff0c;参会者身临其境地体验了泛微低代码平台&#xff0c;了解了泛微低代码平…

【树莓派c++图像处理起航1】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Qt OPENCV 安装测试&#xff1f;1. 安装qt2.安装opencv 的基础库3. 安装的路就决定了不会一帆风顺3.1.QT 安装出错3.2 运行Qt错误 4. opencv实际路径&#…