做网页时,我们通常需要考虑到不同电脑屏幕尺寸,以及不同手机屏幕大小等问题,解决样式发生改变的情况,那么如何解决呢?现在主要是采用自适应来解决高度,宽度的,以及图片自适应问题,下面就PC端和移动端来总结一下,通常进行自适应高度和宽度,图片时,一般与页面的布局存在关系。

1、最小尺寸分辨率1024*768(传统17寸显示器),则可以采用940px、960px、或者常用的980px作为最小宽度

2、1024*768之后稍大的分辨率就是1280*768了,则可以采用1200px或者1220px作为稍大的网页宽度

3、支持css3、html5的高级浏览器可以利用CSS3 Media Queries让网页在不同分辨率下自动调节布局标签

4、不支持css3、html5的脑残浏览器特别是<=ie8系列则需要用js以及resize事件来控制html的布局标签宽度了

5、宽度自适应需要对每个显示模块进行不同宽度的计算,在做html布局时需要大量的计算与适配。

6、宽度自适应为不同宽度显示器写布局元素时常用的css

下面我们看下,如何用js和css来自适应屏幕的大小。

一:了解高度和宽度的基础

下面用图片来说明:

网页可见区域高宽为:document.body.clientHeight||document.body.clientWidth

网页正文的区域高宽为:document.body.scrollHeight||document.body.scrollWidth(包括滚轮的长度)

网页被卷去的上左区域:document.body.scrollTop||document.body.scrollLeft

二: css自适应高度

1.两栏布局,左边固定,右边宽度自适应

方法一:
//html部分
<div id="left">左边</div>
<div id="bodyText">正文</div>
//css部分
*{margin:0;padding:0}
#left{float:left;width:200px;background:red;}
#bodyText{margin-left:200px;background:yellow; 方法二:
//html部分
<div id="left">左边</div>
<div id="body">
    <div id="bodyText">正文</div>
</div>
//css部分
#left{float:left;width:200px;background:red;margin-right:-100%;}
#body{width:100%;float:left;}
#bodyText{margin-left:200px;background:yellow;}

2.三栏布局,两边定宽,中间自适应宽度

方法一:
<div id="left">左边</div>----注意和div的位置有关系
<div id="right">右边</div>
<div id="center">中间</div>
//css部分
#left{width:200px;background:red;float:left;}
#center{width:auto;background:blue;}
#right{width:200px;background:yellow;float:right;} 方法二:
html部分:
<div id="body">
    <div id="center">中间</div>
</div>
<div id="left">左边</div>
<div id="right">右边</div>
css部分:
#body{width:100%;float:left;} //设置浮动和width:100%
#body #center{background:red;margin-left:200px;margin-right:300px;} //margin-left:100%的使用方法
#left{width:200px;background:yellow;margin-left:-100%;float:left}
#right{width:300px;background:blue;margin-left:-300px;float:left}
-----如果设置为margin-left:-100%,则会跑到body的左边。
-----如果设置为margin-left:-300px(即right的宽度),则会跑到body的右边

3.关于最小宽度和最大宽度

这里依然结合布局来看,如下面的代码:自适应宽度,从而改变布局。

//html部分
<div id='container'>
<div class='one'></div>
<div class='two'></div>
<div class='three'></div>
</div> //css部分
#container{width:100%;}
.one{width:20%;background:red;}
.one,.two,.three{float:left; height:100px;}
.two{width:60%;background:yellow;}
.three{width:20%;background:blue;}
@media (max-width:800px){--如果浏览器小于800px
.one{width:40%;}
.two{width:60%}
.three{width:100%}
}
@media (max-width:400px)--如果浏览器宽度小于400px
{
.one{width:100%}
.two{width:100%}
.three{width:100%} }

理解什么叫最小宽度和最大宽度,最小宽度指为元素设置的最小宽度,到达最小宽度后,缩放文本不会起到任何作用

最大宽度是所有元素所能达到的一个上限,不能再继续往上增加。

三: css处理自适应高度

//html部分代码
<div id="fit"></div>
//css代码
html,body{margin:0;height:100%;}
#fit{width:200px;background:yellow;height:100%;border:1px solid red;} --这里同时给html和body加样式,是为了兼容各大浏览器。
IE 处于混杂模式时,body以窗口为高度参照,body设置为100%就可以使得页面和窗口一样高,body里面的嵌套div也可以扩展到窗口高度,
这样的话可以使布局适应浏览器窗口大小。窗体 》body》div  (html ,body {overflow:scroll}  一层滚动条)

但是当处于标准模式时,body以html标签为高度参照,html标签才以窗口为参照,所以仅仅body 100%,并不能使它的子div100% 占据整个屏幕
还要使得 html 100%使得 html获得窗口大小才行。窗体》html》body》div (html ,body {overflow:scroll}  两层滚动条 ,html的滚动条从来不会用到)

父级随子级高度变化而自适应变化与子级随父级高度变化而变化

<div id="fj">
我是父级
<div id="zj1">我是子级1</div>
<div id="zj2">我是子级2</div>
</div>
//css部分
#fj{border:4px solid red;}
#zj1{border:2px solid yellow;}
#zj2{border:2px solid blue;}----这种情况下,父级高度随着子级div的高度自适应的改变

如果子div使用了float属性,此时已经脱离标准流,父div不会随内容的高度变化而变化,解决的办法是在浮动的div下面,加一个空div,设置clear属性both

<div id="fj">
我是父级
<div id="zj1">我是子级11111111111111111111111111</div>
<div id="zj2">我是子级222222222222222222222222222222222222222222
222222222222222222222222222</div>
<div id="clear" style="clear:both"></div>------如果去掉这句话,则父级div高度,不会随着子级的高度变化而变化
</div>
//css部分
#fj{border:4px solid black;}
#zj1{border:2px solid yellow;float:left}
#zj2{border:2px solid blue;float:left}

高度的自适应的方法还有很多,这里不再列举。像height:auto等等。

四:js处理高度和宽度自适应问题

<div id="div1" >222222222222222222222</div>
//js部分
function setHeight(obj)
{
var temHeight=null;
//FF
if(window.innerHeight)
{
temHeight=window.innerHeight;//包括页面高度和滚动条高度
}
else
{
temHeight=document.body&&document.body.clientHeight;
}
if(temHeight>document.body.clientHeight)//页面高度
{
oDiv.style.height=temHeight+"px";
}
else
{
oDiv.style.height=document.body.clientHeight+"px";
}
}
window.onload=function()
{
var oDiv=document.getElementById("div1");
getHeight(oDiv);
}

宽度自适应代码:

function  setWidth(obj)
{
var screenWidth = window.screen.width;
var width;
var imgURL ;
if (screenWidth >= 1440)
{
width = "1400px";
imgURL = "1400.png";//设置不同分辨率下的图片
}
else if (1024 < screenWidth && screenWidth < 1440)
{
width = "1200px";
imgURL = "1200.png";
}
else {
width = "980px";
imgURL = "980.png";
}
obj.style.width=width ;
obj.style.backgroundImage="url(" + imgURL + ")";
})

五:移动端的自适应高度和宽度

移动端的相对要简单些,首先,在网页代码的头部,加入一行viewport标签。

<meta name=”viewport” content=”width=device-width, initial-scale=1″ />

viewport是网页默认的宽度和高度,上面的意思表示,网页的宽度默认等于设备屏幕的宽度,原始缩放比例为1,即网页初始大小占屏幕面积的100%。

1:由于网页会根据屏幕宽度调整布局,所以不能使用绝对宽度的布局,也不能使用具有绝对宽度的元素。这一条非常重要。具体说,CSS代码不能指定像素宽度:width:xxx px;只能指定百分比宽度:width: xx%;或者width:auto;

2:一般使用em,尽量少使用px字体

3:使用流动布局

4:自适应网页设计”的核心,就是CSS3引入的media query模块。下载地址:http://download.csdn.net/download/song_121292057/8031781

自动探测屏幕宽度,然后加载相应的CSS文件。

    <link rel="stylesheet" type="text/css"  media="screen and (max-device-width: 400px)" href="style.css" /> 

-------当屏幕小于400时,就加载style.css这个文件

5:除了用html标签加载CSS文件,还可以在现有CSS文件中加载。

  @import url("style2.css") screen and (max-device-width: 800px);//当小于800px屏幕时,就加载style2.css文件

6:图片的自动缩放,比较简单。只要一行CSS代码:img{ max-width: 100%;}建议根据不同的屏幕分辨率,加载不同大小像素的图片。

移动端的自适应,大体上差不多就这么多,主要核心是利用mediaquery,根据不同的屏幕大小,实现不同的布局。代码可看上面的列子。这里不再重复写。


大概总结了一下自己遇到的问题,还有什么好的方法,请给我留言哈!

作者:向婷风

出处:http://www.cnblogs.com/jtjds/p/5480857.html

如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者

本人同意 转载文章之后必须在 文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

 

如何解决PC端和移动端自适应问题?的更多相关文章

  1. 10天学会phpWeChat——第七天:创建一个自适应PC网站+H5移动端的模块

    本教程基于phpWeChat核心框架1.1.0+版本.下载地址:http://s.phpwechat.com/app_38026ed22fc1a91d92b5d2ef93540f20 通过前面六讲的系 ...

  2. 淘宝购物车页面 PC端和移动端实战

    最近花了半个月的时间,做了一个淘宝购物车页面的Demo.当然,为了能够更加深入的学习,不仅仅有PC端的固定宽度的布局,还实现了移动端在Media Query为768px以下(也就是实现了ipad,ip ...

  3. JS判断当前使用设备是pc端还是web端(转MirageFireFox)

    js判断当前设备 最近用bootstrap做自适应,发现仍然很难很好的兼容web端和PC端的现实. 仔细观察百度,淘宝,京东等大型网站,发现这些网站都有对应不同客户端的子站. 站点 PC端url we ...

  4. React.js 入门与实战之开发适配PC端及移动端新闻头条平台课程上线了

    原文发表于我的技术博客 我在慕课网的「React.js 入门与实战之开发适配PC端及移动端新闻头条平台」课程已经上线了,文章中是目前整个课程的大纲,以后此课程还会保持持续更新,此大纲文档也会保持更新, ...

  5. PC端和移动端在前端开发上的一些区别,前端里移动端到底比pc端多哪些知识

    (1)———————— 前端里移动端到底比pc端多哪些知识,为啥面试时好多公司都问h5水平如何?我做过几年的web前端开发,就简单谈谈自己的感受吧.首先来看看PC端和移动端在前端开发上的一些区别: ( ...

  6. JS判断android ios系统 PC端和移动端

    最近公司上线移动端,需要根据不同的系统跳转到不同的产品页面,百度后发现这一段代码很好用,不但可以判断当前是什么系统,还能知道当前浏览器是什么内核,移动端PC端都已测试无问题! var browser ...

  7. 恩布企业IM PC端,服务端公布 1.16 版本号

    恩布企业IM PC端,服务端公布1.16版本号,开源企业IM.免费企业即时通讯软件:主要版本号更新内容: 恩布服务端核心程序,添加进程守护保护机制,确保系统7*24持续稳定服务: 服务端添加内存数据库 ...

  8. PC端、移动端页面适配方案

    前言 页面自适应PC端.移动端大体上可以分为两种: 1.在同一个页面进行自适应布局,通常使用CSS3 @media 媒体查询器实现 2.两套页面,在后端进行统一适配,根据不同的浏览器UA返回对应的页面 ...

  9. pc端适配移动端

    pc端和移动端共用一套代码 1. 允许网页宽度自动调整 在网页代码的头部,加入一行viewport元标签 <meta name="viewport" content=&quo ...

随机推荐

  1. Karma: 3 - 测试覆盖率

    karma 的插件 karma-coverage 提供了测试代码覆盖率的支持. karma 的页面:http://karma-runner.github.io/0.8/config/coverage. ...

  2. SQL笔记 [长期更新] (-2015.4)

    [遍历所有表,复制表结构,复制表数据] --插入语句SELECT * INTO A FROM B 是在还没有A表的情况下,直接通过B表创建并把B表数据复制到A表里面,之后A,B表的结构和数据完全一样. ...

  3. tp框架 中的时间 查询范围

    $where['add_time'] = array(array('egt',$starttime),array('elt',$endtime),'AND');

  4. eclipes(小白)快捷键

    Ctrl+shift+l        :自动列出全部快捷键 alt+/                  :内容助理 Ctrl+1.               :快速修复 Ctrl+shift+o ...

  5. magnum 命令使用说明

    magnum 命令使用说明 1.用法 usage: magnum [--version] [--debug] [--os-cache] [--os-region-name <region-nam ...

  6. sqlite支持各种交集差集 并集操作了

  7. BootLoader 详解(3)

    BootLoader的stage2 stage2的代码是C语言来实现的,以便于实现更复杂的功能和取得更好的代码可读性和移植性.它与普通C语言程序不同的是,在编译和链接BootLoader这样的程序时, ...

  8. Javaweb自定义标签

    项目中用到自定义的标签文件,但是却在web.xml中没有看到相关的标签配置,原来如果web应用使用servelet2.4以上的版本就不需要在web.xml中定义了,servelet会自动加载tld文件 ...

  9. Kernel Logestic Regression

    一.把 soft margin svm 看做 L2 Regression 模型 先来一张图回顾一下之前都学了些什么: 之前我们是通过拉格朗日乘子法来进行soft Margin Svm的转化问题,现在换 ...

  10. jquery中append跟prepend的用法

    jquery中append和prepend的用法 append   是插入到元素中,并放到元素内的最后面prepend  是插入到元素中,并放到元素内的最前面例$("body"). ...