postcss-px-to-viewport 适配 uniapp

37 篇文章 0 订阅
16 篇文章 0 订阅

参考:https://uniapp.dcloud.io/component/page-meta?id=page-meta

module.exports = {
    css: {
        loaderOptions: {
            postcss: {
                plugins: [
                    require(‘postcss-px-to-viewport‘)({
                        unitToConvert: ‘px‘,  // 需要转换的单位,默认为"px"
                        viewportWidth: 750, //  设计稿的视口宽度
                        unitPrecision: 5, // 单位转换后保留的精度
                        propList: [*], // 能转化为vw的属性列表
                        viewportUnit: ‘vw‘, //  希望使用的视口单位
                        fontViewportUnit: ‘vw‘, // 字体使用的视口单位
                        selectorBlackList: [], // 需要忽略的CSS选择器
                        minPixelValue: 1, // 最小的转换数值,如果为1的话,只有大于1的值会被转换
                        mediaQuery: false, // 媒体查询里的单位是否需要转换单位
                        replace: true, // 是否直接更换属性值,而不添加备用属性
                        exclude: /node_modules/, // 忽略某些文件夹下的文件或特定文件
                        include: undefined,  // 如果设置了include,那将只有匹配到的文件才会被转换,例如只转换 ‘src/mobile‘ 下的文件 (include: /\/src\/mobile\//)
                        landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
                        landscapeUnit: ‘vw‘, // 横屏时使用的单位
                        landscapeWidth: 568 // 横屏时使用的视口宽度
                    })
                ]
            }
        }
    }
}

1.base.js

export default {
    created() {
        const self = this;
 
    },
    mounted() {
        const self = this;
    },
    methods: {
        //设置字体
        getRootFontSize(){
            const self = this;
            var fontSize = getApp().globalData.rootFontSize;
            if(fontSize){
                return fontSize;
            }else{
                fontSize = uni.getStorageSync('root_font_size');
                if(fontSize){
                    getApp().globalData.rootFontSize=fontSize;
                }else{
                    fontSize='12px';//默认字体大小
                    self.setRootFontSize(fontSize);
                }
                return fontSize;
            }
        },
        setRootFontSize(fontSize){
            uni.setStorageSync('root_font_size',fontSize);
            getApp().globalData.rootFontSize=fontSize;
        },
 
    }
}

2.page-meta

<page-meta :root-font-size="getRootFontSize()"></page-meta>

3.引入

import base from '@/common/base.js';
	export default {
		extends: base,

4.页面事件

<template>
	<page-meta :root-font-size="getRootFontSize()"></page-meta>
	<view>
		<view class="uni-padding-wrap uni-common-mt" style="margin-top: 50upx;">
			<view class="titleBox">
				<view style="font-size:25upx">A</view>
				<view style="font-size:30upx">标准</view>
				<view style="font-size:35upx">A</view>
				<view style="font-size:40upx">A</view>
			</view>
			
			<view>
				<slider min="10" max="16" :value="fontValue" @change="sliderChange" show-value step="2"/>
			</view>
		</view>
	</view>
</template>
<script>
	import base from '@/common/base.js';
	export default {
		extends: base,
		data() {
			return {
				fontValue:12,
				rootFontSize:'12upx',
				fontStart:uni.getStorageSync('root_font_size') + '',
				fontEnd:uni.getStorageSync('root_font_size') + ''
			}
		},
		onLoad() {
			const self = this;
			//当前字体大小
			self.fontValue = parseInt(self.getRootFontSize().split('px')[0]);
			console.log(self.fontValue )
		},
		methods: {
			sliderChange(e) {
				console.log('value 发生变化:' + e.detail.value)
				const self = this;
				let nowFontSize = e.detail.value + 'px';
				console.log(nowFontSize)
				self.fontEnd = nowFontSize;
				console.log(nowFontSize)
				self.setRootFontSize(nowFontSize);
			},
            //这里设置一个事件,使用uni.reLaunch跳转到某个页面,并关闭所有页面
			/*onNavigationBarButtonTap() {
				uni.reLaunch({
					url:"../tabbar-4"
				})
			}*/
		}
	}
</script>
<style>
	.titleBox{
		width: 80%;
		display: flex;
		align-items: center;
		justify-content: space-between;
		margin: 30upx 0;
		margin-left: 5%;
    }
	
</style>

5.统一单位

const path = require('path')
module.exports = {
  parser: 'postcss-comment',
  plugins: {
    'postcss-import': {
      resolve(id, basedir, importOptions) {
        if (id.startsWith('~@/')) {
          return path.resolve(process.env.UNI_INPUT_DIR, id.substr(3))
        } else if (id.startsWith('@/')) {
          return path.resolve(process.env.UNI_INPUT_DIR, id.substr(2))
        } else if (id.startsWith('/') && !id.startsWith('//')) {
          return path.resolve(process.env.UNI_INPUT_DIR, id.substr(1))
        }
        return id
      }
    },
    'autoprefixer': {
      overrideBrowserslist: ["Android >= 4", "ios >= 8"],
      remove: process.env.UNI_PLATFORM !== 'h5'
    },
    // 借助postcss-px-to-viewport插件,实现rpx转px,文档:https://github.com/evrone/postcss-px-to-viewport/blob/master/README_CN.md
    // 以下配置,可以将rpx转换为1/2的px,如20rpx=10px,如果要调整比例,可以调整 viewportWidth 来实现
    'postcss-px-to-viewport': {
      unitToConvert: 'upx',
      viewportWidth: 200,
      unitPrecision: 5,
      propList: ['*'],
      viewportUnit: 'px',
      fontViewportUnit: 'rem',
      selectorBlackList: [],
      minPixelValue: 1,
      mediaQuery: false,
      replace: true,
      exclude: undefined,
      include: undefined,
      landscape: false
    },
    '@dcloudio/vue-cli-plugin-uni/packages/postcss': {}
  }
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
UniApp 是一个基于 Vue.js 的跨平台开发框架,可以使用 postcss-px-to-viewport 插件来实现将 px 单位转换为 vw/vh 的功能。postcss-px-to-viewport 是一个 PostCSS 插件,可以帮助开发者自动将 px 单位转换为视窗单位(例如 vw、vh、vmin 或 vmax)。 要在 UniApp 中使用 postcss-px-to-viewport 插件,你需要按照以下步骤进行配置: 1. 在项目根目录下找到 postcss.config.js 文件(如果不存在,则需要手动创建)。 2. 在 postcss.config.js 文件中添加以下配置代码: ```javascript module.exports = { plugins: { 'postcss-px-to-viewport': { unitToConvert: 'px', // 需要转换的单位,默认为 px viewportWidth: 750, // 设计稿的视口宽度 unitPrecision: 5, // 转换后的精度,即小数点位数 propList: ['*'], // 需要转换的 CSS 属性列表,* 表示所有 viewportUnit: 'vw', // 转换后的视口单位 fontViewportUnit: 'vw', // 字体使用的视口单位 selectorBlackList: [], // 需要忽略的 CSS 选择器,例如 '.ignore',则 .ignore 不会被转换 minPixelValue: 1, // 小于或等于 1px 不转换为视口单位 mediaQuery: false, // 是否允许在媒体查询中转换 px replace: true, // 是否直接替换原样式 exclude: [/node_modules/] // 需要忽略的文件路径 } } } ``` 以上配置中,viewportWidth 表示设计稿的视口宽度,根据这个值来计算需要转换的单位。其他配置项可以根据需要进行调整。 3. 重新启动项目,postcss-px-to-viewport 插件将会自动将项目中的 px 单位转换为 vw/vh。 希望这些信息对你有所帮助!如果你还有其他问题,请随时提问。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值