# 移动端
# 移动端基础
- 通用-webkit-内核,兼容性好
- 移动端专用初始化 normalize.css
- 下载地址 - normalize.css (opens new window)
/* 新的盒子模型 */
box-sizing: border-box;
-webkit-box-sizing: border-box;
/* 清除点击高亮 */
-webkit-tap-highlight-color: transparent;
/* 清除默认外观 */
-webkit-appearance: none;
/* 禁用长按时出现菜单 */
img,
a {
-webkit-touch-callout: none;
}
# 视口问题
- 布局视口 设备默认的视口
- 视觉视口 用户当前观看的网页区域
- 理想视口(ideal viewport) 对设备来讲,最理想的视口尺寸,需要手动添加 meta 标签设置相关属性,让设备宽度和布局宽度保持同步
<!-- 标准写法 -->
<meta
name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
/>
<meta name="viewport"> 标签的属性 | 属性说明 |
---|---|
width=device-width | 设置视口宽度=设备宽度 |
initial-scale | 初始缩放比 |
maximum-scale | 最大缩放比 |
minimum-scale | 最小缩放比 |
user-scalable | 用户是否可以缩放 |
# 像素问题
- 屏幕像素比,1 pxiel 实际覆盖的物理像素点的个数,通常 PC 端是 1:1,移动端是 1:2 部分手机 1:3
- 为什么?移动端为了提高屏幕的细腻感需要提高单位面积的像素个数,为了避免放缩后产生失真,需要进行比例化处理,让图片实际像素和移动端对应。
- 二倍图处理方法, 准备
100*100
图片,background-size: 50px; 移动端实际物理像素为100*100
# 单位问题
长度单位 | 重要性 | 作用 |
---|---|---|
cm | 了解 | 绝对单位,一厘米 |
px | 重要 | 绝对单位,一个像素 |
rem | 重要 | 相对单位,html 的字体大小 |
em | 了解 | 相对单位,相对元素自身的字体大小 ,如果自身没有设置就找父元素 |
vw | 一般 | 相对单位,视窗宽度的 1% |
vh | 一般 | 相对单位,视窗高度的 1% |
# 方案选择
技术选型 | 举例 | 优缺点 |
---|---|---|
制作响应式页面来兼容移动端 | www.samsung.com | 兼容性麻烦 |
单独制作移动端页面 | m.jd.com m.taobao.com m.suning.com | 工作量可预期 |
# 媒体查询
/* 基本写法 */
@media mediatype and|not|only (media feature){
css-code;
}
/* 举个例子 */
@media screen and (max-width: 800px){
html{ font-size:8px}
}
mediatype 媒体类型 | 解释说明 |
---|---|
all | 用于所有设备 |
用于打印机和打印预览 | |
screen | 用于设备的屏幕,重要 |
关键字 | 解释说明 |
---|---|
and | 将多个媒体特效连接,相当于“且”的意思 |
not | 排除某个媒体特性 |
only | 指定某个特定的媒体特性 |
媒体特性 | 解释说明 |
---|---|
width | 定义输出设备中页面可见区域的宽度 |
min-width | 定义输出设备中页面可见区域的最小宽度 |
max-width | 定义输出设备中页面可见区域的最大宽度 |
# 等比放大布局
- 方案 1 Rem
① 假设设计稿是 750px
② 假设我们把整个屏幕划分为 15 等份(划分标准不一可以是 20 份也可以是 10 等份)
③ 每一份作为 html 字体大小,这里就是 50px
④ 那么在 320px 设备的时候,字体大小为 320/15 就是 21.33px
⑤ 用我们页面元素的大小除以不同的 html 字体大小会发现他们比例还是相同的
- 方案 2 (已经过时)
https://github.com/amfe/lib-flexible (opens new window)
① 使用 flexbable.js 会自动调整 rem 的大小
② flexable.js 把屏幕划分为 10 等分,我们按照设计稿的 10 等分来计算具体需要多少 rem 即可
(function flexible(window, document) {
var docEl = document.documentElement;
var dpr = window.devicePixelRatio || 1;
// adjust body font size
function setBodyFontSize() {
if (document.body) {
document.body.style.fontSize = 12 * dpr + "px";
} else {
document.addEventListener("DOMContentLoaded", setBodyFontSize);
}
}
setBodyFontSize();
// set 1rem = viewWidth / 10
function setRemUnit() {
var rem = docEl.clientWidth / 10;
docEl.style.fontSize = rem + "px";
}
setRemUnit();
// reset rem unit on page resize
window.addEventListener("resize", setRemUnit);
window.addEventListener("pageshow", function (e) {
if (e.persisted) {
setRemUnit();
}
});
// detect 0.5px supports
if (dpr >= 2) {
var fakeBody = document.createElement("body");
var testElement = document.createElement("div");
testElement.style.border = ".5px solid transparent";
fakeBody.appendChild(testElement);
docEl.appendChild(fakeBody);
if (testElement.offsetHeight === 1) {
docEl.classList.add("hairlines");
}
docEl.removeChild(fakeBody);
}
})(window, document);
# 响应式布局
Bootstrap 来自 Twitter(推特),是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和 JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。
创建 html 骨架结构
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- 注意上述3个meta标签必须放在最前面,任何其他内容都必须跟随其后! -->
<title>Bootstrap Template</title>
<link href="css/bootstrap.min.css" rel="stylesheet" />
<script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</head>
<body>
<h1>你好,世界!</h1>
</body>
</html>
- 栅格嵌套 col > row
<!-- 列嵌套 -->
<div class="col-sm-4">
<div class="row">
<div class="col-sm-6">小列</div>
<div class="col-sm-6">小列</div>
</div>
</div>
- 列偏移 offset
<!-- 列偏移 -->
<div class="row">
<div class="col-lg-4">1</div>
<div class="col-lg-4 col-lg-offset-4">2</div>
</div>
- 列排序 pull push
<!-- 列排序 -->
<div class="row">
<div class="col-lg-4 col-lg-push-8">左侧</div>
<div class="col-lg-8 col-lg-pull-4">右侧</div>
</div>