如何解决PC端和移动端⾃适应问题?
做⽹页时,我们通常需要考虑到不同电脑屏幕尺⼨,以及不同⼿机屏幕⼤⼩等问题,解决样式发⽣改变的情况,那么如何解决呢?现在主要是采⽤⾃适应来解决⾼度,宽度的,以及图⽚⾃适应问题,下⾯就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" ></div>------如果去掉这句话,则⽗级div⾼度,不会随着⼦级的⾼度变化⽽变化
</div>
网页float是什么意思//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";
}
}
{
var ElementById("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模块。下载地址:
⾃动探测屏幕宽度,然后加载相应的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,根据不同的屏幕⼤⼩,实现不同的布局。代码可看上⾯的列⼦。这⾥不再重复写。
⼤概总结了⼀下⾃⼰遇到的问题,还有什么好的⽅法,请给我留⾔哈!
作者:向婷风
出处:
如果您觉得阅读本⽂对您有帮助,请点⼀下“推荐”按钮,您的“推荐”将是我最⼤的写作动⼒!欢迎各位转载,但是未经作者
本⼈同意转载⽂章之后必须在⽂章页⾯明显位置给出作者和原⽂连接,否则保留追究法律责任的权利。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论