移动端网页开发所要具备的基础知识二(视口)

  做移动端网页,首先必须了解一些基本的概念。

  最重要的是了解像素和视口。

  我在上一篇文章中已经介绍了像素,这次我们再来谈谈视口。

  视口

  桌面浏览器中,浏览器窗口就是约束你的css布局视口(又称初始包含块)。它是所有css百分比宽度推算的根源,它的作用是给css布局限制了一个最大宽度,视口的宽度和浏览器视口宽度一致。

  但是在移动端,情况就很复杂了。

  1??布局视口(layout viewport)

  浏览器厂商为了让用户在小屏幕下网页也能很好地显示,所以把视口宽度设置地很大,一般在768px~1024px之间,最常见的宽度是980px。

  所以,在手机上,视口与移动端浏览器屏幕宽度不再是相关联,是完全独立的,这个浏览器厂商定的视口被称为布局视口。

  

  超过屏幕宽度将出现横向滚动条。

  可以这样设置布局视口的宽度:

  <meta name="viewport" content="width=640">

  document.documentElement.clientWidth/Height返回布局视口的尺寸。

  

  视觉视口(visual viewport)

  视觉视口是用户正在看到的网页的区域,大小是屏幕中css像素的数量。

  

  window.innerWidth/Height返回视觉视口的尺寸。

  

  理想视口

  布局视觉明显对用户是不友好的,完全忽略了手机本身的尺寸。所以苹果引入了理想视口的概念,它是对设备来说最理想的布局视口尺寸。理想视口对用户来说是最理想的,用户进入页面的时候不需要缩放。

  所谓的(最理想的宽度)多少合适呢?其实,如果我们把布局视口的宽度改成屏幕的宽度就不用缩放了,可以这样设置告诉浏览器使用它的理想视口:

  <meta name="viewport" content="width=device-width">

  定义理想视口是浏览器的事情,并不能简单地认为是开发者定义的,开发者只能使用。

  screen.width/height返回理想视口的尺寸,有严重兼容性问题的,可能返回两种值:

  1、理想视口的尺寸(下载浏览器)

  2、屏幕的设备像素尺寸(内置浏览器)

  Screen size tests和Understanding viewport可以测试你的设备的screen.width值,同一设备的不同浏览器返回的值可能是不一样的。这一情况主要发生在默认浏览器和下载浏览器(如UC、Chrome)之间。

  下载浏览器全部返回的都是理想视口尺寸。

  

  缩放

  缩放与设备像素、css像素的关系

  缩放是在放大或缩小css像素,比如一个宽度为200px的元素无论放大多少,还是200个css像素。但是因为这些像素被放大了,所以css像素也就跨越了更多的设备像素,缩小则相反。

  

  缩放与视口

  缩放会影响视觉视口的尺寸。

  页面被用户放大,视觉视口内css像素数量减少,被用户缩小,视觉视口内css像素数量增多。

  用户缩放不会影响布局视口。

  缩放比例

  我们在开发者工具中可以在这里查看缩放比例:

  

  这里的0.3是相对于理想视口的。

  在下载浏览器中,可以这么算(理想视口与视觉视口的比)

  zoom level=screen.width/window.innerWidth

  

  禁止缩放

  <meta name="viewport" content="user-scalable=no">

  设置缩放

  <meta name=viewport" content="initial-scale=2">

  使用initial-scale有一个副作用:同时也会将布局视口的尺寸设置为缩放后的尺寸。所以initial-scale=1与width=device-width的效果是一样的。

  

  完美视口

  解决各种浏览器兼容问题的理想视口设置

  <meta name="viewport" content="width=devive-width,initial-scale=1">

  

  设备像素比

  在谈到像素的时候,讲到除了缩放,屏幕是否为高密度也会影响设备像素和css像素的关系。

  在缩放程度为100%时,他们的比例叫做设备像素比(device pixel ratio):

  dpr=设备像素/css像素

  可以通过JS得到:window.devecePixelRatio

  设备像素比也和视口有关:

  dpr=屏幕横向宽度/理想视口宽度

  

  最后打个广告,欢迎加入本人创建的前端qq群399627992,谢谢  

  

时间: 2024-10-12 16:36:39

移动端网页开发所要具备的基础知识二(视口)的相关文章

移动端网页开发三(纠结适配的那些年)

前面两篇文章介绍了移动端网页开发所要具备的基础知识. 今天着重来讲解移动端的适配方案. 做PC端页面的工程师聊的最多的是兼容,这是因为浏览器之间的差异引起的.而移动端基本是没有兼容问题的,全是css3,简直不要太开心. 但是最明显的是适配问题. 什么是适配呢?做PC页面的时候,我们按照设计图的尺寸来就好,这个侧边栏200px,那个按钮50px.可是,当我们开始做移动端页面的时候,设计师给了一份640px的设计图.那么我们如何把这份设计图实现在各个手机上的过程就是适配. 我所接触过的适配方法,目前

移动端页面开发及传统PC端网页开发的异同

   2017年12月份在公司做过一次技术分享,转眼间过去六个月了.... 今天在感叹完时间的飞逝之后,拿过来在这里分享一下吧,话题是:移动端页面开发及传统PC端网页开发的异同,这个ppt是搜集网上众路资源(包括视频课程)加上自己的理解总结的.如若有误,欢迎指正哦- 原文地址:https://www.cnblogs.com/catherLee/p/9118406.html

如何学习安卓(android)开发,需要学习哪些基础知识?

随着智能手机的流行,现在很多大大小小的开发商都需要在手机上具备客户端,这里是一片强大的吸金磁场,那么很多想学习android的朋友,都会有个疑问,那就是:安卓(android)应该怎么学,需要哪些基础知识? 下面是我根据自己和周围朋友的一些经验,总结出来的几点,希望对想学安卓(Android)开发的朋友有所帮助. 1.安卓(Android)开发的分类: (1)安卓(Android)底层开发:我们需要掌握C语音.Linux操作系统等比较底层的知识,以后的发展方向应该是驱动.嵌入式开发.协议开发.

iOS开发系列--C语言之基础知识

概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift 这么看下去还有大量的内容需要持续补充,但是今天我们从最基础的C语言开始,C语言部分我将分成几个章节去说,今天我们简单看一下C的一些基础知识,更高级的内容我将放到后面的文章中. 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): Hello World 运行过程 数据类型 运算符 常用

移动端网页开发的一些解决方法【转】

网上看到一片好文,转载保留 高性能 CSS3 动画 尽可能的让动画元素不在文档流中,以减少重排 position: fixed; position: absolute; 尽可能多的利用硬件能力,如使用3D变形来开启GPU加速 -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); transform: translate3

移动端开发(一):基础知识

触摸事件 三种在规范中列出并获得跨移动设备广泛实现的基本触摸事件: 1. touchstart :手指放在一个DOM元素上. 2. touchmove :手指拖曳一个DOM元素. 3. touchend :手指从一个DOM元素上移开. 每个触摸事件都包括了三个触摸列表: 1. touches :当前位于屏幕上的所有手指的一个列表. 2. targetTouches :位于当前DOM元素上的手指的一个列表. 3. changedTouches :涉及当前事件的手指的一个列表. 例如,在一个touc

Android音频开发(1):基础知识

先来点闲言碎语,前段时间我有一段感悟:Android开发,本身并不是一个可以走得多远的方向,它只是一个平台,提供了许多封装好的API,让大家能够快速开发出针对特定业务的应用. 真正有价值的地方就在于Android与具体的业务方向结合,比如:Android与音视频技术,Android与智能硬件交互,Android与前端技术的融合与探索,Android信息安全,Android源码深度定制等等. 我一直比较看好音视频/多媒体方向,希望在此能够深入积累和探索,前段时间我发布了一款Android VoIP

网页制作 (HTML) 入门基础知识 及示例

HTML  :(Hyper Text Markup Language)超文本标记语言 html基本写法: <html>    --开始标签 <head> 网页上的控制信息:  -- utf-8:国内使用的一种解码方式 <title>页面标题</title> </head> <body> 页面显示的内容 </body> </html>    --结束标签 body的属性: bgcolor 页面背景色 text 文

Python开发【第一篇】基础题目二

1 列表题 l1 = [11, 22, 33] l2 = [22, 33, 44] # a. 获取l1 中有,l2中没有的元素 for i in l1: if i not in l2: print(i) # 11 # b. 获取l2 中有,l1中没有的元素列表 for i in l2: if i not in l1: print(i) # 44 # c. 获取l1 和 l2 中内容相同的元素 for i in l1: if i in l2: print(i, end=" ") # 22