当前位置:   article > 正文

viewport在pc端是否生效_如何解决PC端和移动端自适应问题?

pc浏览器地址栏会挤占viewport的高度

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

一、最小尺寸分辨率1024*768(传统17寸显示器),则能够采用940px、960px、或者经常使用的980px做为最小宽度

二、1024*768以后稍大的分辨率就是1280*768了,则能够采用1200px或者1220px做为稍大的网页宽度

三、支持css三、html5的高级浏览器能够利用CSS3 Media Queries让网页在不一样分辨率下自动调节布局标签

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

五、宽度自适应须要对每一个显示模块进行不一样宽度的计算,在作html布局时须要大量的计算与适配。

六、宽度自适应为不一样宽度显示器写布局元素时经常使用的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部分

左边
正文

//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部分:

中间
左边

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.οnlοad=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标签。

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

1:因为网页会根据屏幕宽度调整布局,因此不能使用绝对宽度的布局,也不能使用具备绝对宽度的元素。这一条很是重要。具体说,CSS代码不能指定像素宽度:

width:xxx px;只能指定百分比宽度:width: xx%;或者width:auto;

2:通常使用em,尽可能少使用px字体

3:使用流动布局

自动探测屏幕宽度,而后加载相应的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,根据不一样的屏幕大小,实现不一样的布局。代码可看上面的列子。这里再也不重复写。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/270718
推荐阅读
相关标签
  

闽ICP备14008679号