适配,你懂适配吗


思考题

一个100x100,单位px的div在苹果6和苹果6p上的大小一样吗?

科普一下

  • px, 单位像素
  • dp, 物理像素
  • dpr,设备像素比
  • ppi,每英寸有多少个有用的像素

单位像素是相对单位

在同样一个设备上,每1个CSS像素所代表的物理像素是可以变化的(即CSS像素的第一方面的相对性);

在不同的设备之间,每1个CSS像素所代表的物理像素是可以变化的(即CSS像素的第二方面的相对性);

为什么大部分时候设计稿选择iphone6

随着苹果发布更多尺寸的大屏手机,加上Android生态中纷繁复杂的各种奇葩尺寸,移动设计全面进入“杂屏”时代。

没有别的原因,iphone6 只是中型手机的一个代表,从中间尺寸向上和向下适配的时候界面调整的幅度最小。

移动时代,我们如何做适配的呢

利用 rem 适配页面

var dc = document.documentElement;var mt = document.createElement("meta");
mt.name = "viewport";
mt.content = "width=device-width,initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0,user-scalable=no";
dc.firstElementChild.appendChild(mt);var autoSizie = function () {var dw = dc.clientWidth;var dpr = Math.min(window.devicePixelRatio, 3);//dw / dpr > 750 && (dw = 750 * dpr);window.remScale = dw / 750;dc.style.fontSize = 200 * (dw / 750) + "px";dc.dataset.dpr = dpr;
};
autoSizie();
window.addEventListener('resize', autoSizie, false);
复制代码
  • 为什么是 200 * (document.documentElement.clientWidth / 750) + "px" ?

帧动画在部分机型上抖动问题

解决方案:

1.原始尺寸做动画,再用transform:scale()做缩放处理
2.采用svg替代方案,推荐方案

利用视口单位 vw 适配页面

div {width: 10vw;height: 10vw;font-size: .12vw;
}
复制代码

这样的页面虽然看起来适配得很好,但是你会发现由于它是利用视口单位实现的布局,依赖于视口大小而自动缩放,无论视口过大还是过小,它也随着视口过大或者过小,失去了最大最小宽度的限制

解决方案:结合rem单位来实现布局

1.给根元素大小设置随着视口变化而变化的 vw 单位,这样就可以实现动态改变其大小。
2.限制根元素字体大小的最大最小值,配合 body 加上最大宽度和最小宽度

如何做横屏适配

对屏幕 resize 事件进行监听,当判断为竖屏时将整个根容器进行逆时针 CSS3 旋转 90 度

var detectOrient = function() {var width = document.documentElement.clientWidth,height =  document.documentElement.clientHeight,$wrapper =  document.getElementById("J_wrapper"),style = "";if( width >= height ){ // 横屏style += "width:" + width + "px;";  // 注意旋转后的宽高切换style += "height:" + height + "px;";style += "-webkit-transform: rotate(0); transform: rotate(0);";style += "-webkit-transform-origin: 0 0;";style += "transform-origin: 0 0;";}else{ // 竖屏style += "width:" + height + "px;";style += "height:" + width + "px;";style += "-webkit-transform: rotate(90deg); transform: rotate(90deg);";// 注意旋转中点的处理style += "-webkit-transform-origin: " + width / 2 + "px " + width / 2 + "px;";style += "transform-origin: " + width / 2 + "px " + width / 2 + "px;";}$wrapper.style.cssText = style;
}
window.onresize = detectOrient;
detectOrient();
复制代码

解决横屏的dom适配问题

$vw_base: 375;
$vw_fontsize: 20;
html {font-size: 20px; //不支持vw单位时,回退到px单位font-size: ($vw_fontsize / $vw_base) * 100vw;
}
@media screen and (orientation: landscape) {html {font-size: 20px;font-size: ($vw_fontsize / $vw_base) * 100vh;}
}
复制代码

网页适配 iPhoneX

viewport-fit

iOS11 新增特性,苹果公司为了适配 iPhoneX 对现有 viewport meta 标签的一个扩展,用于设置网页在可视窗口的布局方式,可设置三个值:

  • contain: 可视窗口完全包含网页内容
  • cover:网页内容完全覆盖可视窗口
  • auto:默认值,跟 contain 表现一致

env() 和 constant()

iOS11 新增特性,Webkit 的一个 CSS 函数,用于设定安全区域与边界的距离,有四个预定义的变量:

  • safe-area-inset-left:安全区域距离左边边界距离
  • safe-area-inset-right:安全区域距离右边边界距离
  • safe-area-inset-top:安全区域距离顶部边界距离
  • safe-area-inset-bottom:安全区域距离底部边界距离
// 需要适配 iPhoneX 必须设置 viewport-fit=cover,这是适配的关键步骤。
<meta name="viewport" content="width=device-width, viewport-fit=cover">
// 根据情况设置padding或者margin
padding-bottom: constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */
padding-bottom: env(safe-area-inset-bottom); /* 兼容 iOS >= 11.2 */
复制代码

关于移动端适配,就说这么多了。
路漫漫其修远兮,吾将上下而求索···

移动端适配的各种问题相关推荐

  1. 移动端适配之二:visual viewport、layout viewport和ideal viewport介绍

    上一篇博文,可算把像素这个东西讲清楚了.在这篇博文里面,将继续介绍viewport相关的内容. 很多博客都会提到PPK所讲的三个viewport,有的讲的比较复杂,看的云里雾里,我这里也大概介绍一下, ...

  2. cli3 px转rem适配移动端_Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)

    今天,我们使用vue cli3 做一个移动端适配 . 前言 首先确定你的项目是vue cli3版本以上的. 一.移动端适配包 1.安装移动端适配包 npm i lib-flexible -s 2.在 ...

  3. vue-cli3.0 移动端适配

    方案: 固定一个某些宽度,使用一个模式,加上少许的媒体查询方案 使用flexbox解决方案 使用百分比加媒体查询 使用rem 用px2rem配合lib-flexible 关于移动端的适配,我喜欢用px ...

  4. 移动端适配方案 flexible.js

    前言 移动端适配一直以来都是前端开发中不可或缺的重要组成部分,如果没有了它,那么你做出来的页面极有可能会出现各种意外(写出来的页面与设计稿之间的差别).所有我们得找到一种相对来说让人比较满意的解决方案 ...

  5. pageResponse - 让H5适配移动设备全家(移动端适配)1

    pageResponse - 让H5适配移动设备全家(移动端适配)1 转载于:https://www.cnblogs.com/lichaoqing/p/5994131.html

  6. vue-cli3.0结合lib-flexible、px2rem实现移动端适配,完美解决第三方ui库样式变小问题

    vue-cli3.0结合lib-flexible.px2rem实现移动端适配,完美解决第三方ui库样式变小问题 参考文章: (1)vue-cli3.0结合lib-flexible.px2rem实现移动 ...

  7. 解决vue移动端适配问题

    解决vue移动端适配问题 参考文章: (1)解决vue移动端适配问题 (2)https://www.cnblogs.com/both-eyes/p/10106021.html 备忘一下.

  8. chrome 适配调试_移动端适配

    前言 原文 && 个人主页 知乎&&知乎专栏 背景 随着移动端的普及,以及手机尺寸越来越多,这就衍生了众多的适配方案,以下挑一些常见的适配方案进行探讨. 本文默认读者已 ...

  9. 产品经理必备知识之网页设计系列(三)-移动端适配无障碍设计及测试

    前言 第一部分参见 产品经理必备知识之网页设计系列(一)-创建出色用户体验 https://blog.csdn.net/wenyusuran/article/details/108199875 第二部 ...

  10. 移动端布局三种视口_移动端适配之视口和meta标签

    这是关于移动端适配的第一篇文章,这篇文章主要介绍视口以及和视口有关的meta标签的使用. 不管三七二十一,我们先新建一个页面: 这不是一个demo *{margin: 0; padding: 0;} ...

最新文章

  1. 中国联通:联通集团正研究混改 具体实施方案在讨论中
  2. win10系统 计算机配置要求高吗,win10配置要求_win10配置要求高吗-太平洋电脑网
  3. [ARM异常]-ARMV8-aarch64 异常(中断)是如何跳转到向量表的
  4. python多线程基本操作
  5. 这轮AI才刚刚启动,就开始有人谈AI泡沫了?
  6. 深入解析物联网操作系统(架构/功能/实例分析)
  7. ES6新特性_ES6生成器函数实例_第二个实例---JavaScript_ECMAScript_ES6-ES11新特性工作笔记023
  8. NumPy————NumPy广播机制的学习笔记
  9. 第二十三模板 1什么是模板
  10. IGMC,Inductive graph-based matrix completion,基于归纳图的矩阵完成
  11. animate将flash转换html,Animate—flash动画入门到精通教程
  12. 百寸大屏搭配高清画质,极米NEW Z6X轻松打造沉浸式家庭影院
  13. Magic Firewall 简介
  14. suricata UT测试用例中使用的几个重要的辅助函数
  15. Web全栈~27.文件和目录的操作
  16. wince挂起和唤醒_relayon
  17. 波斯文组合规则,波斯语变形规则,波斯语组合规范,波斯文变形规则
  18. Maven学习:项目构建生命周期
  19. TortoiseSVN (Subversion客户端) 使用手册(中文) (六)
  20. BGP-边际网关路由协议简记

热门文章

  1. python变量快速学习_如何快速的复习学习过的Python
  2. 【超详细】弱电工程综合布线系统培训资料
  3. 矩阵论: 第二章: 内积空间
  4. 【Linux】Linux运维必知必会的网络基础一
  5. 软件测试技术概念辨析
  6. 计算机网络华为路由器配置实验,计算机网络 路由器基本命令操作实验报告格式 华为.doc...
  7. 查看显卡单精度 linux,完美:1.如何计算图形卡的单精度浮点运算能力
  8. 如何将float单精度浮点型转换为16进制
  9. opencv——边缘检测算法(总结)
  10. Python爬虫项目实例——爬取上海市历史天气数据