移动端和PC端在代码书写上有什么区别呢?
下面是基础的HTML模板,使用工具自动生成的:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
head>
<body>
body>
html>
这段代码,并没有告诉我们移动端开发有什么不同,现在需要加一些东西。
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<meta content="telephone=no" name="format-detection">
<meta content="email=no" name="format-detection">
<title>标题title>
<link rel="stylesheet" href="index.css">
head>
<body>
Hello World!
body>
html>
我们可以看到,上面就是加了很多meta, meta标签用来干什么的不知道?meta
meta用来描述页面相关的一些信息。
1、用来描述视口的信息,将宽度设置为设备的宽度,初始化缩放比例为1,最大放大比例为1,不允许用户被缩放,我们还可以设置最小缩小比例minimum-scale=1.0
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
2、用来描述是都删除苹果设备默认的工具栏和菜单栏,yes删除,no保留
<meta content="yes" name="apple-mobile-web-app-capable">
3、描述苹果设备的状态栏样式,可选值有black黑色,default默认白色,black-translucent灰色
<meta content="black" name="apple-mobile-web-app-status-bar-style">
4、描述是否将页面上的数字格式化为电话连接,yes为格式化,no为不格式化
<meta content="telephone=no" name="format-detection">
5、描述是否将页面上的文字格式化为电子邮件,yes为格式化,no为不格式化
<meta content="email=no" name="format-detection">
6.描述内核渲染模式,可用于国内的双核浏览器,如搜狗,QQ,360,遨游。可用取值有webkit,ie-comp,
ie-stand。
<meta name="renderer" content="webkit">
7、优先使用最新版本和Chrome,
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
8、针对手持设备优化,主要是针对一些老的不识别viewport的浏览器,比如黑莓
<meta name="HandheldFriendly" content="true">
9、微软的老式浏览器
<meta name="MobileOptimized" content="320">
9、uc强制竖屏
<meta name="screen-orientation" content="portrait">
10、QQ强制竖屏
<meta name="x5-orientation" content="portrait">
11、 UC强制全屏
<meta name="full-screen" content="yes">
12、 QQ强制全屏
<meta name="x5-fullscreen" content="true">
13、UC应用模式
<meta name="browsermode" content="application">
14、QQ应用模式
<meta name="x5-page-mode" content="app">
15、windows phone 点击无高光
<meta name="msapplication-tap-highlight" content="no">
除了meta,还可以设置link
这个apple-touch-icon
属性是苹果设备的特有属性,用于在将当前网页添加到桌面快捷方式的时候显示的图标。图标只有在使用的时候才会下载。当不设置这个link时,ios设备的safari浏览器回去网页的根目录下寻找这个文件,当没有时会使用网页的快照作为图标。生成的图标默认是带有圆角和高亮的,如果不需要的话,在设置link时需要将apple-touch-icon
替换为apple-touch-icon-precomposed
。在寻找图标的时候,不同分辨率的设备拥有不同的图标推荐尺寸,有相等尺寸的则选择相等的,没有则选择比大的最近的尺寸,如果没有再匹配其他相近的尺寸。如果符合尺寸的图标不止一个,则优选带有precomposed
关键字的图标。选择的顺序如下:
Retina设备的图标大小是普通设备的两倍,因此也不用指定4套不同的图标,而只需要制作Retina的便可,ios设备会自动缩放。但是还是设置四个link,只是在指定href属性时让他们只想相同的文件便可,常用的尺寸有57*57,72*72,114*114,144*144.更多尺寸请参照
<link rel="apple-touch-icon" href="apple-icon-iphone.png">
<link rel="apple-touch-icon" href="apple-icon-ipad.png" size="72*72">
<link rel="apple-touch-icon" href="apple-icon-iphone-retina.png" size="120*120">
<link rel="apple-touch-icon" href="apple-icon-ipad-retina.png" size="150*150">
来一个稍全的HTML
<html lang="en">
<head>
<meta charset="UTF-8">
<meta charset="UTF-8" />
<meta name="renderer" content="webkit" />
<meta http-equiv="X-UA-Compatible" content="IE=EDGE, chrome=1">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="msapplication-tap-highlight" content="no" />
<meta name="format-detection" content="telephone=no" />
<title>Documenttitle>
<link rel="apple-touch-icon" href="apple-icon-iphone.png">
<link rel="apple-touch-icon" href="apple-icon-ipad.png" size="72*72">
<link rel="apple-touch-icon" href="apple-icon-iphone-retina.png" size="120*120">
<link rel="apple-touch-icon" href="apple-icon-ipad-retina.png" size="150*150">
head>
<body>
body>
html>
对于样式,为了完美适配各分辨率的设备,应该使用CSS3的媒体查询,在不同分辨率下,应用不同的样式。更多媒体查询..
@media screen and (min-width:240px) {
html,body,button,input,select,textarea {
font-size: 9px;
}
}
@media screen and (min-width:320px) {
html,body,button,input,select,textarea {
font-size: 12px;
}
}
@media screen and (min-width:380px) {
html,body,button,input,select,textarea {
font-size: 12px;
}
}
@media screen and (min-width:420px) {
html,body,button,input,select,textarea {
font-size: 16px;
}
}
@media screen and (min-width:450px) {
html,body,button,input,select,textarea {
font-size: 18px;
}
}
这里为什么都是对font-size进行设置呢?这叫要说到移动端开发的所谓响应式的,整个网页要根据网页的大小来动态改变,那就意味着网页中的元素也要根据屏幕的大小来变化,自然对于每一个分辨率的屏幕都做一个样式表也是可以的,但是这样代码的复用率也就无从弹起了,那这时候应该怎样呢?既然屏幕是大小在变,而整个网页的布局都是在按照设计的比例进行变化。说到比例,我们最常用的标准化的比例也就是百分比,在响应式的网页中百分比自然是不可或缺的。在PC端开发的时候已经经常会用到百分比,但是它都是相对于父级元素来讲的,那么父级元素的大小从何而来,无从下手,PC端我们通常靠px
固定一个元素,但移动端不行,移动端针对的分辨率太多了,少了可变性。刚才讲到我们应该用比例,比例如C = A : B
,比例是先对的,有一个参照,也就是数学中除数和被除数的概念,被除数为B,除数为A,被除数则就是那个参照物,要得到A,只需要知道B,A = B*C
。在移动端开发中这个参照B是什么呢,B就是这个html下的font-size
。特别强调的是是html下的font-size,但是难道每次都去写几倍几倍于font-size吗?这里,给html的font-size提供了一个表示rem,我们知道行内字体大小的时候常用em
,它也是针对于字体大小的,但是em
是针对于继承的字体大小,个人理解rem
应该是root em 的简写,就是根的意思。所以我们在移动开发的时候就只需要设置html的字体大小,其他全部都可以用rem
的倍数表示了,如html的字体大小为12px,元素的width: 2rem就表示元素的宽度为24px;
在浏览器中,默认html的字体大小为16px,也就是说,默认的1rem = 16px
。因此看到网上很多这样的写法
html {
font-size: 62.5%;
}
这个62.5%怎么来的呢,也就是继承默认。62.5% * 16px = 10px;将1rem规范化为10px;
在PC开发中会引入一个reset的css文件用于归一化样式,但是后来发现reset过于古板和陈旧,现在使用normalize.css。
在网上看到一个值得借鉴的媒体查询的
@media (device-height:568px) and (-webkit-min-device-pixel-ratio:2){/* 兼容iphone5 */}
@media only screen and (max-device-width :480px){ }
@media only screen and (min-device-width :481px){ }
/*6*/
@media (min-device-width : 375px) and (max-device-width : 667px) and (-webkit-min-device-pixel-ratio : 2){ }
/*6+*/
@media (min-device-width : 414px) and (max-device-width : 736px) and (-webkit-min-device-pixel-ratio : 3){ }
/*魅族*/
@media only screen and (min-device-width :1080px) and (-webkit-min-device-pixel-ratio : 2.5){ }
/*mate7*/
@media only screen and (min-device-width :1080px) and (-webkit-min-device-pixel-ratio : 3){ }
/*4 4s*/
@media only screen and (device-height :480px) and (-webkit-device-pixel-ratio:2){ }
@media screen and (min-width: 320px) and (max-width: 480px) { }
/* 平板之类的宽度 1024 以下设备 */
@media only screen and (min-width: 321px) and (max-width: 1024px) {
body {
background: blue;
}
}
/* PC客户端或大屏幕设备: 1028px 至更大 */
@media only screen and (min-width: 1029px) {
body {
background: green;
}
}
/* 竖屏 */
@media screen and (orientation:portrait) and (max-width: 720px) {对应样式}
/* 横屏 */
@media screen and (orientation:landscape){对应样式}
继续探索请戳…