移动端的那些事儿

回头想想,移动端的web页面代码编写远没有我想的那样复杂(可能是我做的这个项目比较简单的缘故)。但是就入门来说,其实是蛮简单的,我把他总结为一下几个方面:特殊的meta标签/百分百比布局宽度/rem设置字体大小/css3的使用。
好吧,让我们开始吧,以下是移动web新手的浅见,老鸟请绕行,如有赐教不胜感激。

1.特殊的meta标签;
因为现在我们用的智能手机(iOS,Android)的浏览器都是基于webkit内核,这里有一些针对webkit的特殊meta标签,在开发移动端web是起到很重要的作用:
<meta content=“width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;” name=“viewport” />

强制让文档的宽度与设备的宽度保持1:1,并且文档最大的宽度比例是1.0,且不允许用户点击屏幕放大浏览;
<meta content=“yes” name=“apple-mobile-web-app-capable” />

iphone设备中的safari私有meta标签,它表示:允许全屏模式浏览;
<meta content=“black” name=“apple-mobile-web-app-status-bar-style” />

iphone的私有标签,它指定的iphone中safari顶端的状态条的样式;
<meta content=“telephone=no” name=“format-detection” />

告诉设备忽略将页面中的数字识别为电话号码。
<meta content=“email=no” name=“format-detection” />

Android中禁止自动识别页面中的邮件地址,iOS中不会自动识别邮件地址;

(注:由于webkit的浏览器对于html5的支持比较好,所以我们在声明头部的时候最好用html5的声明方式。当然如果你习惯了html4,那我只能告诉你,还是先学学html5在接着看吧!)

2.百分百布局;
拿到设计师的640px(以iPhone4的比例做的设计稿)的设计稿后,我就严格的按照设计稿设置了各个模块的高度/字号。接下来悲催的事情发生了,写出来的页面在手机上显示的异常大。我傻了,这是嘛情况!后来咨询专业人士才了解到,虽然iphone4的分辨率是960x640px,但是其屏幕的像素密度比较高,它的实际大小应该是减半的。所以在写代码时一切的高度/字号都要是设计稿的1/2。接着说百分比布局:
在做移动web页面时,我们要用百分比布局来实现自适应屏幕宽度。有pc端web页面开发经验的同学就会知道,元素的盒子模型(不清楚的同学可以去w3school上查查)。
那我想要一个元素100%显示,又必须有一个固定的padding-left/padding-right,还有1px的边框,怎么办?
element{
        width: 100%;
        padding-left: 10px;
        border: 1px solid blue;
}

这样编写代码必然导致出现横向滚动条,肿么办?要相信问题就是用来解决的。这时候伟大的css3为我们提供了box-sizing属性,对于这个属性的具体解释不做赘述(想深入了解的同学可以到w3school查看,要知道自己动手会更容易记忆)。让我们看看如何解决上面的问题:
element{
        width: 100%;
        padding-left: 10px;
        box-sizing:border-box;
        -webkit-box-sizing:border-box;
        border: 1px solid blue;
}

好的,问题被解决了!

3. rem设置字体大小;
在这里让我们花一些梳理一下css中的单位:px/em/rem(以下内容摘自0101后花园)
px:就是css中最基本的长度单位了,用px做单位基本上没什么问题,可以做到让页面按套路精确的展现。但是,(听到但是的时候是不是突然有些不适,就像每次开发的同学喊我的时候,我的潜意识会告诉自己,坏了又出bug了!!)如果全篇用px布局会暗藏一个问题,就是当用户和Ctrl滚页面的时候(说白了就是ctrl+,ctrl-),你会发现页面结构产生了不可预知的错乱,因此有砖家倡导使用em替代px。
em:em是相对单位,em相对的基准点就是浏览器的字体大小(浏览器默认字体为16px),所以1em默认等于16px。那么14px=0.875em; 公式是14/16=0.875em。用em来写的话,就可以解决ctrl+,ctrl-时造成的页面错乱问题。

可是,问题又来了,em准确的说是相对于父节点的字号来计算的,如果自身定义了字号那么就相对自身字号来计算,举例如下:
html { font-size: 100%; }
.box-0 {
    height: 1em; /* 此时height等于16px */
}
.box-1 {
    font-size: 0.625em; /* 此时基准字号以变更为16*0.625=10px */
    height: 1em; /* 此时实际height等于10px */
}

看明白了吧,1em并不是一个固定不变的值,再加上数学是体育老师教的,这不是自作孽吗。没关系,css3为我们引入一个新的单位就是rem可以解决这个问题。

rem:rem和em一样也是一个相对单位,为了方便理解,我们就理解rem为root em,顾名思义rem只相对跟节点<html>计算,这就是说只要在根节点设定好参考值,那么全篇的1rem都相等,计算方式同em,默认1rem=16px; 同理你可以设定html { font-size:62.5% } 那么1rem就等于10px,以此类推 …(当然万恶的ie678不支持rem,但是还好我们在做的是移动端web页面)

4.使用css3;
做这种高大上的移动web页面怎么能少的了css3。不过平时css3用的比较少,这里记下几个我在这个项目中用到的css3属性。更深入的亲们自己去学咯。同样,这里不对属性做赘述,放着强大的w3school不用,我只能对你说:药不能停啊!:

A.圆角(这个太常用了)
element{
        border: 1px solid blue;
        -moz-border-radius: 3px;
        -webkit-border-radius: 3px;
        border-radius: 3px;
}

B.渐变(这个在做按钮的时候很常用)
element{
        background-image: -moz-linear-gradient(top, #2288cc, #389de2); /* Firefox */
        background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #389de2), color-stop(1, #2288cc)); /* Saf4+, Chrome */
}

C.去掉手持设备点击时出现的透明层 (一般会在头部做格式化)
a,button,input{
        -webkit-tap-highlight-color: rgba(0,0,0,0);
        -webkit-tap-highlight-color: transparent; /* For some Androids */
}

在应用了此属性时,链接的active属性会实效,解决的方法是,在页面unload时运行document.addEventListener("touchstart", function(){}, true);使active状态可用。(注:在小米系统下,点击链接仍然会出现红色的边框,各位同学如有解决方法,请赐教,不胜感激。)

D.改变盒子模型(上面已讲过)
element{
        box-sizing:border-box;
        -webkit-box-sizing:border-box;
}

5.关于调试;

好了,有了上面的知识,我们就可以写一个移动的页面了。但不要太乐观了,我们要怎么调试呢?难道每写一个页面就发一次服务器,然后用手机访问测试环境!当然不需要那么麻烦,如果是用pc机的同学,可以用一个本地localhost工具调试(这次就不要各位自己动手了,附送上我自己用的工具。用法很简单,把所有的页面放到一个文件夹中,页面放在根目录下,工具也放在跟目录下,把你要调试的页面改成index.html。当然如果你有好几个页面,最好还是做一个index页面。启动调试器,用手机访问你电脑的ip,要保证手机所用的wifi和pc的网络在一个网段)。用mac的同学就到网上找一篇localhost的配置方法,开启以下这个功能就可以访问了。
时间: 2024-10-13 13:49:18

移动端的那些事儿的相关文章

ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘

开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行走于天下.但这样真的就可以走一辈子吗?实际上,ASP.Net经常被喷的诟病就在于WebForm以及只会拖控件的ASP.Net程序员,往往大型互联网系统也没有采用WebForm的模式进行开发.但是,WebForm并不是一无是处,而是我们没有用好,还有很多东西我们知其然不知其所以然,现在我们就来对这些平

我关注的一周技术动态 2015.11.08

分布式系统实践 1. 为什么大部分NoSQL不提供分布式事务? http://www.jdon.com/47671?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 要点: 市面上各种NoSQL数据库种类繁多, 但是大部分NoSQL数据库都不提供分布式事务, 我也经常听到有些同学评价某些NoSQL数据库的缺点时就是说不提供分布式事务. 分布式事务不是实现不了, 而是代价较高, 本文介绍了实现分布式事务需要做出的牺牲和取舍

移动端页面布局的那些事儿

移动端页面布局的那些事儿 http://www.xiaoxiangzi.com/Programme/CSS/4298.html 一. viewport 什么是viewport 简单来讲,viewport就是浏览器上,用来显示网页的那一部分区域了,也就是说,浏览器的实际宽度,是和我们手机的宽度不一样的,无论你的手机宽度是320px,还是640px,在手机浏览器内部的宽度,始终会是浏览器本身的viewport.如今的浏览器,都会给自己的本身提供一个viewport的默认值,可能是980px,或者是其

移动端开发的那点事儿

移动端开发 Emulation: 谷歌浏览器开发者工具中的插件 Device: 设备信息 像素比(device  pixel ratio): iPhone5:1136*640 独立像素 iPhone5: 568 * 320 物理像素 像素比:2 很多专家说onclick这样的事件在移动端有半秒延迟 viewport  <meta name="viewport" content="width=device-width,height=device-height,user-s

移动端那些事儿(转)

回头想想,移动端的web页面代码编写远没有我想的那样复杂(可能是我做的这个项目比较简单的缘故).但是就入门来说,其实是蛮简单的,我把他总结为一下几个方面:特殊的meta标签/百分百比布局宽度/rem设置字体大小/css3的使用.好吧,让我们开始吧,以下是移动web新手的浅见,老鸟请绕行,如有赐教不胜感激. 1.特殊的meta标签:因为现在我们用的智能手机(iOS,Android)的浏览器都是基于webkit内核,这里有一些针对webkit的特殊meta标签,在开发移动端web是起到很重要的作用:

PHP-客户端的IP地址伪造、CDN、反向代理、获取的那些事儿

外界流传的JAVA/PHP服务器端获取客户端IP都是这么取的: 伪代码: 1)ip = request.getHeader("X-FORWARDED-FOR") 可伪造,参考附录A 2)如果该值为空或数组长度为0或等于"unknown",那么: ip = request.getHeader("Proxy-Client-IP") 3)如果该值为空或数组长度为0或等于"unknown",那么: ip = request.getHe

前端里移动端到底比pc端多哪些知识?

前端里移动端到底比pc端多哪些知识,为啥面试时好多公司都问h5水平如何? 我做过几年的web前端开发,就简单谈谈自己的感受吧. 首先来看看PC端和移动端在前端开发上的一些区别: (1)PC考虑的是浏览器兼容性,移动端开发考虑的更多的是手机兼容性,因为目前不管是android手机还是ios手机,一般浏览器用的都是webkit内核,所以做移动端开发,更多考虑的应该是手机分辨率的适配,和不同操作系统的略微差异化: (2)在部分事件的处理上,移动端自然是偏向于触屏的,所以触屏事件的一些规律要多摸索一下,

Android客户端与PHP服务端交互(一)---框架概述

背景 作为一个普通上班族,总是想做一些自认为有意义的事情,于是乎准备成立一个工作室,尽管目前正在筹备阶段,但是之前有些朋友提出一些需求的时候,我发现自己的能力还是有限,直到最近和一些技术牛朋友聊起这事儿,大家不谋而合,也准备加入小团队.只是我作为工作室的“业务员”,感觉有必要都了解一下,这样才好和客户沟通,提出解决方案,也方便大家讨论订方案.譬如之前有商家提出的在线订单,要求客户可以使用APP直接下单,商家处理订单.当时我不是很懂,自己接不了,现在和朋友交流后,准备学习一下. 框架 ① 客户提交

基于NIO的消息路由的实现(四) 服务端通讯主线程(2)断包和粘包的处理

本来我打算单独开一章,专门说明粘包和断包,但是觉得这个事儿我在做的时候挺头疼的,但是对于别人或许不那么重要,于是就在这里写吧. 那么何谓粘包.何谓断包呢? 粘包:我们知道客户端在写入报文给服务端的时候,首先要将需要写入的内容写入Buffer,以ByteBuffer为例,如果你Buffer定义的足够大,并且你发送的报文足够快,此时就会产生粘包现象,举例来说 你发送一个 报文" M|A",然后你有发送了一个"M|B",如果产生粘包,服务端从缓冲区里面读出的就是"