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

【Vue3】PostCss 适配

  • px 固定的单位,不会进行自适应。
  • rem r = root font-size=16px 1rem=16px,但是需要手动进行单位的换算
  • vw vh 相对于视口的尺寸,不同于百分比(相对于父元素的尺寸)375屏幕 1vw = 3.75px

利用插件进行 px(设计稿)=> viewport。

vite 内置了 PostCss 。

Declaration(node) {console.log(node.prop,node.value)
},

在这里插入图片描述

具体实现

  1. 清除默认样式
<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"/><link rel="icon" type="image/svg+xml" href="/vite.svg"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Vite + Vue + TS</title><style>* {padding: 0;margin: 0;}html, body, #app {height: 100%;overflow: hidden;}</style>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
  1. 写个圣杯布局(三栏布局)
<template><header><div class="left">left</div><div class="center">center</div><div class="right">right</div></header>
</template><script setup lang="ts"></script><style scoped lang="less">
header {display: flex;.left {width: 100px;height: 50px;background: lightblue;}.center {flex: 1;height: 50px;background: lightcoral;}.right {width: 100px;height: 50px;background: lightgoldenrodyellow;}
}
</style>

在这里插入图片描述

  1. 忽略一些不必要的报错
    在这里插入图片描述

tsconfig.node.json

{"compilerOptions": {"composite": true,"skipLibCheck": true,"module": "ESNext","moduleResolution": "bundler","allowSyntheticDefaultImports": true,"noImplicitAny": false},"include": ["vite.config.*","plugins/**/*"]
}
  1. 编写插件
// vite 内置了 postcss 插件,无需安装
import {Plugin} from "postcss";const Options = {viewPortWidth: 375  // UI设计稿的宽度,给多少写多少
}interface Options {viewPortWidth: number
}export const PostcssPxToViewport = (options: Options = Options): Plugin => {const opt = Object.assign({}, Options, options)return {postcssPlugin: 'postcss-px-to-viewport',Declaration(node) {// 这里的px可以写成自定义任意单位,保证只有部分单位需要转换if (node.value.includes('px')) {const num = parseFloat(node.value)node.value = `${((num / opt.viewPortWidth) * 100).toFixed(2)}vw`}},}
}
  1. vite配置

在这里插入图片描述

vite.config.ts

export default defineConfig({plugins: [vue()],// 通过配置变为全局通用样式css: {preprocessorOptions: {scss: {additionalData: '@import "./src/bem.scss";',},},postcss: {plugins: [PostcssPxToViewport()]}}
})

在这里插入图片描述

相关文章:

  • GO基本类型一些记录
  • Spring八股 常见面试题
  • 爆红提醒:ESLint: Parsing error: Unexpected token. Did you mean `{‘>‘}` or `gt;`?
  • Java如何添加批量添加水印
  • 【vue3】命令式组件封装,message封装示例;(函数式组件?)
  • 监听者的力量:探索观察者模式和spring使用
  • [NOIP2007 普及组] 纪念品分组--贪心算法
  • 论文里点击如图?-?如何跳转到图片的题注
  • 探秘SpringBoot启动流程:原理解析与自定义扩展
  • Mongodb基础(node.js版)
  • C2_W2_Assignment_吴恩达_中英_Pytorch
  • 【简略知识】项目开发中,VO,BO,PO,DO,DTO究竟是何方妖怪?
  • 腾讯云幻兽帕鲁服务器如何安全下载WorldOption.sav文件?
  • 抖音视频批量下载软件|视频评论采集工具
  • 开源视频转码器HandBrake
  • @jsonView过滤属性
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • ES学习笔记(12)--Symbol
  • gf框架之分页模块(五) - 自定义分页
  • Git 使用集
  • Github访问慢解决办法
  • gops —— Go 程序诊断分析工具
  • HTML中设置input等文本框为不可操作
  • JS 面试题总结
  • js写一个简单的选项卡
  • Laravel5.4 Queues队列学习
  • Lsb图片隐写
  • PV统计优化设计
  • REST架构的思考
  • windows下如何用phpstorm同步测试服务器
  • 关于字符编码你应该知道的事情
  • 力扣(LeetCode)56
  • 排序算法之--选择排序
  • 设计模式 开闭原则
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 从如何停掉 Promise 链说起
  • 第二十章:异步和文件I/O.(二十三)
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​什么是bug?bug的源头在哪里?
  • #include
  • #Z0458. 树的中心2
  • $.proxy和$.extend
  • $refs 、$nextTic、动态组件、name的使用
  • (bean配置类的注解开发)学习Spring的第十三天
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (论文阅读40-45)图像描述1
  • (七)c52学习之旅-中断
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)fock函数详解
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .bat批处理(六):替换字符串中匹配的子串