移动端适配

Angular
• 阅读 2348

meta viewport

  1. viewport的概念

移动设备上面的viewport就是设备上的屏幕用来显示网页的那块区域,叫做视口,但是在默认情况下,移动设备上的viewport是要大于浏览器可视区域的,因为移动设备的分辨率相对于电脑来说比较小,所以为了能在移动设备上正常显示那些传统的电脑浏览器设计的网站,移动设备上的浏览器都会把自己默认的viewport设为980px或者1024px,所以移动设备上浏览器会出现横向滚动条,因为浏览器可视区域宽度小于viewport

  1. css中的1px不是设备的1px

css中的像素只是一个抽象的单位,在不同设备或者不同环境中,css中的1px所代表的设备物理像素是不同的。
在早先的移动设备中,屏幕像素密度低,一个css像素确实就是一个屏幕物理像素,当后来移动设备屏幕分辨率变高,但屏幕尺寸没有变,这时,一个css像素是等于两个物理像素的,所以css像素相当于多少物理像素是不确定的。

  1. 三种viewport
  • layout viewport:因为手机的分辨率越来越大,为了让手机显示电脑浏览器的网页正常,浏览器默认情况下把viewport设为980px或者1024px,这样即使是那些为桌面设计的网站也能在移动浏览器上正常显示,这就是layout viewport,它的宽度可以通过document.documentElement.clientWidth
  • visual viewport:因为layout viewport的宽度是大于浏览器可视区域的宽度,所以需要一个viewport代表浏览器可视区域的大小,这就是visual viewport,它可以用window.innerWidth来获取
  • ideal viewport:为移动设备单独设计,需要一个能完美适配移动设备的viewport,不需要用户缩放和横向滚动条就能正常查看网站的内容
  1. 利用meta viewport来控制viewport

进行移动设备开发时,将下面的代码复制到head标签中:

<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'>

该标签可以使移动设备开发时使用ideal viewport

  • width=device-width: 让当前viewport宽度等于设备的宽度
  • user-scalable=no: 禁止用户缩放
  • initial-scale=1.0: 设置页面的初始缩放值为不缩放
  • maximum-scale=1.0: 允许用户的最大缩放值为1.0
  • minimum-scale=1.0: 允许用户的最小缩放值为1.0

媒体查询

媒体查询可以根据用户设备屏幕大小和横向或纵向来提供不同的样式,使用方法:

  • link元素中的css媒体查询:
<link rel="stylesheet" media="(max-width=800px)" href="example.css" >
  • 样式表中的css媒体查询
@media (max-width: 600px) {

}

可以根据自定义条件来设置媒体的样式

  • 动态rem

要保持页面布局按照比例布局
什么是rem,rem是相对尺寸单位,相对于html标签字体大小的单位
所以我们通过用js来控制html标签的font-size值:

    document.documentElement.style.fontSize = window.innerWidth / 10 + 'px';

使用rem,这样保持了整体页面的比例,不会导致页面变形

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
JOptionPane修改图标
1.在Linux平台下.JOptionPane会显示Java默认的图标,在window平台不显示图标,如何替换这个图标了?2JOptionPane.setIcon(Icon)修改的是内容区域的icon,而不是左上角的Icon.所以需要通过修改Jdialog/Frame的图标来达到修改默认图标的问题.3.代码:if(JOptio
数据堂 数据堂
1年前
语音识别技术在移动设备上的应用与优化
一、引言随着移动设备的普及和人工智能技术的发展,语音识别技术在移动设备上得到了广泛应用。本文将探讨语音识别技术在移动设备上的应用以及如何进行优化。二、语音识别技术在移动设备上的应用1.语音输入:语音识别技术已经成为移动设备中最常用的输入方式之一。用户可以通
一行代码修复100vh bug | 京东云技术团队
你知道奇怪的移动视口错误(也称为100vhbug)吗?或者如何以正确的方式创建全屏块?一、100vhbug什么是移动视口错误?你是否曾经在网页上创建过全屏元素?只需添加一行CSS并不难:.mypageheight:100vh1vh是视口高度的1%,正是我们
京东云开发者 京东云开发者
8个月前
移动端设备上稀奇古怪的前端问题收集(一)
作者:京东物流陈雨作为一名开发者,bug往往是我们最怕遇见的东西;而比遇到bug更可怕的事情,是定位不到bug。作为一名前端开发者,与业务逻辑相关的bug还相对好定位、好解决一些;而一些与语法特性、平台与设备差异相关的bug则更令人头疼一些。这里记录下我在