vue3+vite +element-plus+tailwindcss兼容低版本浏览器(uc)

news2024/11/18 7:42:40

部分问题

uc浏览器 rgb支持不全 如rgb(0 0 0 /30%) 这种写法不支持
tailwindcss v3 部分样式在低版本下也不支持
uc浏览器 对于 tailwindcss boxShadow 不支持 主要还是rgb原因

兼容 直接贴出代码

使用 tailwindcss @2.2.16 版本 v3低版本不支持
tailwindcss v2的 jit模式 和 任意值 arbitrary value 语法 已经足够好了
浏览器 import() 支持程度 如下图 https://caniuse.com/es6-module-dynamic-import; 可以用 vite 提供的 @vitejs/plugin-legacy插件 兼容
在这里插入图片描述
但是 vue3使用了 proxy代理 @vitejs/plugin-legacy插件就行不通了 如ie11不支持proxy 只能用vue2了
浏览器 import() 支持程度 如下图 https://caniuse.com/?search=proxy

在这里插入图片描述

安装
npm install -D @vitejs/plugin-legacy
npm install -D terser
使用

npm build 打包后 低版本浏览器才能打开
开发模式下 vite不会编辑处理 @vitejs/plugin-legacy
而低版本浏览器 不支持 原生esm 所以还是一片空白
原生esm 浏览器支持程度 https://caniuse.com/?search=ESM%20

如下图 chrome<60,Edge<15,Firefox<59 不支持 native ESM 在这里插入图片描述

package.json 文件
{
  "name": "vue-project",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "dev": "vite --host",
    "build": "run-p type-check build-only",
    "preview": "vite preview",
    "test:unit": "vitest --environment jsdom --root src/",
    "test:e2e": "start-server-and-test preview :4173 'cypress run --e2e'",
    "test:e2e:dev": "start-server-and-test 'vite dev --port 4173' :4173 'cypress open --e2e'",
    "build-only": "vite build",
    "type-check": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false",
    "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore"
  },
  "dependencies": {
    "@element-plus/icons-vue": "^2.0.10",
    "axios": "^1.2.1",
    "dayjs": "^1.11.7",
    "element-plus": "^2.2.27",
    "pinia": "^2.0.28",
    "vue": "^3.2.45",
    "vue-router": "^4.1.6"
  },
  "devDependencies": {
    "@rushstack/eslint-patch": "^1.1.4",
    "@types/jsdom": "^20.0.1",
    "@types/node": "^18.11.12",
    "@vitejs/plugin-legacy": "^3.0.1",
    "@vitejs/plugin-vue": "^4.0.0",
    "@vitejs/plugin-vue-jsx": "^3.0.0",
    "@vue/eslint-config-prettier": "^7.0.0",
    "@vue/eslint-config-typescript": "^11.0.0",
    "@vue/test-utils": "^2.2.6",
    "@vue/tsconfig": "^0.1.3",
    "autoprefixer": "^10.4.13",
    "cypress": "^12.0.2",
    "eslint": "^8.22.0",
    "eslint-plugin-cypress": "^2.12.1",
    "eslint-plugin-vue": "^9.3.0",
    "jsdom": "^20.0.3",
    "npm-run-all": "^4.1.5",
    "postcss": "^8.4.20",
    "prettier": "^2.7.1",
    "sass": "^1.32.8",
    "sass-loader": "10.1.1",
    "start-server-and-test": "^1.15.2",
    "tailwindcss": "^2.2.16",
    "terser": "^5.16.1",
    "typescript": "~4.7.4",
    "unplugin-auto-import": "^0.12.1",
    "unplugin-vue-components": "^0.22.12",
    "vite": "^4.0.0",
    "vitest": "^0.25.6",
    "vue-tsc": "^1.0.12"
  }
}

vite.config.ts 文件
import { fileURLToPath, URL } from "node:url"

import { defineConfig } from "vite"
import vue from "@vitejs/plugin-vue"
import vueJsx from "@vitejs/plugin-vue-jsx"

import AutoImport from "unplugin-auto-import/vite"
import Components from "unplugin-vue-components/vite"
import { ElementPlusResolver } from "unplugin-vue-components/resolvers"
import legacy from "@vitejs/plugin-legacy"
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
    legacy({
      polyfills: ["es.promise.finally", "es/map", "es/set"],
      targets: ["chrome<60"],
      modernPolyfills: ["es.promise.finally"],
    }),
  ],
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
})

tailwindcss 内容

安装

低版本需要安装 tailwindcss@2.2.16 版本

npm install -D tailwindcss@2.2.16 postcss@latest autoprefixer@latest

具体参考 tailwindcss中文网 在 Vue 3 和 Vite 安装 Tailwind CSS

postcss.config.js 文件
module.exports = {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  },
}

tailwind.config.js 文件 v2版 多余内容自行删除
// module.exports = {
//   purge: [],
//   darkMode: false, // or 'media' or 'class'
//   theme: {
//     extend: {},
//   },
//   variants: {
//     extend: {},
//   },
//   plugins: [],
// }
/** @type {import('tailwindcss').Config} */
// eslint-disable-next-line no-undef
// 不能 import es模式引入 colors 这样 同一文件出现import与 module.exports  会报错
// import _colors from "./src/assets/tailwind/colors";
// 添加自定义样式
// eslint-disable-next-line no-undef
const myPlugin = require("./src/assets/tailwind/tailwindcssPlugin")
// eslint-disable-next-line no-undef
const _colors = require("./src/assets/tailwind/colors")
// eslint-disable-next-line no-undef
module.exports = {
  mode: "jit",
  // content: ["./src/**/*.html", "./src/**/*.vue", "./src/**/*.jsx"],
  purge: ["./src/**/*.html", "./src/**/*.vue", "./src/**/*.jsx"],
  // 禁用
  corePlugins: {
    // boxShadow 在低版本浏览器 tailwindcss生成的代码不能使用
    // 该方式 低版本浏览器不支持
    // box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
    boxShadow: false,
  },
  theme: {
    extend: {},
    colors: ({ colors }) => {
      let newColors = colors
      // delete newColors.lightBlue
      // delete newColors.warmGray
      // delete newColors.trueGray
      // delete newColors.coolGray
      // delete newColors.blueGray
      return {
        ...newColors,
        ..._colors,
      }
    },
    // boxShadow: ({ boxShadow }) => {
    //   return {
    //     ...boxShadow,
    //     outer_1: "0 2px 8px 0 rgba(0,0,0,0.3)",
    //   }
    // },
  },
  plugins: [myPlugin],
}

tailwind.config.js 文件 v3版 不兼容低版本
/** @type {import('tailwindcss').Config} */
// eslint-disable-next-line no-undef
// 不能 import es模式引入 colors 这样 同一文件出现import与 module.exports  会报错
// import _colors from "./src/assets/tailwind/colors";
// eslint-disable-next-line no-undef
const _colors = require("./src/assets/tailwind/colors")
// eslint-disable-next-line no-undef
module.exports = {
  content: ["./src/**/*.html", "./src/**/*.vue", "./src/**/*.jsx"],
  theme: {
    extend: {},
    colors: ({ colors }) => {
      let newColors = colors
      delete newColors.lightBlue
      delete newColors.warmGray
      delete newColors.trueGray
      delete newColors.coolGray
      delete newColors.blueGray
      return {
        ...newColors,
        ..._colors,
      }
    },
    boxShadow: ({ boxShadow }) => {
      return {
        ...boxShadow,
        outer_1: "0 2px 8px 0 rgb(0 0 0 / 30%)",
      }
    },
  },
  plugins: [],
}

效果

未打包 dev开发模式下 uc浏览器 预览效果 一片空白

在这里插入图片描述

打包后的文件 uc浏览器 预览效果 正常显示

在这里插入图片描述

未打包 dev开发模式下 高版本 Chrome内核 谷歌浏览器 效果

在这里插入图片描述

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

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

相关文章

插值算法基本原理

插值&#xff1a;数据处理的手段 将缺失数据补全处理 线性内插 拉格朗日插值法 牛顿插值 拟合&#xff1a;预测&#xff0c;寻找规律的手段 是插值的外延 插值算法&#xff1a;使用在现有的数据极少&#xff0c;不足以支撑分析的进行&#xff0c;这时就需要使用一些数学方法…

植物激素基因高级分析来啦~

很多植物转录组学文章中&#xff0c;都有整合激素相关基因和表达数据的pathway图&#xff0c;直观地展示通路及其中重要基因的位置和功能。 植物激素&#xff08;Phytohormone&#xff09;亦称植物天然激素或植物内源激素&#xff0c;是指植物体内产生的一些微量而能调节&…

排序算法——快速排序

快排 ​ 确定一组数据 &#xff0c;即q数组 ​ 左端点为了&#xff0c;右端点为r ​ &#xff08;1&#xff09;确定分界点 ​ q[l] 或 q[ (l r) / 2] 或 q[r] 或任意一个数 作为分界点&#xff0c;分界点数为x ​ &#xff08;2&#xff09;调整区间 &#xff08;重点&a…

能源监控管理系统|瑜岿科技

瑜岿科技在产业转型升级过程中积极布局智能制造、物联网产业细分领域&#xff0c;拥抱多元化市场。立足市场、顺势而为&#xff0c;以创新理念驱动产业变革&#xff0c;以互联网、物联网思维重塑经营模式&#xff0c;成功打造“碳中和 碳达峰”背景下——能源监控管理系统。 智…

leetCode周赛-317

这里写目录标题题目一&#xff1a;6220.可被三整除的偶数的平均值题目二&#xff1a;6221. 最流行的视频创作者题目三&#xff1a;6222. 美丽整数的最小增量题目四&#xff1a;2458. 移除子树后的二叉树高度题目一&#xff1a;6220.可被三整除的偶数的平均值 AC代码&#xff1…

考研数学练习题-2022年12月23日

日期&#xff1a;2022年12月23日 数量&#xff1a;10

deck.gl 调研

0 结论 deck gl 是基于 WebGL 的数据可视化框架&#xff0c;可以集成在主流的地图框架&#xff08;arcgis&#xff0c;google maps&#xff0c;mapbox &#xff09;中使用&#xff0c; 也可以单独使用。 deck gl 通过layer进行数据可视化&#xff0c;支持多种展示效果&#xf…

什么是网络监控?OpManager 网络监控解决方案

什么是网络监控 在当今世界&#xff0c;术语网络监控在整个IT行业中很普遍。网络监控是一个关键的 IT 过程&#xff0c;其中所有网络组件&#xff08;如路由器、交换机、防火墙、服务器和虚拟机&#xff09;都受到故障和性能监控&#xff0c;并持续评估以维护和优化其可用性。…

基于防火墙双击热备三层网络规划_ensp综合实验

作者&#xff1a;BSXY_19计科_陈永跃BSXY_信息学院注&#xff1a;未经允许禁止转发任何内容基于防火墙双击热备三层网络规划_ensp综合实验前言及技术/资源下载说明&#xff08; **未经允许禁止转发任何内容** &#xff09;插曲&#xff1a;基于eNSP中大型校园/企业网络规划与设…

聊聊首次使用航顺HK32F030C8T6的体验

先说结论&#xff0c;项目基本上开发测试完成了,mcu运行正常。 这个项目是一个智能家居的项目&#xff0c;主板和副板都使用了HK32F030C8T6&#xff0c;这也是笔者第一次使用航顺的芯片。 关于这个芯片的资料&#xff0c;从官网只能下载到datasheet和user mannal的pdf文档&am…

代码随想录训练营第59天|LeetCode 503.下一个更大元素II、42. 接雨水

参考 代码随想录 题目一&#xff1a;LeetCode 503.下一个更大元素II 这个题在496. 下一个更大元素 I基础上数组变成了环&#xff0c;其实两次两次数组就可以了。代码如下&#xff1a; class Solution { public:vector<int> nextGreaterElements(vector<int>&am…

即时通讯实时视频聊天技术提供QoS保证的方法

随着WebRTC标准的逐步推广&#xff0c;实时音视频通讯技术受到越来越多公司和技术人员的关注。 对于交互式音视频应用而言&#xff0c;稳定、低延时、通话质量清晰可靠是其基本需求。在互联网环境下&#xff0c;音视频的通话质量与以下因素有关&#xff1a;一是编码码率、帧率和…

Opencv IplImage 和 Mat 使用介绍

1. IPIImage 使用介绍 IplImage是OpenCV中CxCore部分基础的数据结构&#xff0c;用来表示图像&#xff0c;其中Ipl是Intel Image Processing Library的简写。以下是IplImage的结构分析。参见:OpenCV中文网站 typedef struct _IplImage{int nSize; /* IplImage大小 *…

70页幻灯片图解“工信领域数据安全管理办法”等五部委数据法规

国家安全是民族复兴的根基。党的二十大报告指出&#xff0c;“加快建设制造强国、质量强国、航天强国、交通强国、网络强国、数字中国”、“推进国家安全体系和能力现代化”、“强化经济、重大基础设施、金融、网络、数据、生物、资源、核、太空、海洋等安全保障体系建设”。数…

02-redis篇 redis事务处理及使用方式

目录 1. 事务简介: -> 1.1 必须满足: ACID四个特性(原子性,一致性,隔离性,持久性) -> 1.2 简单理解: 一个业务,也可以看成是一个逻辑工作单元; 2. redis 操作事务的基本指令 -> 指令: -> 图式: 3. 模拟多事务操作(watch乐观锁) 3.1 不开启乐观锁watch操作…

Linux Python安装

1.到官网下载适合自己的版本 Python Source Releases | Python.orgThe official home of the Python Programming Languagehttps://www.python.org/downloads/source/2.下载好压缩包之后&#xff0c;将压缩包解压开 3.将开发环境的依赖包准备好 yum -y install zlib-devel bz…

阅读笔记 MulDA: DAGA向多语言方向的拓展

阅读笔记 MulDA: DAGA向多语言方向的拓展 文章目录阅读笔记 MulDA: DAGA向多语言方向的拓展前言概述IntroductionMulDA: Our Multilingual Data Augmentation Framework1、Labeled Sequence Translation2、Synthetic Data Generation with Language Models3、Semi-supervised M…

Tableau可视化设计案例-05Tableau进阶

文章目录Tableau可视化设计案例05Tableau进阶1.数据集合并1.1 数据导入界面1.2超市销售情况符号地图1.3智能显示1.4 仪表盘高级应用Tableau可视化设计案例 本文是Tableau的案例&#xff0c;为B站视频的笔记&#xff0c;B站视频 参考&#xff1a;https://www.bilibili.com/vide…

怎么使用CAM350检查Gerber?

文章目录什么是Gerber文件&#xff1f;Gerber中的文件由那些组成&#xff1f;怎么使用CAM350检查Gerber&#xff1f; ——导入CAM350的基础操作&#xff1a;对层的操作什么是Gerber文件&#xff1f; Gerber文件是设计完后PCB(brd文件)板文件后交给板厂制造成品的文件。Gerber一…

代码随想录刷题记录 day50 每日温度+下一个更大元素 I

代码随想录刷题记录 day50 每日温度下一个更大元素 I 739. 每日温度 思想 1.暴力解 两次for 超时了 2.单调栈 花了点时间理解的。 单调栈的基础入门题。找到一个数组中右边的第一个大于 等于 或者小于当前元素的下标的位置 以时间换空间&#xff0c;用一个栈来记录右边第…