关于移动端适配方案的一些代码

方法一:css中以rem为单位, 通过js方法统一换算根元素font-size

1. 以750px设计稿为基准(实际为iphone6 375px的2倍图)

2. 设置根元素fontSize在750时为100px=1rem;  在375时为50px=1rem, 这步操作通过一个统一的js方法进行换算,并在全局引用,使用于所有rem为单位的元素(三方ui库以px为单位不受影响);

3. css定义样式使用rem为单位,以750px设计稿的基准除以100 换算所得;

4. eg: banner 高度在750px的设计稿上为100px, 此时css设置banner的高度为1rem

(function (window, document) {
	    function resize () {
	        var ww = window.innerWidth
	        if (ww > window.screen.width) {
	            window.requestAnimationFrame(resize)
	        } else {
	            /*
	                1. 以750设计稿(iphone6 375px 2倍图换算 )为参考基准, 100px = 1rem,
	                2. 这样写样式的时候直接按750px的写就好,rem就在px上/100即可,如一个banner是100px高,则使用rem即为1rem;
	                3. 但是实际iphone6只有375,所以下面换算的时候需要除以2, 让750px的设计稿对应真实375分辨率的iphone6
	                4. 若不在这里除2的话,只能在css样式时在除以100的基础上再除2,这样每个元素都要除2比较麻烦,还不如直接在根节点上除以2
	            */
	            ww = ww > 750 ? 750 : ww;
	            document.documentElement.style.fontSize = ww / 3.75 / 2 + 'px';      // set 1rem based on iPhone6 375px width, 375/3.75=100
	            document.body.style.opacity = 1
	            console.log(document.documentElement.style.fontSize)
	        }
	    }
	    if (document.readyState !== 'loading') {
	        resize()
	    } else {
	        document.addEventListener('DOMContentLoaded', resize)
	    }
	    window.addEventListener('resize', resize)
	})(window, document)

方法二:css中以px为单位,通过px2rem 和lib-flexible 实现单位转换及适配

1. 安装 lib-flexible模块 及 px2rem 模块 依赖

2. 在样式配置文件中配置px2rem的基准值,默认75(750px的设计稿)

3. 排除三方ui库的转换(通过配置exclued实现)

4. css 中使用和750px设计稿相同尺寸px(编译时会自动转换成rem)

//这里以750px设计稿、使用三方ui库为mint-ui为例,在postcss.config文件里修改   
module.exports = {
    plugins: {
        autoprefixer: {},
        "postcss-px2rem-exclude": {
            remUnit: 75,
            exclude: /node_modules|mint-ui/i // px转rem时,忽略对mint-ui下样式px的转换(否则会让mint-ui里的样式都变的很小)
        }
    }
};

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue移动端适配主要涉及到屏幕尺寸、DPI、像素密度等方面的问题,下面我提供两种常用的适配方案: 1. 使用Flexible + rem布局方案 Flexible + rem布局方案是一种比较流行的移动端适配方案,主要原理是将屏幕分成10份,用htmlfont-size来表示1份的宽度,然后使用rem单位进行布局,通过动态改变htmlfont-size适配不同的屏幕宽度。 具体实现步骤如下: 1)安装 flexible 和 postcss-pxtorem ``` npm install lib-flexible postcss-pxtorem --save ``` 2)在 main.js 中引入 flexible ``` import 'lib-flexible/flexible' ``` 3)在项目根目录下创建postcss.config.js ``` module.exports = { plugins: { 'postcss-pxtorem': { rootValue: 75, // 1rem = 75px,75是设计稿宽度的1/10 propList: ['*'] } } } ``` 4)在App.vue中设置样式 ``` <style lang="scss"> html { font-size: 50px; // 设计稿宽度的1/10 } body { font-size: 14px; color: #333; margin: 0; padding: 0; } </style> ``` 2. 使用vw/vh单位进行布局 vw/vh单位是相对视口宽度和高度的单位,1vw表示视口宽度的1%,1vh表示视口高度的1%。利用vw/vh单位进行布局,可以实现简单的适配效果。 具体实现步骤如下: 1)在项目根目录下创建postcss.config.js ``` module.exports = { plugins: { 'postcss-px-to-viewport': { viewportWidth: 750, // 设计稿宽度 viewportHeight: 1334, // 设计稿高度 unitPrecision: 3, viewportUnit: 'vw', selectorBlackList: ['.ignore', '.hairlines'], minPixelValue: 1, mediaQuery: false } } } ``` 2)在App.vue中设置样式 ``` <style lang="scss"> html, body { margin: 0; padding: 0; } body { font-size: 14px; color: #333; } .container { width: 100vw; height: 100vh; padding: 20vw; background-color: #eee; } </style> ``` 以上是两种常用的Vue移动端适配方案,具体选择哪种方案可以根据项目实际情况进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值