移动设备的高速发展给用户带来了非常大的便利。用户使用Android、iPhone和其他移动设备非常easy接入互联网。

移动设备对网页的性能要求比較高。以下就说说Mobile Web开发的一些心得。

Viewport

当你用iPhone訪问一个没有面向移动设备优化过的站点时(最好选取960px宽度的站点)。你会发现iPhone上面刚好能够把整个页面显示出来,可是页面被缩小了许多。字体很小。这其实是Sarari默认把自己当成980px宽度来处理的,而全部iPhone(竖屏)的真实宽度为320px,其实差点儿全部的移动设备都有类似的情况,iPhone的请參考iPhone
5 Display Size and Web Design Tips
。这就牵扯到Viewport的概念了。

Viewport是浏览器的可视区域,也是浏览器的宽度,在PC上面问题比較简单,宽度是多少就多少。可是在移动设备上,浏览器尝试去把整个页面都显示出来,所以就会Viewport值不准确的情况。比如上面提到的Safari从iPhone那里获取到宽度是980px(浏览器仅仅能从系统那里获取宽度)。所以我们要做第一件事就是要浏览器用真实的宽度去解析页面,代码例如以下:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

"width=device-width"表示浏览器用它自己真实的宽度,如iPhone上面就是320px,initial-scale=1.0表示默认不进行缩放。

关于Viewport很多其它请參考:

redirectlocale=en-US&redirectslug=Mobile%2FViewport_meta_tag">Using
the viewport meta tag to control layout on mobile browsers

补充一下:设备像素不等于CSS像素,比如用户放大页面300%。CSS像素也跟着放大300%,但设备像素肯定不会有变化。非常多设备为了保证良好浏览效果,一般会告诉浏览器一个假的分辨率,比如iPhone5s的设备分辨率是640x1136,可是却告诉浏览器它的分辨率是320x568(站点要加width=device-width,否则是980宽度),否则真的以640x1136在那点屏幕上进行浏览页面肯定要近视了。

响应式设计

移动设备的分辨率多种多样。这就要求我们要在全部设备上都能非常好的展示。而响应式设计就是非常好的解决方式。BootStrap等框架都号称移动优先,当然缺点是文件比較大,假设站点比較简单的话能够自己用百分比写写就能够了。很多其它响应式设计请參考:响应式设计介绍

图片精度

如今新的手机配置都比較高,绝大部分手机的像素比例(devicePixeRatio)都超过1,iPhone的Retina屏幕的像素比例为2,Nexus5的像素比例为3。

像素比例高的屏幕必需要有高清的图片,这样显示效果才好,比方iPhone5s的竖屏宽度为320px,可是仅仅有使用640px宽度的图片才干完美显示。

我们的开发经验是图片以iPhone5s为标准进行处理,就是在iPhone5s上面必须是高清显示,其他广大Anroid设备上自适应处理。

能够參考:移动Web——CSS为Retina屏幕替换图片

性能相关

  • Zepto.js

    jQuery很强大。可是它的体积比較大。即使是2.x的压缩版也有82KB。

    ZeptoJS号称迷你版jQuery,兼容大部分的jQuery API。它的大小仅仅有24KB,由于它仅仅支持移动浏览器,全部体积小,速度快。

  • Lazy load

    对于移动网页来说。真正消耗流量部分应该是图片部分。由于图片通常都比較大,所以我们能够使用Lazy Load的方式仅仅载入当前屏幕中的图片。由于用户非常多时候仅仅是看一下当前屏幕的内容就跳到下一页了。没有必要一次把全部图片都载入进来。

  • 其他

    为了提高性能和降低下载流量,我们能够压缩合并CSS,JS文件,对图片进行压缩处理,对图标进行合并等。

HTML5 & CSS3

移动设备上的浏览器都是比較新的浏览器,基本上都支持HMTL5和CSS3的新的功能。因此我们应该多使用它们。最起码我们能够使用CSS3的圆角效果来替换图片。以下列出一些很有用的CSS3特性。

  • rem

    CSS经常使用px, pt作为字体单位。可是它们的缺点是它们是绝对值。百分比(%)和em作为字体单位时大小,它们的值是由它们的父元素的字体大小决定的,优点是它的值是动态变化的。缺点是由于每一个元素的父元素的字体大小都不一样,因此各个em的大小也不一样。终于导致统一设置字体大小。

    而rem相对于百分比和em来说。它是相对于root 元素的字体大小而不是父元素,这样不论什么一个元素使用rem作为单位时它的參考单位都是一样的。

    这样我们就统一控制整个页面的字体大小了。

    请參考:CSS3的REM设置字体大小

  • 动画

    我们通经常使用JS来实现动画,比方jQuery的animation(),可是JS的性能比較原生的CSS3动画要差非常多。所以能用CSS3实现的动画就用CSS3实现。

參考文档

移动Web开发实践的更多相关文章

  1. Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》

    首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...

  2. 移动Web开发实践——解决position:fixed自适应BUG

    在移动web中使用position:fixed,会踩到很多坑,在我之前的一篇文章<移动端web页面使用position:fixed问题总结>中已经总结了很多bug,但是在后续的开发中有关f ...

  3. 移动web开发实践-css3(1)盒模型display:-webkit-box;的使用

    提到移动布局不得不提到盒模型display:-webkit-box;这个属性,在移动布局中浮动已经不在重要,相反自适应成为主要的需求,所以display:-webkit-box;变得尤为重要. box ...

  4. 移动端字体缩放问题解决方案-摘自《html5移动web开发实践》

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  5. 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)

    目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构   前言 学习Python也有一个半月时间了,学到现在感觉 ...

  6. 什么是 web 开发

    什么是 web 开发     这几天因为工作需要,了解了一下Web development 的技术路线,来源自     en.wikipedia.org/wiki/Web_development    ...

  7. 初次比较正式的IT职场面试后几点对自己web开发的思考

    昨天晚上参加一个web开发面试,对于还没有真正毕业的自己来说,web开发的面试不是第一次,暑假就面试几家公司,前几次的面试并没有发现自己对自己学习的专业知识有什么学习态度的问题,因为前几次的面试官都是 ...

  8. 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践

    提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...

  9. Redis在WEB开发中的应用与实践

    Redis在WEB开发中的应用与实践 一.Redis概述: Redis是一个功能强大.性能高效的开源数据结构服务器,Redis最典型的应用是NoSQL.但事实上Redis除了作为NoSQL数据库使用之 ...

随机推荐

  1. Clojure基础

    最近看了一段clojure,下面是从书上摘下来的一下语言基础的精华部分 ;函数的基本形式 (defn average [numbers] (/ (apply + numbers) (count num ...

  2. c语言头文件以及make注意事项

    c语言头文件以及make注意事项 头文件说明:自己定义的头文件和项目文件放在一起,注意使用""而不是使用<>,系统的头文件才使用<> 当main函数要调用其 ...

  3. soa服务治理

    SOA服务治理 文章:SOA 治理简介 文章:中小型互联网公司微服务实践-经验和教训

  4. 【Luogu】2114起床困难综合征(位运算贪心)

    题目链接 这题真是恶心死我了. 由于位运算每一位互不干涉,所以贪心由大到小选择每一位最优的解,但是要判断一下边界,如果选择该解使得原数>m则不能选择. 代码如下 #include<cstd ...

  5. [HNOI2010]CHORUS 合唱队 (区间DP)

    题目描述 对于一个包含 NN 个整数的数列 AA ,我们可以把它的所有元素加入一个双头队列 BB . 首先 A1A1 作为队列的唯一元素,然后依次加入 A2∼ANA2∼AN ,如果 Ai<Ai− ...

  6. 转载:shell中awk printf的用法

    转载:http://www.linuxawk.com/jiaocheng/83.html 6. printf函数   打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表 ...

  7. 【ZOJ4053】Couleur(主席树,set,启发式)

    题意: 有n个位置,每个位置上的数字是a[i],现在有强制在线的若干个单点删除操作,每次删除的位置都不同,要求每次删除之后求出最大的连续区间逆序对个数 n<=1e5,1<=a[i]< ...

  8. Linux下重启就需要重新激活eth0的解决办法(ifup eth0)

    新安装linux系统,网卡不能自动激活去获取ip,每次都需要手工执行以下命令 ifup eth0 后续通过将ONBOOT=yes这句就能开机启动自动激活,就可以解决问题 vim /etc/syscon ...

  9. 转载自CSDN,结论:windows下按ENTER键应该是\r\n ascii码为 13 10

    记得在Windows下学X86汇编语言时,用0DH(\r)和0AH(\n)来输出回车(跳到下一行的开始处).问题来了,在Windows下是 先回车再换行呢还是先换行再回车呢?在Unix系统下换行只有\ ...

  10. LeetCode OJ--Evaluate Reverse Polish Notation

    http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/ 栈使用 #include <iostream> #inc ...