postcss-px-to-viewport实现屏幕适配

文章介绍了如何通过vw和vh单位进行移动端屏幕适配,以及如何利用postcss-px-to-viewport插件将px转换为vw和vh,解决不同设备的适配问题。在项目中配置该插件时遇到了typescript缺少声明文件的问题,通过手动创建声明文件和调整配置参数成功解决了问题,并通过一个小demo验证了插件的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近面试,很多面试官都问做过移动端吗?屏幕适配应该怎么实现呢?无奈自己太菜,粗略回答是通过rem,bootstrap栅格布局去实现。面试官再问还有其他的方式实现吗?然后我就一脸黑人问号,加上最近看一位b站博主小满zs的教学视频,刚好看到这个章节,所以特意记录来下,加深一下自己的印象。

现在有了更好用的vw跟vh。

vw视口的最大宽度,1vw等于视口宽度的百分之一

vh视口的最大高度,1vh等于适口高度的百分之一

我们的ui设计稿上面一般标注的是px,所以我们需要使用一个插件来把px转换成为vw跟vh。

首先我们先来创建一个项目

然后用vs code打开项目,安装一下相关依赖,运行一下

npm run dev

项目可以正常运行的话,下面就可以进入正题了,安装一下所需的插件

npm install postcss-px-to-viewport -D

然后我们需要在vite.config.ts里面配置一下这个插件

但是里面会有一个报错,说这个插件缺少一个声明文件,我们尝试用这个方法去装一下,还是会一样报错,所以说明社区并没有给这个插件去写声明文件,所以这个插件目前是不支持ts的,那么或者我们去手写这个声明文件。

我们在根目录下创建一个postcss-px-to-viewport.d.ts文件,我们通过declare module给这个插件去扩充声明。

然后我们需要tsconfig.config.json里面引入一下postcss-px-to-viewport.d.ts这个文件

声明完之后,这个插件还要传一些参数

这里给你们贴出来

unitToConvert: 'px' | 'rem' | 'cm' | 'em',
viewportWidth: number,
viewportHeight: number, // not now used; TODO: need for different units and math for different properties
unitPrecision: number,
viewportUnit: string,
fontViewportUnit: string,  // vmin is more suitable.
selectorBlackList: string[],
propList: string[],
minPixelValue: number,
mediaQuery: boolean,
replace: boolean,
landscape: boolean,
landscapeUnit: string,
landscapeWidth: number

这时候报错已经不见了,这个插件常用到两个参数只有两个

下面我们就写个小demo测试一下这个插件, 这里需要提醒一下需要安装一下npm install less,不然运行的时候会报错

<template>
  <div class="wraps">
    <header class="header">
      <div>left</div>
      <div>中间</div>
      <div>right</div>
    </header>
    <main class="main">
      <div class="main-items" v-for="item in 100">
        <div class="main-port"></div>
        <div class="main-desc">
          <div>小霖{{ item }}</div>
          <div>小霖dec描述内容</div>
        </div>
      </div>
    </main>
    <footer class="footer">
      <div class="footer-items" v-for="item in footer">
        <div>{{ item.icon }}</div>
        <div>{{ item.text }}</div>
      </div>
    </footer>
  </div>
</template>

<script setup lang='ts'>
import { reactive } from 'vue'
type Footer<T> = {
  icon: T,
  text: T
}

const footer = reactive<Footer<string>[]>([
  {
    icon: "1",
    text: "首页"
  },
  {
    icon: "2",
    text: "商品"
  },
  {
    icon: "3",
    text: "信息"
  },
  {
    icon: "4",
    text: "我的"
  },
])

</script>

<style lang="less">
* {
  padding: 0;
  margin: 0;
}

html,
body,
#app {
  overflow: hidden;
  height: 100%;
}

.wraps {
  height: inherit;
  display: flex;
  flex-direction: column;
  overflow: hidden;

}

.header {
  display: flex;
  background: pink;
  justify-content: space-around;
  padding: 5px;
}

.main {
  flex: 1;
  overflow: auto;

  &-items {
    border-bottom: 1px solid #ccc;
    padding: 5px;
    display: flex;
  }

  &-port {
    width: 30px;
    height: 30px;
    background: black;
    border-radius: 200px;
  }

  &-desc {
    margin-left: 10px;

    div:last-child {
      font-size: 10px;
      margin-top: 5px;
    }
  }
}

.footer {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr 1fr;
  border-top: 1px solid #ccc;

  &-items {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    padding: 3px;

    div:last-child {
      margin-top: 5px;
    }
  }
}
</style>

这时候我们发现插件已经成功帮我们把px转成vw、vh,已经实现屏幕适配了

最后,共勉一下,一定要持续学习,才能更好的拥抱变化。大家有兴趣的话,也可以去b站看看小满zs的教学视频,满满的干货~~主要是不花钱学习,哈哈哈

回答: postcss-px-to-viewport是一个用于将px单位转换为vw单位的PostCSS插件,适用于Vue项目。\[1\]要在Vue项目中使用postcss-px-to-viewport,首先需要安装postcsspostcss-loader,可以使用以下命令进行安装:npm i postcss postcss-loader -D。然后,安装postcss-px-to-viewport插件:npm i postcss-px-to-viewport -D。\[2\]接下来,需要在webpack配置中引入postcss-px-to-viewport插件,并进行相应的配置。可以参考以下示例代码:\[3\] ```javascript // 引入插件 const postcssPxToViewport = require("postcss-px-to-viewport"); module.export = { module: { rules: \[ { test: /\.css$/i, use: \[ "style-loader", "css-loader", { loader: "postcss-loader", options: { postcssOptions: { plugins: \[ postcssPxToViewport({ viewportWidth: 320, // 设计稿宽度 unitPrecision: 5, // px转换后的小数保留位数 minPixelValue: 1, // 小于多少像素不转换 selectorBlackList: \["ignore-"\], // 有ignore-* 的类名不会被转换 }), \], }, }, }, \], }, \], }, }; ``` 以上是一个简单的webpack配置示例,其中postcss-px-to-viewport插件的配置参数可以根据实际需求进行调整。配置完成后,postcss-px-to-viewport插件会自动将CSS中的px单位转换为vw单位,实现适配效果。 #### 引用[.reference_title] - *1* [vue3使用postcss-px-to-viewport适配屏幕](https://blog.csdn.net/wangping146/article/details/126436251)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [移动端适配 rem、postcss-pxtorem、postcss-px-to-viewport、vw vh](https://blog.csdn.net/xuyanl/article/details/129499800)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值