移动端样式开发
课程概要
本课程主要讲解移动端样式的原理和开发,在微信推广营销页中,都会涉及到移动端页面的开发。
实现原理
使用 rem 自适应,rem 是 CSS3 中的一个尺寸单位,更具页面 html 标签的自豪匹配大小。比如,html 的字号 font-size 为 20px ,那么 CSS 设定的 1rem 的页面玉树实际会显示 20px 的大小,1.2 rem 会显示 24px 的大小。与 em 有点类似,但 rem 只认 html 。rem 除了作为 font-size 字号尺寸单位,还可以适用 margin、padding 及 readius 等。
知识点
本课程涉及到的主要知识点有:
- viewprot
<meta name="viewport" content="width=device-width,initial-scale=1.0">
设置在手机上按照 1:1 缩放
- rem.js
function resizeRem() {
let docElement = document.documentElement;
let width = docElement.getBoundingClientRect().width;
let rem = width/10;
docElement.style.fontSize = rem + 'px';
}
window.addEventListener('resize', resizeRem);
window.addEventListener('pageshow', resizeRem);
在 resizeRem 函数中,首先获取浏览器页面的宽度,然后设置 html 元素的 font-size 的大小为宽度的十分之一,这样 1 rem 的大小就等于页面的 1/10 ,10 rem 就等于页面宽度的 100% 。最后在页面初始化和页面尺寸发生变化时候执行。
- @ppr
首先我们假设设计稿的宽度为 640px ,在上一个 rem.js 的脚本中我们把页面分成了 10 份。640px 为 10rem ,则 1px 为 @ppr 表示为多少 rem。
公式:640px/10rem = 1px/@ppr; 则:640 * @ppr = 10rem * 1; 则:@ppr = 10/640 * 1rem;
这时候如果设计稿中的某个 div 宽度为 320px,则其尺寸单位为 320 * @ppr = 320 * 10 / 640 rem = 5 rem;
我们可以在 less 中设置一个 @ppr 变量方便运算。
@divide: 10;
@pswWidth: 640;
@ppr: @divide/@pswWidth * 1rem
.test{
width: 320*@ppr;
}
实现步骤
假设我们的设计稿宽度为 640px,我们来实现一下一个宽度为 320px 的正方形。这个正方形的宽度为设计稿的一般,那么在 rem 处理后他应该在任何尺寸的屏幕中都为屏幕宽度一半的正方形。
- 设置页面缩放比例
- 引入 rem 计算脚本
- 在 less 中设置 @ppr 变量并使用
设置页面缩放比例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Mobile demo</title>
</head>
<body>
</body>
</html>
引入 rem 计算脚本
js/rem.js
;
function(){
function resizeRem() {
let docElement = document.documentElement;
let width = docElement.getBoundingClientRect().width;
let rem = width/10;
docElement.style.fontSize = rem + 'px';
}
window.addEventListener('resize', resizeRem);
window.addEventListener('pageshow', resizeRem);
}();
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Mobile demo</title>
<script src="./js/rem.js"></script>
</head>
<body>
</body>
</html>
在 less 中设置 @ppr 变量并使用
less/index.less
@divide: 10;
@pswWidth: 640;
@ppr:@divide/@pswWidth * 1rem;
.test{
margin: 0 auto;
width: 320*@ppr;
height: 320*@ppr;
background-color: #f5f5f5;
}
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Mobile demo</title>
<script src="./js/rem.js"></script>
<link rel="stylesheet" type="text/css" href="./css/index.css">
</head>
<body>
<div class="test"></div>
</body>
</html>