Skip to content

引入 element-plus 和 px2toviewport

引入 element-plus

安装

js
pnpm install element-plus @element-plus/nuxt -S
pnpm install @element-plus/icons-vue -S

新建插件

  • 架构
bash
├── plugins
   ├── element-plus-icons.js

element-plus-icons.js 里面写入

ts
// plugins/element-plus-icons.js
import * as ElementPlusIconsVue from "@element-plus/icons-vue";

export default defineNuxtPlugin((nuxtApp) => {
  // 遍历ElementPlusIconsVue对象,并注册所有图标为全局组件
  for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
    nuxtApp.vueApp.component(key, component);
  }
});

引入

  • nuxt.config.js
ts
// nuxt.config.ts
import { defineNuxtConfig } from "nuxt";

export default defineNuxtConfig({
  // 其他配置...
  plugins: [
    "~/plugins/element-plus-icons.js", // 引入图标插件
  ],
  // 如果已经安装了@element-plus/nuxt来全局引入Element Plus,确保也配置了它
  modules: [
    "@element-plus/nuxt", // 如果需要全局引入Element Plus
  ],
  // Element Plus的配置(如果需要)
  elementPlus: {
    // 配置项...
  },
});

使用

html
<el-button type="primary">Primary Button</el-button>
<el-icon class="el-icon--right">
  <arrow-down />
</el-icon>

引入 px2toviewport

js
pnpm install postcss-px-to-viewport -S

配置 px2toviewport

nuxt.config.ts 中添加以下配置:

js
// 适配
postcss: {
    plugins: {
        'postcss-px-to-viewport': {
            viewportWidth: 1920 /** 设计稿的视口宽度 */,
            unitToConvert: 'px' /** 需要转换的单位,默认为"px" */,
            unitPrecision: 5 /** 单位转换后保留的精度 */,
            propList: ['*'] /** 能转化为vw的属性列表 */,
            viewportUnit: 'vw' /** 希望使用的视口单位 */,
            fontViewportUnit: 'vw' /** 字体使用的视口单位 */,
            selectorBlackList: [] /**  需要忽略的CSS选择器 */,
            minPixelValue: 1 /** 设置最小的转换数值 */,
            mediaQuery: true /** 媒体查询里的单位是否需要转换单位 */,
            replace: true /** 是否直接更换属性值,而不添加备用属性 */,
            exclude: undefined /** 忽略某些文件夹下的文件或特定文件 */,
            include: undefined /**  设置将只有匹配到的文件才会被转换 */,
            landscape: false /** 是否添加根据 landscapeWidth 生成的媒体查询条件 @media */,
            landscapeUnit: 'rem' /** 横屏时使用的单位 */,
            landscapeWidth: undefined /** 横屏时使用的视口宽度 */
        }
    }
}
  • 使用
html
<style scoped lang="scss">
  /* 这样他就会自动转义 */
  .test {
    width: 192px;
    height: 192px;
    background: red;
  }
</style>