postcss-px-to-viewport之vw、vh、rem

很久没有做过移动端的项目了,关于移动端的自适应,最早之前用rem,我个人觉得效果很不错。忘记是哪个大神的文章提到过,lib-flexible有一些问题,建议使用viewport,今天使用一下viewport。

先知道一下viewport的四个单位,vw、vh、vmax、vmin:
vw:1vw 等于视口宽度的1%
vh:1vh 等于视口高度的1%
vmin: 选取 vw 和 vh 中最小的那个
vmax:选取 vw 和 vh 中最大的那个

这边需要注意的是,vw是视口宽度,是连滚动条都算在内的:

<div style="width: 100vw;height: 20vh;background: #9dff00"></div>
<div style="width: 100%;height: 20vh;background: #005eff"></div>
<div style="width: 100vw;height: 80vh;background: #a6a9af"></div>

我把视口宽度拉到1000,因为出现滚动条,100vw的宽度是1000px,宽度是100%的则是983px。所以,用vw、vh的时候,注意要宽度百分百的时候,设置100%,否则底部会出现滚动条。当然,如果是移动端就没关系,移动端的滚动条是滑动的时候才出现,所以移动端的视口宽度就是百分百。

vmin和vmax的例子:

<div style="width: 100vw;height: 20vmin;background: #9dff00"></div>
<div style="width: 100vw;height: 20vmax;background: #005eff"></div>

同样是把视口宽度拉到500,高度是968,20vmin的高度是100px,20vmax的高度是193.594px。取的是vw和vh最大最小计算。

先使用rem,之前用的是淘宝的flexible.js,会帮你动态的根据屏幕大小计算html的font-size。我去看了之前的项目和淘宝,根据750的设计稿,使用flexible.js的在屏幕556px之后html的font-size最大是54px,移动端的时候540之后html的font-size最大也是54px。而淘宝不管是PC还是移动端,屏幕480px之后html的font-size最大也是64px。

既然知道rem的原理,只需要动态设置html的font-size,计算也很简单,比如按照750设计稿,flexible的1rem是75px,如果配合vw,100vw是750px,那么1px就是0.1333333vw,75px就是10vw,所以只需要设置:

html{
  font-size: 10vw;
}

再用媒体查询设置一下最大值:

@media (min-width: 540px) {
  html {
    font-size: 54px;
  }
}

就达到了flexible.js的效果,就不需要使用flexible.js了。我对比了用flexible.js的项目,和这样使用,html的font-size是一模一样。只不过这样使用还需要单位换算插件。也可以直接用蓝湖直接转换,或者设置成1rem为100px,那font-size就要设置成13.33333vw。

有点跑偏了,主要想分享postcss-px-to-viewport的使用。先安装:
npm install postcss-px-to-viewport --save-dev
新建postcss.config.js文件,然后配置:

module.exports = {
  plugins: {
      'postcss-px-to-viewport': {
        viewportWidth: 750,
        minPixelValue: 1,
        unitPrecision: 5,
      }
  }
}

配置项有很多,还能配置不转换之类的:

https://github.com/evrone/postcss-px-to-viewport/blob/HEAD/README_CN.md

没怎么用过,不过刚用就发现行内样式不起作用,还以为引入错了。然后看了看issues,发现行内样式需求还是蛮多的,比如富文本返回的,动态计算样式之类的,不知道什么时候会解决这个问题。

我不知道用rem会有哪些问题,要是我,我还是会使用rem,可能也是因为主观习惯问题,说不定以后有项目用的是viewport,接手之后习惯了就变的真香。

最后分享个今天发现的浏览器问题,拖拉的时候居然没办法变成540,可以539也可以541,就是拖不到540,不知道是不是我电脑或者浏览器问题:

1624524227(1).jpg

欢迎关注公众号 coding个人笔记

postcss-px-to-viewportpostcss-px2rem都是用于处理CSS中像素单位转换的PostCSS插件,但它们在转换目标、应用场景等方面存在差异。 ### 转换目标 - **postcss-px-to-viewport**:将CSS中的像素单位(px)转换为视口单位(vwvh等)。视口单位是相对于浏览器视口大小的单位,使用视口单位可以使网页在不同设备和屏幕尺寸上具有更好的适应性,适用于响应式设计[^1]。 - **postcss-px2rem**:将CSS中的像素单位(px)转换为rem单位。rem是相对于根元素(html)字体大小的单位,通过设置根元素的字体大小,可以实现整体的尺寸缩放,常用于需要统一控制页面元素大小的场景[^2]。 ### 配置和使用方式 - **postcss-px-to-viewport**:在配置时,通常需要考虑视口的宽度、高度等参数。使用时,它会根据视口的大小自动将px转换为vwvh等单位,不需要监听屏幕宽度改变和设置font-size。例如在开发时写px,通过该插件转换,还可以过滤不想转译的px,如使用PX或者在配置中过滤掉 [^2]。 - **postcss-px2rem**:在配置时,需要设置根元素的字体大小(rootValue),元素尺寸会根据这个值进行换算。如在postcss.config.js中配置`rootValue`,元素宽320px,最终页面会换算成`320/rootValue` rem [^3]。 ### 应用场景 - **postcss-px-to-viewport**:更适合用于需要根据视口大小进行自适应布局的场景,如移动端网页,能让页面元素在不同屏幕尺寸下保持相对比例。 - **postcss-px2rem**:适用于需要统一控制页面元素大小,通过调整根元素字体大小来实现整体缩放的场景,比如在不同设备上保持页面布局的一致性。 ### 代码示例 - **postcss-px-to-viewport**:无专门示例代码,但一般在postcss配置文件中添加插件使用。 - **postcss-px2rem**:在postcss.config.js中的配置示例如下: ```javascript module.exports = { 'plugins': { 'autoprefixer': {}, 'postcss-px2rem': { rootValue: 16, propList: ['*'] } } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值