viewport移动端适配,读文笔记
文章地址:
笔记:
移动端适配目的:
希望在屏幕尺寸大小不同的手机上进行访问页面时,页面显示的效果能合理的展示,我们期望的是在手机屏幕较大时显示的内容比较大一些,手机屏幕小的时候页面的内容也会缩小进行自适应。手机端适配代码
<meta name="viewport" content="width=device-width,user-scalable=no,
initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0">
不允许缩放,初始缩放值为1,最大缩放值为1,最小缩放值为1
目的?
让页面的宽度等于设备宽度,实际上,它就是设置了理想视口,将布局视口的宽度设置成了理想视口(浏览器/设备屏幕的宽度)。
3.适配的几种方案
1.css3媒体查询,pass
优点:
方法简单,只需修改css文件
调整屏幕宽度时不用刷新页面就可以响应页面布局
缺点:
代码量大,不方便维护
不能够完全适配所有的屏幕尺寸,需要编写多套css样式
2.百分比布局方案
那么需要清楚一个问题,各个子元素或属性的百分比是根据谁来设定呢?
1. 子元素width、height的百分比:子元素的width或height中使用百分比,是相对于子元素的直接父元素
2. margin和padding的百分比:在垂直方向和水平方向都是相对于直接父亲元素的width,而与父元素的height无关
3. border-radius的百分比:border-radius的百分比是相对于自身宽度,与父元素无关
优点:
宽度自适应,在不同的分辨率下都能达到适配
缺点:
百分比的值不好计算
需要确定父级的大小,因为要根据父级的大小进行计算
各个属性中如果使用百分比,相对父元素的属性并不是唯一的
高度不好设置,一般需要固定高度
3. rem方案
<script type="text/javascript">
(function() {
var deviceWidth = document.documentElement.clientWidth;
deviceWidth = deviceWidth < 320 ? 320 : deviceWidth > 640 ? 640 : deviceWidth;
document.documentElement.style.fontSize = deviceWidth / 7.5 + 'px';
})();
</script>
优点:
rem单位是根据根元素font-size决定大小,只要改变font-size的值,以rem为固定单位的元素大小也会发生响应式的改变
缺点:
必须通过一段js代码控制font-size的大小
控制font-size的js代码必须放在在页面第一次加载完成之前,并且放在引入的css样式代码之前。
4. vm、vh
vw 相对于视口的宽度,视口宽度是100vw
vh 相对于视口的高度,视口宽度是100vh
vmin vw和vh中较小的值
vmax vw和vh中较大的值
优点:
指定vw\vh相对与视口的宽高,由px换算单位成vw单位比较简单
通过postcss-px-to-viewport插件进行单位转换比较方便
缺点:
直接进行单位换算时百分比可能出现小数,计算不方便
兼容性- 大多数浏览器都支持、ie11不支持
少数低版本手机系统 ios8、android4.4以下不支持
最后,有一个问题,既然百分比和vw都是需要计算百分比,那么两个方案的不同之处?
% width、height等大部分相对于直接父元素、border-radius、translate、background-size等相对于自身
vw 只相对于视口宽度
4.现在的工作团队是怎么获取font-size的?怎么做页面适配的?
(function (doc, win) {
var recalc = function () {
var docEl = document.getElementsByTagName("html")[0];
var bodyEl = document.getElementsByTagName("body")[0];
/*
var obj = { 320:1, 360:1, 375:1, 400:1, 414:1, 440:1, 480:1
, 520:1, 560:1, 600:1, 640:1, 680:1, 720:1
, 760:1, 800:1, 960:1, 1440:1, 1280:1,1920:1,1080:1
};
if(obj[docEl.clientWidth]) {
return;
}
*/
var clientWidth = docEl.clientWidth;
if (!clientWidth) {return;}
docEl.style.fontSize = clientWidth/10 + 'px';
bodyEl.style.maxWidth = clientWidth + 'px';
};
recalc();
if (!doc.addEventListener) return;
var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);
恩,没啥可特别的,之前还考虑了手机横屏后的效果,现在都屏蔽了,就记住网上的写法就好,恩!
viewport移动端适配,读文笔记的更多相关文章
- WEB 前端模块化,读文笔记
文章链接 WEB 前端模块化都有什么? 知识点 根据平台划分 浏览器 AMD.CMD 存在网络瓶颈,使用异步加载 非浏览器 CommonJS 直接操作 IO,同步加载 浏览器 AMD 依赖前置 req ...
- 移动端适配(rem & viewport)--移动端开发整理笔记(四)
移动端适配 通过rem适配 em: 根据元素自身的字体大小来计算自己的尺寸 rem: (root em) 根据根节点(html)的字体大小来计算自己的尺寸 我们知道,在不同的手机设备,分辨率大小是 ...
- web开发中移动端适配
这个话题有些复杂,说起来有些琐碎,因为和移动端适配相关的问题太多了. 1. 概念 1.1 设备像素 设备像素被称为物理像素,它是显示设备中一个最小的物理部件.每个像素可以根据操作系统设置自己的颜色和亮 ...
- 【前端】移动端Web开发学习笔记【1】
下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...
- 移动端适配单位rem
0 写在前面 本周惊喜地发现,其他各个老师的软工班(罗杰老师班和欧阳老师班)的软工项目的alpha版本都已经发布了!(然而我们软工项目还没开始写代码…逃…) 十分好奇的我第一时间下载了一些他们的产品进 ...
- web前端--移动端适配总结
转自:https://segmentfault.com/a/1190000011586301 作者:Devinnn meta标签到底做了什么事情 做过移动端适配的小伙伴一定有遇到过这行代码: < ...
- 移动端适配 rem
前置知识: 物理像素(physical pixel,device pixel) 物理像素(设备像素),显示设备中一个最微小的物理部件.每个像素可以根据操作系统设置自己的颜色和亮度. 设备独立像素(de ...
- mui初级入门教程(六)— 模板页面实现原理及多端适配指南
文章来源:小青年原创发布时间:2016-07-26关键词:mui,webview,template,os,多端适配转载需标注本文原始地址: http://zhaomenghuan.github.io. ...
- 超详细讲解H5移动端适配
前言 移动互联网发展至今,各种移动设备应运而生,但它们的物理分辨率可以说是五花八门,一般情况UI会为我们提供375尺寸的设计稿,所以为了让H5页面能够在这些不同的设备上尽量表现的一致,前端工程师就不得 ...
随机推荐
- (转)Eclipse4.2 Tomcat启动报错 A child container failed during start
Eclipse4.2 Tomcat启动报错 A child container failed during start 2013-5-21 15:02:24 org.apache.catalina. ...
- vs code 代码格式化
1.打开vs code > 文件 > 首选项 > 设置 > 将下面一段粘贴在右侧即可 // Place your settings in this file to overwr ...
- https://www.luogu.org/blog/An-Amazing-Blog/mu-bi-wu-si-fan-yan-ji-ge-ji-miao-di-dong-xi
https://www.luogu.org/blog/An-Amazing-Blog/mu-bi-wu-si-fan-yan-ji-ge-ji-miao-di-dong-xi
- hdoj5003【wa水】
蜜汁wa,蜜汁wa,少了个\n------ #include<bits/stdc++.h> using namespace std; typedef long long LL; typed ...
- hdoj1465【错排公式(直接水过)】
//注意会爆 int #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef unsigne ...
- 实例List化
实现了__iter__()的实例虽能用于for循环,看似像list,但并不能将其当做list来使用,比如,Fib()[5]还是报错 可通过实现__getitem__()方法,:来实现让实例像list那 ...
- Window下完全卸载删除Nodejs
如何从Windows中删除Node.js: 1.从卸载程序卸载程序和功能. 2.重新启动(或者您可能会从任务管理器中杀死所有与节点相关的进程). 3.寻找这些文件夹并删除它们(及其内容)(如果还有). ...
- 基于CentOS6.5下snort+barnyard2+base的入侵检测系统的搭建(图文详解)(博主推荐)
为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物理机器环境实验室的大数 ...
- webfrom ASP开发基础跟模式
ASP.NET - .net开发网站应用程序的技术总称 ASP WebForm MVC 是ASP.NET的两个技术方法 WebForm类似于WinForm,可视化操作 MVC类 ...
- AJPFX关于java中的方法
java中的方法和c语言中的函数类似,是新手入门面向对象之前的内容最大的难关如何写方法 1,明确返回值类型 2,明确参数列表 * 修饰符:目前就用 public stati ...