关于响应式布局,你了解多少

作者:乐于分享的小团体
浏览数:
时间:2020-03-25

响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这个概念是为解决移动互联网浏览而诞生的。


响应式布局可以为不同终端的用户提供更加舒适的界面和更好的用户体验,而且随着大屏幕移动设备的普及,用“大势所趋”来形容也不为过。随着越来越多的设计师采用这个技术,我们不仅看到很多的创新,还看到了一些成形的模式。


优点和缺点



优点:

1.面对不同分辨率设备灵活性强

2.能够快捷解决多设备显示适应问题


缺点:

1.兼容各种设备工作量大,效率低下

2.代码累赘,会出现隐藏无用的元素,加载时间加长

3.其实这是一种折中性质的设计解决方案,多方面因素影响而达不到最佳效果

4.一定程度上改变了网站原有的布局结构,会出现用户混淆的情况


我们在上面了解了什么是响应式布局,那在我们的实际项目中应该怎么去布局呢?在以往我们布局网站的时候都会受到不同浏览器的兼容性的困扰,还要来个不同尺寸设备,我们该怎么淡定下来呢?

有需求就会有解决方案,说到响应式布局,就不得不提起CSS3中的Media Query(媒介查询),这可是个好东西,易用、强大、快捷……Media Query是制作响应式布局的一个利器,使用这个工具,我们可以非常方便快捷的制造出各种丰富的实用性强的界面。接下来就一起来深入的了解Media Query。


Media Query是什么?

通过不同的媒介类型和条件定义样式表规则。媒介查询让CSS可以更精确作用于不同的媒介类型和同一媒介的不同条件。媒介查询的大部分媒介特性都接受min和max用于表达”大于或等于”和”小于或等于”。如:width会有min-width和max-width媒介查询可以被用在CSS中的@media和@import规则上,也可以被用在HTML和XML中。通过这个标签属性,我们可以很方便的在不同的设备下实现丰富的界面,特别是移动设备,将会运用更加的广泛。



Media query能够获取哪些值?

设备的宽和高device-width,device-height显示屏幕/触觉设备。

渲染窗口的宽和高width,height显示屏幕/触觉设备。

设备的手持方向,横向还是竖向orientation(portrait|lanscape)和打印机等。

画面比例aspect-ratio点阵打印机等。

设备比例device-aspect-ratio-点阵打印机等。

对象颜色或颜色列表color,color-index显示屏幕。

设备的分辨率resolution。


语法结构及用法

@media 设备名 only (选取条件) not (选取条件) and(设备选取条件),设备二{sRules}


响应式布局的步骤



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 切换横屏之后触摸才能回到具体尺寸的问题。)


2. 通过媒介查询来设置样式 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. 宽度需要使用百分比

例如这样:

#head { width: 100% }
#content { width: 50%; }


2. 处理图片缩放的方法

简单的解决方法可以使用百分比,但这样不友好,会放大或者缩小图片。那么可以尝试给图片指定的最大宽度为百分比。假如图片超过了,就缩小。假如图片小了,就原尺寸输出。

img { width: auto; max-width: 100%; }

用::before和::after伪元素 +content 属性来动态显示一些内容或者做其它很酷的事情,在 css3 中,任何元素都可以使用 content 属性了,这个方法就是结合 css3 的 attr 属性和 HTML 自定义属性的功能:HTML 结构:

< img src="image.jpg" data-ke-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; }