网页自适应移动端及根据访问设备自动识别展示手机站或PC站

一、7个步骤让PC网站自动适配手机网页
传统的网站如何完成向移动设备的快速转型? 通过移动适配技术可以实现,移动适配主要通过底层的web技术开发手段来完成,下面切图网将从技术角度来告诉你通过7个步骤来完成一个PC网站向移动设备的跳跃!
1允许网页宽度自动调整
“自适应网页设计”到底是怎么做到的?其实并不难。
首先,在网页代码的头部,加入一行viewport元标签。

<meta name="viewport" content="width=device-width,target-densitydpi=high-dpi,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">
<meta name="format-detection" content="telephone=no">

此属性target-densitydpi=high-dpi只适用安卓手机
viewport是网页默认的宽度和高度,上面这行代码的意思是,网页宽度默认等于屏幕宽度(width=device-width),原始缩放比例(initial-scale=1)为1.0,即网页初始大小占屏幕面积的100%。
所有主流浏览器都支持这个设置,包括IE9。对于那些老式浏览器(主要是IE6、7、8),需要使用css3-mediaqueries.js。
2、不使用绝对宽度
由于网页会根据屏幕宽度调整布局,所以不能使用绝对宽度的布局,也不能使用具有绝对宽度的元素。这一条非常重要。
具体说,CSS代码不能指定像素宽度:width:xxxpx;
只能指定百分比宽度:width:xx%;或者width:auto;
3、相对大小的字体
字体也不能使用绝对大小(px),而只能使用相对大小(em、rem)。

body{
	font:normal100%Helvetica,Arial,sans-serif;
}

上面的代码指定,字体大小是页面默认大小的100%,即16像素。

h1{
	font-size:1.5em;
}

然后,h1的大小是默认大小的1.5倍,即24像素(24/16=1.5)。

small{
	font-size:0.875em;
}

small元素的大小是默认大小的0.875倍,即14像素(14/16=0.875)。
4、流动布局(fluidgrid)
“流动布局”的含义是,各个区块的位置都是浮动的,不是固定不变的。

.main{
	float:right;
	width:70%;
}
.leftBar{
	float:left;
	width:25%;
}

float的好处是,如果宽度太小,放不下两个元素,后面的元素会自动滚动到前面元素的下方,不会在水平方向overflow(溢出),避免了水平滚动条的出现。
另外,绝对定位(position:absolute)的使用,也要非常小心。
5、选择加载CSS
“自适应网页设计”的核心,就是CSS3引入的MediaQuery模块。
它的意思就是,自动探测屏幕宽度,然后加载相应的CSS文件。

<link rel="stylesheet" type="text/css" media=”screenand(max-device-width:400px)” href=”tinyScreen.css”/>

上面的代码意思是,如果屏幕宽度小于400像素(max-device-width:400px),就加载tinyScreen.css文件。

<link rel="stylesheet" type="text/css" media=”screenand(min-width:400px)and(max-device-width:600px)”href=”smallScreen.css”/>

如果屏幕宽度在400像素到600像素之间,则加载smallScreen.css文件。
除了用html标签加载CSS文件,还可以在现有CSS文件中加载。
6、CSS的@media规则
同一个CSS文件中,也可以根据不同的屏幕分辨率,选择应用不同的CSS规则。

@mediascreenand(max-device-width:400px){
	.column{
		float:none;
		width:auto;
	}
	#sidebar{
		display:none;
	}
}

上面的代码意思是,如果屏幕宽度小于400像素,则column块取消浮动(float:none)、宽度自动调节(width:auto),sidebar块不显示(display:none)。
7、图片的自适应(fluidimage)
除了布局和文本,”自适应网页设计”还必须实现图片的自动缩放。
这只要一行CSS代码:

img{max-width:100%;}

这行代码对于大多数嵌入网页的视频也有效,所以可以写成:

img,object{max-width:100%;}

老版本的IE不支持max-width,所以只好写成:

img{width:100%;}

此外,windows平台缩放图片时,可能出现图像失真现象。这时,可以尝试使用IE的专有命令:

img{-ms-interpolation-mode:bicubic;}

或者,EthanMarcotte的imgSizer.js。

addLoadEvent(function(){
	varimgs=document.getElementById(“content”).getElementsByTagName(“img”);
	imgSizer.collate(imgs);
});

最好还是做适配分辨率的图片。有很多方法可以做到同样效果,服务器端和客户端都可以实现。

二、适配最常见的操作方法
据观察,PC站和手机站匹配最常用的几种方法是移动适配、JS跳转、Meta声明、302规则等等,由于每种方法的操作方式不同,产生的效果也不同,具体的优缺点也需要区别对待,在此,给大家比较一下这4种适配方法的优缺点以及需要注意的地方:

1、移动适配
现在很多搜索引擎都提供移动适配的功能,例如百度的开放适配和360的移动适配,利用百度站长工具提交PC页-手机页对应关系Sitemap,或者利用360站长工具提交PC页-手机页对应关系txt就能实现PC站内容和手机站一一适配。
优点:是只需要在搜索引擎工具提交资料,无需对站点本事做改动,而且网站内容一一对应,并不只局限于网站首页。
缺点:就是只能在百度或者360移动搜索中生效,其他没用提交适配文件的搜索中就无效了。

2、JS跳转
JS跳转对于某些行业来说有着重要的作用,尤其是对于用户转换率网站首页较高的网站,只需要在网站的头部加一段JS代码判定是否是移动端访问,然后所有的流量就会全部流向手机站的主页。
优点:是适用于所有的移动搜索,并不局限于百度和360,可以提高用户的转换率。
缺点:是难以实现每个页面的一一对应,而且容易被某些搜索引擎判定作弊,从而受到惩罚。

3、Meta声明
Meta声明的格式一般为<meta http-equiv=”mobile-agent” content=”format=[wml|xhtml|html5]; url=url”>,站长可以将这段代码加在PC站的头部,由Meta信息来指明该PC页对应的手机页的URL,以及该URL对应页面的格式。
优点:是代码简单易懂,操作方便。
缺点:是只能在百度移动搜索中生效,对于其他搜索引擎无效(另外,还可以使用百度转码)。

4、302规则
302规则指的是,当判定移动端访问网站时,302临时跳转到一个网址(手机站),例如可以在htaccess文件里加上一段判定手机的代码,做个302重定向。
优点:是不需要再额外在网站的前端代码中加任何东西,也不需要向搜索引擎提交规则。
缺点:是虽然302是暂时性的重定向,但过于频繁的302是很有可能给网站带来不利的影响的,据测试,有可能会导致PC站被降权,具体的尺度需要站长自己去把握。

以上4种适配方法是最为常见的操作方法,通常PC站做了以上处理后,一段时间以后移动端搜索出来的结果,下面匹配的网址就变成了移动站网址,不过标题还是PC站标题。
至于到底哪种方法更好,我更倾向于第一种,毕竟百度移动搜索占据着网站的大部分流量,而且用户体验度也最好。

三、百度开放适配服务的3种方案
百度站长平台对移动适配方面的东西这么定义:为了提升用户的移动搜索结果浏览体验,百度移动搜索对具有对应手机站的PC站提供“开放适配”服务。如果您同时拥有PC站和手机站,且二者能够在内容上对应,您可向百度“提交”PC页—手机页的对应关系,若对应关系准确,将有助于百度在移动搜索中将原PC页结果替换为对应的手机页结果。积极的参与“开放适配”,将有助于您的手机站在百度移动搜索获得更好的展现,同时以更佳的浏览效果赢取用户口碑。
百度开放适配服务共提供三种方案——自主适配、标注Meta声明、提交对应关系Sitemap,同时向站点提供开放适配进度查询。
可能大家对标注meta声明和提交对应关系的sitemap这一项比较熟悉,另外对自主适配这个的理解仅限于使用百度的siteapp这个东西上面,因为当时我们的网站是在原有的PC站点上,做了一个对应的手机站,这个手机站是单独存在的。
而在移动设备上搜素到的我们的网站都是PC端的形式,我们不想用百度的自动转码,只是想标注meta进行判断,判断成功后进行跳转,而我当时的需求就是要这个跳转代码,可能大家知道的跳转代码有很多,但是我当时想要的是符合百度或者搜索引擎对移动站点适配这个前提有一定的接受能力的跳转方式,而不是简单的做个跳转,做SEO的都懂得。

知识扩展——开放适配问题解答:
1、百度提供的三种开放适配(自主适配、标注Meta声明、对应关系Sitemap),是不是只要做其中的一个就行了,如果三个我都做,会不会有影响?顺便问下自主适配如何设置?

答:自主适配需要从服务器端进行,PC与主移动版本用301重定向,各移动版本之间用302重定向,然后使用抓取诊断工具,看百度移动抓取是否抓PC站的url的时候识别为移动url状态,你能做的话就都做,只要适配的映射关系没有冲突,保证唯一正确。

2、从移动端打开一个页面,如果这个页面只存在PC端,不存在移动端,那么这个页面应该是个转码页面(是不是也可以这样理解,移动端没有PC端的页面都会被进行转码),问题来了,进入转码的这个页面的PV是算移动端的还是PC端的?

答:转码是有几率的,一般页面实在质量不利于移动端浏览,也不会给你转码,而且转码的前提是用户从搜索进入或浏览器自动转码适应,如果用户不是从搜索进入或浏览器没有转码适应功能,那么就不会给你转码了。
pv得看你使用的统计代码性质,如果转码后源码破坏了你的统计代码的调用,或者统计代码不利于接收移动端数据,就不会有这个访客的统计,如果仅仅是pc页面,那么这个pv就计算进你安装代码的那个pc域名下,然后你可以进无线分析,查看到移动用户的情况。

3、假如我的移动端内容都是产品,且不具备关键词排名优势,而从移动端搜索出来的关键词排名都来自PC端内容页面,如果我把PC端的这些内容页面都对应到移动端,修改不同TDK标签,然后把移动端的内容页与PC端内容页做适配一一对应,这样会不会有助于关键词的排名?

答:移动pc的tdk及用户行为本身就有很大区别,比如移动端用户更多看中流量的情况,而pc端用户更喜欢页面的丰富与设计感(就会造成数据量大,图片多,对移动用户来说不喜欢的)。

四、根据访问设备自动识别展示手机站或PC站的方法
随着移动互联网时代的到来,相信很多站长都在想办法把自己的网站做成手机与电脑通用的网站,如何让网站自动识别手机端与PC端是各位站长一直困惑的问题。
很多人都想实现这样一个功能:在电脑上输入域名访问的是PC端的网站,而在手机或者平板电脑等移动设备上输入域名是访问的一个手机网站,而且PC端网站和手机移动端的网站是不一样的,当然手机移动端的网站是简化的,和微信的微网站一样的,很简洁的。
比如:网站已经建好了,现在又建了一个手机网站,怎么才能访问同一个域名下让网站自动识别设备,比方说用电脑上进入官网,用移动设备自动进入手机站点,这样就实现了,手机网站和PC网站使用同一个域名,不同的设备访问的时候,看到的是各自的网站。

1、在网站head标签里加跳转语句
要实现网站根据访问设备自动识别展示手机站或PC站这个功能,需要以下几个步骤:
(1)、得有一个PC端,在电脑上访问的官方网站,比如:www.hiretianxia.cn
(2)、需要重新制作一个移动端的手机网站,比如:m.hiretianxia.cn
(3)、在PC端的网站上加上一段代码,每个页面都需要加上,放在PC端网站head标签里面,代码如下:

//平台、设备和操作系统
var system = {
	win: false,
	mac: false,
	xll: false
 };
 //检测平台
var p = navigator.platform;
system.win = p.indexOf(“Win”) == 0;
system.mac = p.indexOf(“Mac”) == 0;
system.x11 = (p == “X11″) || (p.indexOf(“Linux”) == 0);
//跳转语句
if (!(system.win || system.mac || system.xll)) {
	window.location.href = “http://m.hiretianxia.cn”;
}

(4)、进入域名解析系统,做一个别名cname解析,比如:将手机网站的地址123.域名.com解析到m.hiretianxia.cn域名解析系统。

2、根据移动终端和浏览器版本信息判定的语法
还有一些站长或SEO可能会考虑到移动终端的版本和浏览器版本信息,对此,也为大家整理了一段比较有效的代码,如下所示:

<script type="text/javascript">
	var browser={
		versions:function(){
			var u = navigator.userAgent, app = navigator.appVersion;
            return {																	//移动终端浏览器版本信息
                trident: u.indexOf('Trident') > -1, 									//IE内核
                presto: u.indexOf('Presto') > -1, 										//opera内核
                webKit: u.indexOf('AppleWebKit') > -1, 									//苹果、谷歌内核
                gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, 			//火狐内核
                mobile: !!u.match(/AppleWebKit.*Mobile.*/)||!!u.match(/AppleWebKit/), 	//是否为移动终端
                ios: !!u.match(/i[^;]+;( U;)? CPU.+Mac OS X/), 							//ios终端
                android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, 			//android终端或者uc浏览器
                iPhone: u.indexOf('iPhone') > -1 || (u.indexOf('Mac') > -1 && u.indexOf('Macintosh') < 0), //是否为iPhone或者QQHD浏览器
                iPad: u.indexOf('iPad') > -1, 											//是否iPad
                webApp: u.indexOf('Safari') == -1 										//是否web应该程序,没有头部与底部
			};
		}(),
        language:(navigator.browserLanguage || navigator.language).toLowerCase()
}
if (browser.versions.ios||browser.versions.android||browser.versions.iPhone||browser.versions.iPad)O{
	self.location=http://www.hiretianxia.cn;
}
</script>

3、自动识别手机页面、iPad页面和wap页面
可以根据不同的终端类型适当的改变正则表达式,这段代码添加到需要识别的网页,会根据客户端的类型自动跳转到手机页、平板页或其他移动设备页面,非常的灵活!

<script type="text/javascript">
	if(/AppleWebKit.*mobile/i.test(navigator.userAgent) || 
(/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent))){
		if(window.location.href.indexOf("?mobile")<0){
			try{
				if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)){
                	window.location.href="http://www.hiretianxia.cn/m";
             	}else if(/iPad/i.test(navigator.userAgent)){
                	window.location.href="http://www.hiretianxia.cn/pad";
             	}else{
                	window.location.href="http://www.hiretianxia.cn/wap"
             	}
         	}catch(e){}
		}
	}
 </script>

4、使用PHP语言来识别
对于一些精通PHP语言的博友来说,也可以通过PHP语法来实现,比如以下的写法:

//设定Mobile的定义
$mobileAgent = array("iphone", "ipod", "ipad", "android", "mobile", "blackberry", "webos", "incognito", "webmate", "bada", "nokia", "lg", "ucweb", "skyfire");
//读取用户的浏览器资料
$browser = $_SERVER['HTTP_USER_AGENT'];
$isMobile = false;
//检查开始
foreach($mobileAgent as $search){
	if(stristr($browser,$search)!=false){
		$isMobile = true;
        //echo $search;
        header("Location: http://www.hiretianxia.cn/m/index.html");
        //停止运行程序
        exit;
	}
}

5、做个自动识别的效果
经过多次测试,我们也可以做个自动识别的效果,方法很简单,在你需要自动跳转的页面加入以下代码:

<script type="text/javascript">
	var mobileAgent = new Array("iphone", "ipod", "ipad", "android", "mobile", "blackberry", "webos", "incognito", "webmate", "bada", "nokia", "lg", "ucweb", "skyfire");
	var browser = navigator.userAgent.toLowerCase();
	var isMobile = false;
	for (var i=0; i<mobileAgent.length; i++){ 
		if (browser.indexOf(mobileAgent[i])!=-1){ 
			isMobile = true;
 			//alert(mobileAgent[i]);
 			location.href = 'http://siteapp.baidu.com/webapp/hiretianxia.cn#m/http://hiretianxia.cn/';
 			break; 
 		} 
 	}
</script>

6、自动识别移动端适配跳转网址的代码
手机版的网站需要简单,以文字为主,才能很好的兼容,可以在网站的首页设置一个程序来判断用户是手机端还是电脑,如果是手机端,直接中转到手机端,如果是电脑端,直接中转到电脑端(大家也可以使用百度提供的百度移动搜索开放适配服务)。
对此,大家可以在网站的首页插入入下代码:

<script type="text/javascript">  
	function browserRedirect() {  
		var sUserAgent = navigator.userAgent.toLowerCase();  
		var bIsIpad = sUserAgent.match(/ipad/i) == "ipad";  
		var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os";  
		var bIsMidp = sUserAgent.match(/midp/i) == "midp";  
		var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4";  
		var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb";  
		var bIsAndroid = sUserAgent.match(/android/i) == "android";  
		var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce";  
		var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile";  
		if (!(bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) ){  
			window.location.href=B页面; 
		}
	} 
	browserRedirect(); 
</script>
<script type="text/javascript">
	uaredirect("http://www.hiretianxia.cn/wap/");
</script>

一般情况下,PC版网页自动识别手机客户端并跳转,用js进行判断是否手机客户端进行跳转最好,特别是静态网页,把这个过程通过js的方式放在用户客户端执行,可以大大减少服务器端额外处理的压力,但是有时需要通过在服务器端进行判断的情况除外。

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值