响应式布局

@XYooo 2017-01-09 01:19:47发表于 iuap-design/blog

一.常见的布局

在讲到响应式布局之前,总结一下在整体页面排版布局,常见的主要的类型有以下几种:

这里写图片描述

布局的实现有着不同的方式,下面是基于页面的实现单位而言,分成四类:固定布局、可切换的固定布局、弹性布局、混合布局

(1)固定布局
以像素作为页面的基本单位,不管设备屏幕及浏览器宽度,只设计一套尺寸;
这里写图片描述

(2)可切换的固定布局
同样以像素作为页面单位,参考主流设备尺寸,设计几套不同宽度的布局。通过识别的屏幕尺寸或浏览器宽度,选择最合适的那套宽度布局;
这里写图片描述

(3)弹性布局
以百分比作为页面的基本单位,可以适应一定范围内所有尺寸的设备屏幕及浏览器宽度,并能完美利用有效空间展现最佳效果;
这里写图片描述

(4)混合布局
同弹性布局类似,可以适应一定范围内所有尺寸的设备屏幕及浏览器宽度,并能完美利用有效空间展现最佳效果;只是混合像素、和百分比两种单位作为页面单位。
这里写图片描述
二.响应式页面布局的概念

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

可切换的固定布局、弹性布局、混合布局都是目前可被采用的响应式布局方式:其中可切换的固定布局的实现成本最低,但拓展性比较差;而弹性布局与混合布局效果具响应性,都是比较理想的响应式布局实现方式。只是对于不同类型的页面排版布局实现响应式设计,需要采用不用的实现方式。

三.理论

html5/css3响应式布局介绍及设计流程,利用css3的media query媒体查询功能。移动终端一般都是对css3支持比较好的高级浏览器不需要考虑响应式布局的媒体查询media query兼容问题。

四.方案

对页面进行响应式的设计实现,需要对相同内容进行不同宽度的布局设计,有两种方式:桌面优先(从桌面端开始向下设计);移动优先(从移动端向上设计);
无论基于那种模式的设计,要兼容所有设备,布局响应时不可避免地需要对模块布局做一些变化(发生布局改变的临界点称之为断点),我们通过CSS/JS获取设备的屏幕宽度,来改变网页的布局,这一过程我们可以称之为布局响应屏幕。常见的主要有如下几种方式:
(1)布局不变,即页面中整体模块布局不发生变化,主要有:
1.模块中内容:挤压-拉:
这里写图片描述
2.模块中内容:换行-平铺
这里写图片描述
3.模块中内容:删减-增加:
这里写图片描述
(2)布局改变,即页面中的整体模块布局发生变化,主要有:
1.模块位置变换:
这里写图片描述
2.模块展示方式改变:隐藏-展开:
这里写图片描述
3.模块数量改变:删减-增加:
这里写图片描述

五.实践

(1)响应式设计的步骤
1. 设置 Meta 标签

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

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

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

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

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

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

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

3.设置多种试视图宽度
假如我们要设定兼容 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) {}

一些注意的
1.宽度使用百分比
2.处理图片的缩放问题
1)简单的解决方法可以使用百分比,但这样不友好,会放大或者缩小图片。那么可以尝试给图片指定的最大宽度为百分比。假如图片超过了,就缩小。假如图片小了,就原尺寸输出。
2)用**::before::after**伪元素 +content 属性来动态显示一些内容或其他事情。在 css3 中,任何元素都可以使用 content 属性了,这个方法就是结合 css3 的 attr 属性和 HTML 自定义属性的功能:
第一部分:HTML结构

<img src="image.jpg"
     data-src-600px="image-600px.jpg"
     data-src-800px="image-800px.jpg"
     alt="">

第二部分:CSS 控制

@media (min-device-width:600px) {
    img[data-src-600px] {
        content: attr(data-src-600px, url);
    }
}

@media (min-device-width:800px) {
    img[data-src-800px] {
        content: attr(data-src-800px, url);
    }
}

3)其他属性
例如 pre ,iframe,video 等,都需要和img一样控制好宽度。对于table,建议不要增加 padding 属性,低分辨率下使用内容居中。

table th, table td { padding: 0 0; text-align: center; }

(2)现有的流行响应式css框架
neoui框架
响应式 Web 设计必备的 12 款 CSS 框架
25款最佳响应式前端开发框架