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

news2024/11/20 9:10:57

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,
      // 传入一个 variantsMap
      variantsMap: {
        // wx 对应的 %PLATFORM% 为 'MP-WEIXIN'
        // 有了这个配置,你就可以使用 wx:bg-red-300
        wx: '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.coloradmin.cn/o/1098832.html

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

相关文章

GeoServer源码运行(数据目录+数据库)

1、源码下载 下载地址:https://github.com/geoserver/geoserver/tree/2.23.2 图 2选择版本下载 2、启动配置 图 3主程序启动类配置 GeoServer主程序的启动类为web->app[gs-web-app]模块下test目录下“org.geoserve

3个g的文件怎么发送给别人?三种方法自由选择!

发送大文件不仅会耗费较长时间&#xff0c;同时也可能需要消耗更多的流量费用&#xff0c;更容易出现网络中断或其他传输错误。这时候就需要使用文件压缩工具将它们压缩为一个文件&#xff0c;然后将其发送到收件人。下面介绍了三种大体积压缩的方法&#xff0c;一起来看看吧&a…

探索未来:硬件架构之路

文章目录 &#x1f31f; 硬件架构&#x1f34a; 基本概念&#x1f34a; 设计原则&#x1f34a; 应用场景&#x1f34a; 结论 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

微信小程序里配置less

介绍 在微信小程序里&#xff0c;样式文件的后缀名都是wxss&#xff0c;这导致一个问题&#xff0c;就是页面样式过多的时候&#xff0c;要写很多的类名来包裹&#xff0c;加大了工作量&#xff0c;还很有可能会写错样式。这时可以配置一个less&#xff0c;会大大提高代码编辑…

Programming abstractions in C阅读笔记:p179-p180

《Programming Abstractions In C》学习第60天&#xff0c;p179-p180总结。 一、技术总结 1.palindrome(回文) (1)包含单个字符的字符串(如"a")&#xff0c;或者空字符串(如" ")也是回文。 (2)示例&#xff1a;“level”、“noon”。 2.predicate fun…

优维产品使用最佳实践:实例拓扑

背 景 实例拓扑可以帮助我们直观地了解整个系统的架构和组成情况&#xff0c;该拓扑图是通过已有的实例的关联关系自动生成&#xff0c;当实例数据和关系变化时拓扑图也能实时更新&#xff0c;我们可以快速直观的查看当前实例下所有资源的之间的网状关系和资源数量。 实例拓扑…

ChatGPT DALL-E 3的系统提示词大全

每当给出图像的描述时&#xff0c;使用dalle来创建图像&#xff0c;然后用纯文本总结用于生成图像的提示。如果用户没有要求创建特定数量的图像&#xff0c;默认创建四个标题&#xff0c;这些标题应尽可能多样化。发送给Dalle的所有标题都必须遵循以下策略&#xff1a;1.如果描…

探索低代码技术

低/无代码的高速发展&#xff0c;属于软件市场的选择&#xff0c;相较于传统编写代码的开发方式&#xff0c;低/无代码开发效率高、投入成本低、技术门槛也更低&#xff0c;未来更多软件应用将使用低/无代码技术完成&#xff0c;这也是趋势。 身为开发人员经常需要花大量时间在…

2011年408真题复盘

紫色标记是认为有一定的思维难度或重点总结 红色标记是这次刷真题做错的 记录自己对题目的一些想法与联系&#xff0c;可能并不太关注题目本身。 分数用时 选择部分10.14 78/8037min大题部分10.1456/7080min总分134117min 摘自知乎老哥&#xff1a;“我做历年真题时&#xff0c…

VR、AR、MR、XR到底都是什么?有什么区别

目录 VRARMRXRAR、VR、MR、XR的区别 VR 英&#xff1a;Virtual Reality 中文翻译&#xff1a;虚拟现实 又称计算机模拟现实。是指由计算机生成3D内容&#xff0c;为用户提供视觉、听觉等感官来模拟现实&#xff0c;具有很强的“临场感”和“沉浸感”。我们可以使用耳机、控制器…

drawio简介以及下载安装

drawio简介以及下载安装 drawio是一款非常强大的开源在线的流程图编辑器&#xff0c;支持绘制各种形式的图表&#xff0c;提供了 Web端与客户端支持&#xff0c;同时也支持多种资源类型的导出。 访问网址&#xff1a;draw.io或者直接使用app.diagrams.net直接打开可以使用在线版…

前端设计模式应应用场景

前端设计模式应应用场景 创建型模式(Creational Patterns)工厂模式单例模式原型模式 行为型模式(Behavioral Patterns)策略模式观察者模式/发布订阅模式迭代器模式状态模式 结构型模式(Structural Patterns)装饰器模式代理模式 创建型模式(Creational Patterns) 处理对象的创建…

基于FPGA的图像高斯滤波实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a vivado2019.2 3.部分核心程序 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 202…

尚硅谷Docker核心技术

目录 第1课时 docker_前提知识要求和课程简介第2课时 docker_为什么会出现第3课时 docker_理念第4课时 docker_是什么&#xff1f;第5课时 docker_能干什么第6课时 docker_3要素第7课时 centos6安装Dockercentos7安装Docker第9课时 阿里云镜像加速器配置第10课时 helloworld镜像…

FPGA project : flash_continue_write

本实验学习了通过spi通信协议&#xff0c;驱动flash&#xff1b;完成连续写操作。 连续写&#xff1a; 本质上还是页编程指令&#xff0c;两种连续写的方式&#xff1a; 1&#xff0c;每次只写1byte的数据。 2&#xff0c;每次写满1页数据&#xff0c;计算剩余数据够不够写…

Java实现微信支付、退款(小程序支付JSAPI-V3-整合微信sdk开发)

一、废话不多说&#xff0c;直接上教程&#xff1a; 写代码之前首先要明白微信支付的支付流程。 二、支付流程&#xff1a; 小程序调用后端预支付接口 > 预支付接口调用成功返回给小程序支付凭证id > 小程序拿到支付凭证调用微信后台支付接口 > 小程序支付成功后&am…

JOSEF约瑟 多档切换式漏电(剩余)继电器JHOK-ZBL1 30/100/300/500mA

系列型号&#xff1a; JHOK-ZBL多档切换式漏电&#xff08;剩余&#xff09;继电器&#xff08;导轨&#xff09; JHOK-ZBL1多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBL2多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBM多档切换式漏电&#xf…

自己写spring boot starter问题总结

1. Unable to find main class 创建spring boot项目写自己的starterxi写完之后使用install出现Unable to find main class&#xff0c;这是因为spring boot打包需要一个启动类&#xff0c;按照以下写法就没事 <plugins><plugin><groupId>org.springframewo…

嵌入式系统学习路径:

嵌入式系统学习路径&#xff1a; 00001. 确保扎实的C语言基础&#xff0c;包括高级编程知识和数据结构算法。 00002. 00003. 学习Linux应用层开发&#xff0c;包括并发程序设计、网络编程和数据库开发。 00004. 00005. 探索无线通信领域&#xff0c;如Zigbee、低功…

OpenHarmony创新赛|赋能直播第四期

开放原子开源大赛OpenHarmony创新赛进入了中期评审环节&#xff0c;为了解决开发者痛点&#xff0c;本期以三方库移植、MQTT移植案例、开发工具介绍的3节系列技术课程&#xff0c;帮助开发者提升开发效率&#xff0c;为作品的创新能力奠定坚实基础。 扫描下方长图二维码&#x…