当前位置: 首页 > news >正文

Vue3自定义PostCss插件

Vue3自定义PostCss插件

      • 插件功能: 实现自动转px为vw功能
    • 1. 创建插件ts文件
    • 2. tsconfig.node.json引入插件
    • 3. vite.config.ts增加插件配置
    • 4. 编写插件内容
    • 5. 示例

插件功能: 实现自动转px为vw功能

px 固定单位,不会随着屏幕的变化而变化
vh vw 相对于视口高宽进行控制

1. 创建插件ts文件

在这里插入图片描述

2. tsconfig.node.json引入插件

"include": ["vite.config.ts","plugins/**/*"]

3. vite.config.ts增加插件配置

import { PostCssToViewport } from './plugins/postcss-px-to-viewport'// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(),vueJsx()],css:{//配置自定义postcss插件postcss:{plugins:[PostCssToViewport()]},},})

4. 编写插件内容

//postcss插件
import { Plugin } from "postcss"const Options = {viewportWidth: 375,//默认视口宽度
}
interface Options {viewportWidth?:number
}export const PostCssToViewport = (options:Options = Options):Plugin =>{const opt = Object.assign({},Options,options);return {postcssPlugin: 'postcss-px-to-viewport',//钩子函数Declaration(node){//判断需要转换的单位if(node.value.indexOf('xm') != -1){console.log(node.prop,node.value);const num = parseFloat(node.value);node.value = `${((num / opt.viewportWidth)*100).toFixed(2)}vw`}}}
}

插件会将样式中是自定义单位(xm)装换为vw

5. 示例

<template><div><header class="header"><div>left</div><div>center</div><div>right</div></header></div>
</template><script setup lang=ts>
import {ref} from 'vue'</script><style scoped lang="less">.header{display: flex;div{height: 50px;line-height: 50px;color: #fff;text-align: center;}div:nth-child(1){width:100xm;background-color: #f00;}div:nth-child(2){flex:1;background-color: #0f0;}div:nth-child(3){width: 100xm;background-color: #00f;}
}
</style>

在这里插入图片描述

相关文章:

  • 蓝桥杯---生日蜡烛
  • 【机器学习】基于集成学习的 Amazon 用户评论质量预测
  • 重写Sylar基于协程的服务器(6、HOOK模块的设计)
  • MongoDB 聚合:$listSessions
  • Java 正则匹配sql
  • C#验证字符串的长度,用正则表达式 vs 字符数组长度或字符串的长度
  • 字符函数和字符串函数
  • 数据结构——B/顺序表和链表
  • 自动化报告pptx-python|如何将pandas的表格写入PPTX(二)
  • MAE实战:使用MAE提高主干网络的精度(一)
  • 回归预测 | Matlab实现WOA-CNN-LSTM-Attention鲸鱼算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)
  • Linux项目自动化构建工具之make/Makefile演示gcc编译
  • [MFC] MFC消息机制的补充
  • 网络安全-端口扫描和服务识别的几种方式
  • 2.3作业
  • 【RocksDB】TransactionDB源码分析
  • Bootstrap JS插件Alert源码分析
  • Java深入 - 深入理解Java集合
  • Mysql优化
  • Webpack 4 学习01(基础配置)
  • 从零开始的无人驾驶 1
  • 关于extract.autodesk.io的一些说明
  • 机器学习中为什么要做归一化normalization
  • 前端自动化解决方案
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #pragma data_seg 共享数据区(转)
  • #stm32整理(一)flash读写
  • #在 README.md 中生成项目目录结构
  • $L^p$ 调和函数恒为零
  • (31)对象的克隆
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (转)Linux整合apache和tomcat构建Web服务器
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .Net中的设计模式——Factory Method模式
  • .pyc文件是什么?
  • ??javascript里的变量问题
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [c++] C++多态(虚函数和虚继承)
  • [C++]Leetcode17电话号码的字母组合
  • [Codeforces1137D]Cooperative Game
  • [docker] Docker的私有仓库部署——Harbor
  • [FFmpeg学习]从视频中获取图片
  • [GPT]Andrej Karpathy微软Build大会GPT演讲(上)--GPT如何训练
  • [Java]快速入门优先队列(堆)手撕相关面试题
  • [JS]JavaScript 简介
  • [js高手之路] dom常用API【appendChild,insertBefore,removeChild,replaceChild,cloneNode】详解与应用...