weapp-tailwindcss for uni-app 样式条件编译语法插件

Image

weapp-tailwindcss for uni-app 样式条件编译语法插件

版本需求 2.10.0+

  • weapp-tailwindcss for uni-app 样式条件编译语法插件
    • 这是什么玩意?
    • 如何使用
      • tailwind.config.js 注册
      • postcss 插件注册
        • uni-app vite vue3
        • uni-app vue2
      • 配置完成
    • 配置项

这是什么玩意?

uni-app 里,存在一种类似宏指令的样式条件编译写法:

/*  #ifdef  %PLATFORM%  */
平台特有样式
/*  #endif  */

uni-app %PLATFORM% 的所有取值可以参考这个链接

weapp-tailwindcss@2.10.0+ 版本中内置了一个 css-macro 功能,可以让你的 tailwindcss 自动生成带有条件编译的样式代码,来辅助你进行多平台的适配开发,效果类似如下方式:

<!-- 默认 -->
<view class="ifdef-[H5||MP-WEIXIN]:bg-blue-400">Web和微信小程序平台蓝色背景</view>
<view class="ifndef-[MP-WEIXIN]:bg-red-500">非MP-WEIXIN平台红色背景</view>
<view class="ifdef-[MP-WEIXIN]:bg-blue-500 ifndef-[MP-WEIXIN]:bg-red-500">微信小程序为蓝色,不是微信小程序为红色<view>
<!-- 自定义 -->
<view class="wx:bg-blue-400 -wx:bg-red-400">微信小程序为蓝色,不是微信小程序为红色</view>
<view class="tt:bg-blue-400">头条小程序蓝色</view>

或者这样的条件样式代码:

/*只在 H5 和 MP-WEIXIN, 背景为蓝色,否则为红色 */
.apply-test-0 {@apply ifdef-[H5||MP-WEIXIN]:bg-blue-400 ifndef-[H5||MP-WEIXIN]:bg-red-400;
}
/* 自定义 */
.apply-test-1 {@apply mv:bg-blue-400 -mv:bg-red-400 wx:text-blue-400 -wx:text-red-400;
}

让我们看看如何使用吧!

如何使用

这里需要同时配置 tailwindcsspostcss 的配置文件才能起作用,其中 tailwindcss 配置修改的方式大体类似, uni-app vue2/3 postcss插件的注册方式,有些许不同:

tailwind.config.js 注册

首先在你的 tailwind.config.js 注册插件 cssMacro:

const cssMacro = require('weapp-tailwindcss/css-macro');
/** @type {import('tailwindcss').Config} */
module.exports = {// ...plugins: [/* 这里可以传入配置项,默认只包括 ifdef 和 ifndef */cssMacro(),],
};

postcss 插件注册

对应的 postcss 插件位置为 weapp-tailwindcss/css-macro/postcss

值得注意的是,你必须把这个插件,注册在 tailwindcss 之后和 @dcloudio/vue-cli-plugin-uni/packages/postcss 之前。

@dcloudio/vue-cli-plugin-uni/packages/postcss 为 vue2 cli项目特有,vue3不用管。

注册在 tailwindcss 之后很好理解,我们在针对 tailwindcss 的产物做修改,自然要在它执行之后处理,注册在 @dcloudio/vue-cli-plugin-uni/packages/postcss 之前则是因为 uni-app 样式的条件编译,靠的就是它。假如在它之后去处理不久已经太晚了嘛。

这里提一下 postcss 插件的执行顺序,假如注册是数组,那就是按照顺序执行,如果是对象,那就是从上往下执行,详见官方文档

uni-app vite vue3
// vite.config.ts 文件
import { defineConfig } from 'vite';
// postcss 插件配置
const postcssPlugins = [require('autoprefixer')(), require('tailwindcss')()];
// ... 其他省略
+ postcssPlugins.push(require('weapp-tailwindcss/css-macro/postcss'));
// https://vitejs.dev/config/
export default defineConfig({plugins: vitePlugins,css: {postcss: {plugins: postcssPlugins,},},
});

可以参考这个项目的配置 demo/uni-app-vue3-vite

uni-app vue2

vue2 cli 项目默认会带一个 postcss.config.js 我们之间直接在里面注册即可:

const webpack = require('webpack')
const config = {parser: require('postcss-comment'),plugins: [// ...require('tailwindcss')({ config: './tailwind.config.js' }),// ...
+   require('weapp-tailwindcss/css-macro/postcss'),require('autoprefixer')({remove: process.env.UNI_PLATFORM !== 'h5'}),
+   // 注意在 tailwindcss 之后和 这个之前require('@dcloudio/vue-cli-plugin-uni/packages/postcss')]
}
if (webpack.version[0] > 4) {delete config.parser
}
module.exports = config

可以参考这个项目的配置 demo/uni-app

配置完成

现在配置好了这2个地方,目前你就可以直接使用 ifdefifndef 的条件编译写法了!

<!-- 默认 -->
<view class="ifdef-[H5||MP-WEIXIN]:bg-blue-400">Web和微信小程序平台蓝色背景</view>
<view class="ifndef-[MP-WEIXIN]:bg-red-500">非MP-WEIXIN平台红色背景</view>
<view class="ifdef-[MP-WEIXIN]:bg-blue-500 ifndef-[MP-WEIXIN]:bg-red-500">微信小程序为蓝色,不是微信小程序为红色<view>
<!-- 自定义 -->
<view class="wx:bg-blue-400 -wx:bg-red-400">微信小程序为蓝色,不是微信小程序为红色</view>
<view class="tt:bg-blue-400">头条小程序蓝色</view>

不过你肯定会觉得这种默认写法很烦!要写很多,不要紧,我还为你提供了自定义的方式,接下来来看看配置项吧!

配置项

这里提供了一份示例,

uni-app %PLATFORM% 的所有取值可以参考这个链接

const cssMacro = require('weapp-tailwindcss/css-macro');
/** @type {import('tailwindcss').Config} */
module.exports = {// ...plugins: [/* 这里可以传入配置项,默认只包括 ifdef 和 ifndef */cssMacro({// 是否包含 ifdef 和 ifndef,默认为 true// dynamic: true,// 传入一个 variantsMapvariantsMap: {// wx 对应的 %PLATFORM% 为 'MP-WEIXIN'// 有了这个配置,你就可以使用 wx:bg-red-300wx: 'MP-WEIXIN',// -wx,语义上为非微信// 那就传入一个 obj 把 negative 设置为 true // 就会编译出 ifndef 的指令// 有了这个配置,你就可以使用 -wx:bg-red-300'-wx': {value: 'MP-WEIXIN',negative: true},mv: {// 可以使用表达式value: 'H5 || MP-WEIXIN'},'-mv': {// 可以使用表达式value: 'H5 || MP-WEIXIN',negative: true}}}),],
};

完整文档链接

https://weapp-tw.icebreaker.top/docs/quick-start/uni-app-css-macro

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

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

相关文章

如何在小程序中设置页面显示的文字

不同商家&#xff0c;对于小程序有不同的要求。所以&#xff0c;小程序应该支持商家在后台灵活配置小程序各个页面的文字显示。下面具体介绍如何显示各个页面的文字。 朋友圈分享图文字&#xff1a;会显示在朋友圈海报顶部 升级会员提示&#xff1a;对于普通会员&#xff0c;在…

C++ —— Tinyxml2在Vs2017下相关使用2(较文1更复杂,附源码)

相关链接 C —— Tinyxml2在Vs2017下相关使用1&#xff08;附源码&#xff09; tinyxml2简介 TinyXML2是一个简单&#xff0c;小巧&#xff0c;高效&#xff0c;CXML解析器&#xff0c;可以很容易地集成到其他程序中。TinyXML-2解析一个XML文档&#xff0c;并从中构建一个 可以…

基于Scrapyd与Gerapy部署scrapy爬虫方案【可用于分布式爬虫部署】

scrapyd部署爬虫 Scrapyd 是一个基于 Scrapy 的开源项目&#xff0c;它提供了一个简单的方式来部署、运行和监控 Scrapy 爬虫。它是一个用于集成 Scrapy 爬虫到分布式架构中的工具&#xff0c;允许您在分布式环境中运行爬虫&#xff0c;并提供了一组 Web API&#xff0c;用于管…

Spring()

一、导学 二、 1.入门程序 spring快照版本是最新的版本&#xff0c;未发布。需要用到<repository></> 下面这个不需要配置仓库&#xff0c;直接写在依赖中就行 引入spring相关依赖 <?xml version"1.0" encoding"UTF-8"?> <proje…

(Python) Python中三种时间格式的转换方法

1. 时间元组 1.1. 时间元组和时间戳的互相转化 import time,datetime # 获取当前时间的时间元组 t time.localtime() print(t) # 时间元组转时间戳 timestamp time.mktime(t) print(timestamp) # time.struct_time(tm_year2019, tm_mon10, tm_mday23, tm_hour23, tm_min15,…

中国移动集采120万部,助推国产5G赶超iPhone15

近期媒体纷纷传出消息指中国移动将大规模集采&#xff0c;预计将采购国产5G手机120万台&#xff0c;加上另外两家运营商的集采数量&#xff0c;估计集采数量可能达到300万部&#xff0c;如此将有助于它在国内高端手机市场赶超苹果。 国产5G手机在8月底突然上市&#xff0c;获益…

python+pytest接口自动化 —— 参数关联

什么是参数关联&#xff1f; 参数关联&#xff0c;也叫接口关联&#xff0c;即接口之间存在参数的联系或依赖。在完成某一功能业务时&#xff0c;有时需要按顺序请求多个接口&#xff0c;此时在某些接口之间可能会存在关联关系。 比如&#xff1a;B接口的某个或某些请求参数是…

攻防演练蓝队|Windows应急响应入侵排查

文章目录 日志分析web日志windows系统日志 文件排查进程排查新增、隐藏账号排查启动项/服务/计划任务排查工具 日志分析 web日志 dirpro扫描目录&#xff0c;sqlmap扫描dvwa Python dirpro -u http://192.168.52.129 -b sqlmap -u "http://192.168.52.129/dvwa/vulnera…

了解容器运行时安全:保护你的容器应用

前言 容器是一种虚拟化技术&#xff0c;用于封装和运行应用程序及其依赖项&#xff0c;以便在不同的计算环境中保持一致性和可移植性。自2013年容器诞生至今&#xff0c;容器Docker镜像的下载量超20亿&#xff0c;虽然容器行业发展如火如荼&#xff0c;但是其安全风险却不容乐…

Tips linux如何获取当前连接的ssh用户信息

linux ubuntu debian如何获取当前连接的ssh用户信息 这里需要用到一个常用的网络工具netstat&#xff0c;如果没有这个软件可以通过下边的命令安装&#xff1a; sudo apt-get install net-tools安装完成后通过下边的指令获取ssh所有连接用户&#xff1a; netstat -al|grep s…

EKP接口开发Webservice服务和Restservice服务以及定时任务Demo

继承com.landray.kmss.sys.webservice2.interfaces.ISysWebservice&#xff0c;同时在接口上使用WebService注解将其标识为WebService接口 package com.landray.kmss.third.notify.webservice;import com.alibaba.fastjson.JSONObject; import com.landray.kmss.sys.webservic…

学习开发一个RISC-V上的操作系统(汪辰老师) — 一次RV32I加法指令的反汇编

前言 &#xff08;1&#xff09;此系列文章是跟着汪辰老师的RISC-V课程所记录的学习笔记。 &#xff08;2&#xff09;该课程相关代码gitee链接&#xff1b; &#xff08;3&#xff09;PLCT实验室实习生长期招聘&#xff1a;招聘信息链接 前置知识 RISC-V 汇编指令编码格式 &a…

AFL安全漏洞挖掘

安全之安全(security)博客目录导读 ATF(TF-A)/OPTEE之FUZZ安全漏洞挖掘汇总 目录 一、AFL简介 二、AFL的安装 三、代码示例及种子语料库 四、AFL插桩编译 五、AFL运行及测试 六、AFL结果分析 一、AFL简介 模糊测试&#xff08;Fuzzing&#xff09;技术作为漏洞挖掘最有…

Go项目踩坑:go get下载超时,goFrame框架下的go项目里将vue项目的dist同步打包发布,go项目打包并压缩

Go项目踩坑&#xff1a;go get下载超时&#xff0c;goFrame框架下的go项目里将vue项目的dist同步打包发布&#xff0c;go项目打包并压缩 go get下载超时goFrame打包静态资源vue项目打包gf pack生成go文件 静态资源使用打包发布go项目交叉编译&#xff0c;省略一些不必要的信息通…

基于闪电连接过程优化的BP神经网络(分类应用) - 附代码

基于闪电连接过程优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于闪电连接过程优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.闪电连接过程优化BP神经网络3.1 BP神经网络参数设置3.2 闪电连接过程算…

超越平凡:Topaz Photo AI for Mac带您领略人工智能降噪的魅力

在这个充满噪点和高频信息的时代&#xff0c;照片和视频的降噪成为了一个重要而迫切的需求。Mac用户现在有了一个强大的新工具——Topaz Photo AI for Mac&#xff0c;这是一款利用人工智能技术进行降噪和优化的软件。通过这款软件&#xff0c;您可以轻松地改善图像质量&#x…

Ps:变形

Ps菜单&#xff1a;编辑/变换/变形 Edit/Transform/Warp 变形 Warp是自由变换的一种模式&#xff0c;不仅可以用于物体的伸缩扭曲&#xff0c;也可用于人体的局部塑形。 除了从菜单打开&#xff0c;通常情况下&#xff0c;按 Ctrl T 进入自由变换&#xff0c;然后在画面上右击…

分享一份适合练手的软件测试实战项目

最近&#xff0c;不少读者托我找一个能实际练手的测试项目。开始&#xff0c;我觉得这是很简单的一件事&#xff0c;但当我付诸行动时&#xff0c;却发现&#xff0c;要找到一个对新手友好的练手项目&#xff0c;着实困难。 我翻了不下一百个web网页&#xff0c;包括之前推荐练…

单目3D自动标注

这里介绍两种 1. 基于SAM的点云标注 Seal&#xff1a;是一个多功能的自监督学习框架&#xff0c;能够通过利用视觉基础模型的现成知识和2D-3D的时空约束分割自动驾驶数据集点云 Scalability&#xff1a;可拓展性强&#xff0c;视觉基础模型蒸馏到点云中&#xff0c;避免2D和…