CSS 移动端适配配置 自适应 rem 布局
rem
是什么
rem
和em
单位一样,都是一个相对单位,不同的是em
是相对于元素的父元素的font-size
进行计算,rem
是相对于根元素html
的font-size
进行计算,这样一来rem
就绕开了复杂的层级关系,实现了类似于em
单位的功能。默认情况下浏览器给的字体大小是16px
,按照转化关系16px = 1rem
手淘 在移动端的布局是基于 rem
+ viewport
处理的。
在流式布局中使用 %
百分比定义 宽度 , 高度 大都是用 px
来固定住。如果使用 em
或 rem
单位进行相对布局,相对 %
百分比更加灵活,同时可以支持浏览器的字体大小调整和缩放等的正常显示。
自适应处理
使用
rem
布局的时候,为了兼容不同的分辨率,我们应该要动态的修正 根字体 的大小,让所有的用rem
单位的子元素跟着一起缩放,从而达到自适应的效果
一般情况在项目的最前面加载一段 js
来修改 html
的 font-size
,针对不同分辨率计算 font-size
,监听浏览器更改 html
的 font-size
。
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
section {
width: 100%;
height: 100%;
background: red;
}
.page{
width: 5rem;
height: 10rem;
background: yellow;
font-size: 0.3rem;
}
</style>
</head>
<body>
<section>
<div class="page">rem 跟着 html:font-size 变化</div>
</section>
</body>
<script type="text/javascript">
var docEl = document.documentElement,
//当设备的方向变化(设备横向持或纵向持)此事件被触发。绑定此事件时,
//注意现在当浏览器不支持 orientationChange 事件的时候我们绑定了 resize 事件。
//总来的来就是监听当然窗口的变化,一旦有变化就需要重新设置根字体的值
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function() {
//设置根字体大小
docEl.style.fontSize = 20 * (docEl.clientWidth / 320) + 'px';
};
//绑定浏览器缩放与加载时间
window.addEventListener(resizeEvt, recalc, false);
document.addEventListener('DOMContentLoaded', recalc, false);
</script>
</html>
给 html
设置 fontSize
大小,其实就是在 DOMContentLoaded
或者 resize
变化后调整 fontSize
的大小,从而调整 rem
的比值关系。
docEl.style.fontSize = 20 * (docEl.clientWidth / 320) + 'px';
320
是按照移动端的 320
宽度为标准去做适配的,当然我们得根据实际情况通过 设计稿 与 当前可视区的大小 做一个比例关系,通过这个比例进行缩放处理。
px 转化为 rem
首先把 meta 换为
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale= 1.0, minimum-scale=1.0">
然后实现方法:
npm i amfe-flexible --save
px
转rem
方法一:在 common.scss
文件中,全局引入 scss 函数:
/**
转化 px 为 rem。$base-font-size = 设计稿尺寸/10
*/
@function px2rem($px, $base-font-size: 37.5) {
@return ($px/$base-font-size)*1rem
}
调用方式直接: width: px2rem(175);
方法二: npm i postcss-pxtorem --save-dev
package.json
内,在 postcss
内添加:
"postcss": {
"plugins": {
"autoprefixer": {},
"postcss-pxtorem": {
"rootValue": 1, // 设计稿宽度的 1/10,(JSON 文件中不加注释,此行注释及下行注释均删除)
"propList":["*"] // 需要做转化处理的属性,如`hight`、`width`、`margin`等,`*`表示全部
}
}
},
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: CSS 常用布局
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论