如何实现响应式布局

 

一、响应式布局概念:

Responsive design,意在实现不同屏幕分辨率的终端上浏览网页的不同展示方式。通过响应式设计能使网站在手机和平板电脑上有更好的浏览阅读体验。

响应式与自适应的区别:

响应式布局:不管用户使用的是什么设备都是在服务器把数据推送到浏览器后,脚本或CSS自行侦测屏幕大小后执行对应的样式表内容,并且一直通过本地脚本在监听屏幕大小的变化,随时做出样式响应的变化,所以是主动的。同一页面在不同大小设备可能呈现不一样的页面效果

自适应:不同大小设备呈现同样的页面效果,只是文字、图片等的大小不一样,但是相对位置一样。即在不同大小设备看起来一样

二、实现方式

(一)em、rem

1、px—em—rem三者的区别

px:相对于显示器屏幕分辨率;

em:基于父级元素的字体大小;

rem:基于html的字体大小

2、通过rem来实现响应式布局

rem单位都是相对于根元素html的font-size来决定大小的,根元素的font-size相当于提供了一个基准,当页面的size发生变化时,只需要改变font-size的值,那么以rem为固定单位的元素的大小也会发生响应的变化。

因此,如果通过rem来实现响应式的布局,只需要根据视图容器的大小,动态的改变font-size即可

function refreshRem() {
    var docEl = doc.documentElement;
    var width = docEl.getBoundingClientRect().width;
    var rem = width / 10;
    docEl.style.fontSize = rem + 'px';
    flexible.rem = win.rem = rem;
}
win.addEventListener('resize', refreshRem);

(二)flex弹性盒模型

 

(三)媒体查询

使用@media媒体查询可以针对不同的媒体类型定义不同的样式,特别是响应式页面,可以针对不同屏幕的大小,编写多套样式,从而达到自适应的效果。

设置步骤如下:

1. 设置 Meta 标签

大多数移动浏览器将HTML页面放大为宽的视图(viewport)以符合屏幕分辨率。你可以使用视图的meta标签来进行重置。下面的视图标签告诉浏览器,使用设备的宽度作为视图宽度并禁止初始的缩放。在<head>标签里加入这个meta标签。

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

user-scalable = no 属性能够解决 iPad 切换横屏之后触摸才能回到具体尺寸的问题。 ·

3. 通过媒介查询来设置样式 Media Queries

Media Queries 是响应式设计的核心。

它根据条件告诉浏览器如何为指定视图宽度渲染页面。假如一个终端的分辨率小于 980px,那么可以这样写:

@media screen and (max-width: 980px) {
  #head { … }
  #content {}
  #footer {}
}

这里的样式就会覆盖上面已经定义好的样式。

4. 设置多种试图宽度

如果需要设定兼容 iPad 和 iphone 的视图,那么可以这样设置:

/** iPad **/
@media only screen and (min-width: 768px) and (max-width: 1024px) {}
/** iPhone **/
@media only screen and (min-width: 320px) and (max-width: 767px) {}

(四)使用百分比布局

(五)通过vw/vh来实现自适应

css3中引入了一个新的单位vw/vh,与视图窗口有关。vw表示相对于视图窗口的宽度,vh表示相对于视图窗口高度,除了vw和vh外,还有vmin和vmax两个相关的单位。

各个单位具体的含义如下:

单位含义
vw 相对于视窗的宽度,视窗宽度是100vw
vh 相对于视窗的高度,视窗高度是100vh
vmin vw和vh中的较小值
vmax vw和vh中的较大值

这与%十分相似。vw和%的区别为:

单位含义
% 大部分相对于祖先元素,也有相对于自身的情况比如(border-radius、translate等)
vw/vh 相对于视窗的尺寸

从对比中我们可以发现,vw单位与百分比类似,单确有区别,前面我们介绍了百分比单位的换算困难,这里的vw更像"理想的百分比单位"。任意层级元素,在使用vw单位的情况下,1vw都等于视图宽度的百分之一。

 

 

 

参考博客:

https://blog.csdn.net/weixin_33968104/article/details/89701159 常用解决方案对比

http://caibaojian.com/356.html 媒体查询

https://www.cnblogs.com/aaron---blog/p/10436726.html 弹性盒子模型

 

posted @ 2019-09-03 18:06  Olina_Chenry  阅读(1994)  评论(0编辑  收藏  举报