移动web前端的一些硬技能(二)动手前必须掌握的基本常识
记得刚开始接触移动端web的时候,书和网上的资料都不多,查起来很费劲,现在比以前要好很多了,可是还是会有一些刚接触移动端的朋友会问我一些我最初会遇到的问题,或许是书本写的并不那么重,也或许是这些知识写的太散,以至于大多数人并没有很好的注意到。
其实做移动web前端,大多数和pc端的web前端基本一样,只是有一些东西需要注意一下,否则带来的麻烦就不是一星半点了。
一、viewport
如果看过移动端web代码的应该都会看到类似于这一句<meta name="viewport" content="width=device-width">。
其中,在w3c中对<meta>的解释是“可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词”,我个人的理解就是提供一些页面的属性信息,供给给浏览器和服务器请求,以便其返回适当的值。而viewprt是其元信息中key-value中的key,意思是虚拟窗口。而后面跟的content是其value,可指定虚拟窗口的宽高。上面那句中“width=device-width”是说虚拟窗口宽度与设备宽度等宽。通俗点说,viewport就是指的类似于我们PC上浏览器的大小,而不是电脑显示屏的大小。(因为移动端浏览器都是全屏的,所以viewport也间接的等于了显示屏的大小,但这只是个...怎么说呢,“巧合”吧,哈哈)。
说到这里就根本停不下来了,因为还要解释下虚拟像素和物理像素概念。
以前我们在PC上1像素,2像素都还算比较标准(当然,Mac推出的Retina屏那都是后来的事了),直到iPhone4推出高密度显示屏,一切就发生了变化。iPhone4物理像素宽是640,但是返回的设备宽度却是320,也就是说,iPhone4的device-width的值是320px。
但是,注意,一般提到“但是”都是要出事的节奏——但是当我们不设置viewport的时候,iPhone默认设定的宽度就是980px,比如,我们做了个320px宽的页面,不设置viewport,放在iPhone4的Safari浏览器里就会变成下面的样子
如果我们设置width=device-width, 或者width=320,再把刚才的页面放进去,就会是下面的样子。
也就是说,如果width=device-width了以后,页面如果超过320px的宽,就会变成下面的样子了。
为什么我们要用iPhone4来举例呢,那个手机已经过气了,我上次拿去卖,人家才给300块钱收= =...主要是这些最初都是有这个手机引起的,“创世纪”的东西都经典。扯远了,回来——是不是说页面宽度设成320就万事大吉了呢,不是,毕竟市场上设备繁杂,什么尺寸都有,320只是一部分手机的,Android机的像素比更复杂——对了,像素比!如果用chrome的模拟工具应该都见过这个参数,其实就是物理像素与虚拟像素的比值。
有人可能会问,为什么要搞这么复杂,这应该是苹果公司为了开发人员思考起来不复杂,所以才会返回这么个虚拟像素值。但是制作网页的时候,会有这种考虑——如果要在iPhone4这样的手机上做一张贯穿左右的图片,这个图片是做320的合适,还是做640的合适?答案是尽量做640的,因为2倍像素比的手机,显示1个虚拟像素,要用4个物理像素(田字格,横2倍,竖2倍),即使图片等比压缩,图片越精细,显示效果越好,相反,如果320的,也只能适用于320,因为还没考虑横屏呢。。。,但是做移动web肯定要在不同尺寸的设备来显示,要衡量最大与最小的尺寸,这个就是优化站点的一个内容了,这个以后会提及。
二、页面的自适应
现在PC端用响应式的主要是国外的一些网站,这一点,他们总是走在前头。在移动端,响应式一般用于横屏和竖屏之间的转换,为了提升用户体验来使用,也就是说,对于浏览器,需要多重分界点来判断,对于移动端,只需要一个分界判断就好了。
上面说的判断,主要是指媒体查询,@media出现比较早,但是用的似乎并不是很广泛,这几年才开始用的越来越多,而且早期主要是嵌在样式引入标签里,比如:
<link rel="stylesheet" media="only screen and (max-width:320px)" href="style.css" />
但是这么做,在dom加载的时候,引入的css也是会被下载的,只是不使用而已。而且这还会增加http请求,对于这么珍贵的请求,这简直是暴殄呀,当然,这也是一个优化的内容,以后详述。总之,现在越来越多的用在css文件中,采用区块的方式写入,等待用户触发,具体@media如何来用,外面的资料一大把,去看吧。
还有一种就是“百分比理论”,它也普遍存在,经常会有人困惑与此,我也不例外,到底采用哪一种更适合开发移动站。
百分比理论其实有点和bootstrap的流式栅格化类似,按照百分比来设定web页面内的元素尺寸,这样,在什么样的设备都可以有一个比较“和谐”的展示,但是“放纵”终归是会露尾巴的,尺寸一但夸张一点就会看起来非常别扭,所以,按照实际项目自己忖度这个使用度,用好了,可以让用户感觉不到响应的缝隙,结合起来去做,还是很有意思的。
三、px、em与rem
w3c里面对css的尺寸单位定义的很多,但是常用的只有两个,px和em,rem是css3新增的,其实本质也是em,只不过是root em => rem。曾有一段时间em火了,后来又灭了,rem又火了,为什么呢,这个问题要从这些单位的区别来说起。
px:像素 ,计算机屏幕上的一个点(引用自w3school);em:相对尺寸,相对于上一级元素尺寸的倍数,值可以是浮点数;rem,如上述,相对于根节点字体大小的倍数。
最初的时候,浏览器只有改变字体大小的能力,em是相对大小,所以布局起来更给力,后来浏览器能力强了,不只是字体,可以全局改变,再加上em根据上级改变的特性,让其修改的时候非常难掌控,容易出现牵一发动全身,而我只是想挠挠头而已的尴尬局面,所以人们又开始青睐简单的px。不过好在css3推出了rem,这个根据根节点来改变大小的特性,使得人们对他的爱越来越多。
浏览器默认字体大小一般16px,也就是1em,也就是100%,为了使开发者用起来更直观,可以设定全局字体尺寸为62.5%,也就是说全局大小为16*62.5%=10px,这样,12px=1.2rem了,能够和px互相转换,可以让我们对字体大小值有个比较清晰该概念。
这个不止在移动端,在PC端同样适用,这个时候,改全局就只需要改root的尺寸就好了。
再啰嗦一句,62.5%怎么来的呢?1em分成16份,1px = 0.0625em,10px = 0.625em = 62.5%,这样,假设我想设定一个18px大小的rem,那就是18/10 = 1.8rem.
移动web前端的一些硬技能(二)动手前必须掌握的基本常识的更多相关文章
- 移动web前端的一些硬技能(一)关于移动设备
移动端web其实也就是小尺寸触摸屏设备的web,其中包含了两个词——1.小尺寸设备:2.触摸屏.能把这两个问题给解决掉,就已经是一个基本合格的移动web前端开发工程师了.对于前端工程师来说,前路漫漫, ...
- Web前端JQuery面试题(二)
Web前端JQuery面试题(二) 1.请写出jquery的语法? <script type="text/javascript"> $(document).ready( ...
- web前端知识大纲:系列二 css篇
web前端庞大而复杂的知识体系的组成:html.css和 javascript 二.css 1.CSS选择器 CSS选择器即通过某种规则来匹配相应的标签,并为其设置CSS样式,常用的有类选择器.标签选 ...
- web前端的一些实用技能
如今我们使用的互联网,客户端与服务器端的交互无时无刻不在发生.比如我们在浏览器打开网页,浏览器就是客户端,将网页数据发过来的也就是服务器.其实服务器,并没有什么特别的,也就是一台昼夜不停运转的电脑罢了 ...
- web前端性能调优(二)
项目经过第一波优化之后APP端已基本已经符合我们的要求了,但是TV端还是反应比较慢,页面加载和渲染都比较慢了一点,我觉的还是有必要在进行一些优化,经过前面的优化,我们的优化空间已经小了一部分,不过还是 ...
- Web前端经典面试试题(二)
上次由于时间有限只分享了一部分的前端面试题,所以本篇继续分享前端经典面试试题 一. 栈和队列的区别? 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 队列先进先出,栈先进后出. 栈 ...
- Web前端开发学习笔记(二)
Homework2:http://my.ss.sysu.edu.cn/wiki/display/WEB/Homework+2+-+Movie+Review 这份作业跟布局相关,因此很多都是布局的知识: ...
- web前端----JavaScript的DOM(二)
前面在DOM一中我们知道了属性操作,下面我们来了解一下节点操作.很重要!! 一.节点操作 创建节点:var ele_a = document.createElement('a');添加节点:ele_p ...
- Web前端基础(15):jQuery基础(二)
1. jQuery选择器 jQuery选择器是jQuery强大的体现,它提供了一组方法,让我们更加方便的获取到页面中的元素. 1.1 基本选择器 例子如下: <!DOCTYPE html> ...
随机推荐
- python安装setuptools和pip
今天需要写一个python导出excel的小程序.这里需要用到XlsxWriter模块,但是这个模块并没有安装,所以需要先下载该模块,然后才能在程序中使用.这里就需要安装模块,我选择使用pip.以下就 ...
- BZOJ 2324 营救皮卡丘
http://www.lydsy.com/JudgeOnline/problem.php?id=2324 思路:最小费用最大流 考虑设数组d[k][i][j],代表只用前k个城市,i到j的最短路 然后 ...
- csdn的下载链接token
qt之QComboBox定制 http://www.cnblogs.com/swarmbees/p/5710714.html http://download.csdn.net/detail/qq_30 ...
- 有空可以对C#尝一下鲜,WCF看上去很诱人(跨进程、跨机器、跨子网,跨企业网乃至跨Internet的分布式服务)
说道底不还是要借助NGNIX实现,PHP自身呢?C#的WCF可以脱离IIS就可以实现跨进程.跨机器.跨子网,跨企业网乃至跨Internet的分布式服务,宿主可以是IIS,WinForm,WPF, Wi ...
- cf486C Palindrome Transformation
C. Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes input ...
- Remove Invalid Parentheses 解答
Question Remove the minimum number of invalid parentheses in order to make the input string valid. R ...
- 关于qt学习的一点小记录(2)
嗯...这次接了个单 要求图形界面,刚好可以巩固并学习下QT.毫不犹豫的就接了 下面记录下出现的问题: 1. QWidget和QDialog QDialog下的槽函数有accept()与reject( ...
- 【转】手机web——自适应网页设计(html/css控制)
手机web——自适应网页设计(html/css控制) 就目前形势来看,Web App 正是眼下的一个趋势和潮流,但是,对于Web App的设计可能大家有的不是很了解,下面就将整理好的网页设计的技巧奉献 ...
- python高级编程之访问超类中的方法:super()
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #超类01 #它是一个内建类型,用于访问属于某个对象超类特性 pri ...
- xcode5下面安装Command Line Tools
运行命令 sudo xcode-select --install 就会显示一行文字,并且弹出一个对话框,确认安装后他就会自己下载来安装了. 至此,Command Line Tools就能够重新复活了