11.CSS布局篇之响应式——rem

html-css011

11.CSS布局篇之响应式——rem,第1张

rem是什么?

px,绝对长度单位,最常用

em,相对长度单位,相对于父元素,不常用

rem,相对长度单位,相对于根元素,常用于响应式布局

响应式布局的常用方案

media-query,根据不同屏幕宽度设置根元素font-size

rem,基于根元素的相对单位

rem的弊端:“阶梯性”

1.静态布局

——最传统的布局方式,网页中所有尺寸都是由px作为单位,设置了min-width,如果宽度小于就会出现滚动条,如果大于这个宽度则内容居中外加背景

实现方式:PC:居中布局,所有样式使用绝对宽度/高度(px),设计一个Layout,在屏幕宽高有调整时,使用横向和竖向的滚动条来查阅被遮掩部分;

移动设备:另外建立移动网站,单独设计一个布局,使用不同的域名如wap.或m.。

优点:采用之前的css2的布局·方式,布局简单,没有兼容性问题。

缺点: 在手机端不能合理的显示,移动端不能使用pc端页面,需要再写一个布局来呈现。

实践案例:Float 布局、绝对布局

2.自适应布局

——可以看成是不同屏幕下由多个静态布局组成的。自适应布局是为不同的屏幕分辨率分别定义不同的布局。改变屏幕分辨率可以切换不同的静态布局(页面元素位置可能发生改变),但在每个静态布局中,页面元素不随窗口大小的调整发生变化。自适应布局页面里面元素的位置会变化,很好的解决了流式布局中的大屏空间利用率不高弊端。

注:屏幕分辨率变化时,页面里面元素的位置会变化而大小不会变化。

3.流失布局(百分比布局 %)

网页中主要的划分区域的尺寸使用百分数(搭配min-*、max-*属性使用),分别为不同的屏幕设置布局格式,当屏幕大小改变时,会出现不同的布局,意思就是在这个屏幕下这个元素块在这个地方,但是在那个屏幕下,这个元素块又会出现在那个地方。只是布局改变,元素不变。可以看成是不同屏幕下由多个静态布局组成的。

而流式布局的特点是随着屏幕的改变,页面的布局没有发生大的变化,可以进行适配调整,这个正好与自适应布局相补。使用%百分比定义宽度,高度大都是用px来固定住,可以根据可视区域 (viewport) 和父元素的实时尺寸进行调整,尽可能的适应各种分辨率。往往配合 max-width/min-width 等属性控制尺寸流动范围以免过大或者过小影响阅读。这种布局方式在Web前端开发的早期历史上,用来应对不同尺寸的PC屏幕(那时屏幕尺寸的差异不会太大),在当今的移动端开发也是常用布局方式,但缺点明显:主要的问题是如果屏幕尺度跨度太大,那么在相对其原始设计而言过小或过大的屏幕上不能正常显示。因为宽度使用%百分比定义,但是高度和文字大小等大都是用px来固定,所以在大屏幕的手机下显示效果会变成有些页面元素宽度被拉的很长,但是高度、文字大小还是和原来一样(即,这些东西无法变得“流式”

注:屏幕分辨率变化时,页面里元素的大小会变化而但布局不变。

主要实践案例:左侧固定+右侧自适应、左右固定宽度+中间自适应、圣杯布局、双飞翼布局

4.响应式布局(媒体查询)

——通过响应式设计能使网站在手机和平板电脑上有更好的浏览阅读体验。屏幕尺寸不一样展示给用户的网页内容也不一样.利用媒体查询可以检测到屏幕的尺寸(主要检测宽度),并设置不同的CSS样式,就可以实现响应式的布局。主要依靠是css的媒体查询。

注:每个屏幕分辨率下面会有一个布局样式,即元素位置和大小都会变。

5.弹性布局

——rem/em、flex布局

做响应式网站离不开CSS响应式布局查询代码写法,而在此之前,我们需要了解什么是媒体查询以及如何才CSS中引入媒体查询。

什么是媒体查询?

媒体查询可以让我们根据设备显示器的特性(如视口宽度、屏幕比例、设备方向:横向或纵向)为其设定CSS样式,媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成。媒体查询中可用于检测的媒体特性有width、height和color(等)。使用媒体查询,可以在不改变页面内容的情况下,为特定的一些输出设备定制显示效果。

如何在CSS中引入媒体查询?

媒体查询写在CSS样式代码的最后,CSS是层叠样式表,在同一特殊性下,靠后的的样式会重叠前面的样式。

如何用CSS做响应式布局呢?

1、在HTML头部添加以下代码,用来显示兼容移动设备的显示效果。

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

参数详解:

width=device-width :宽度等于当前设备的宽度

initial-scale=1 :初始的缩放比例(默认为1)

minimum-scale=1 :允许用户缩放到的最小比例(默认为1)

maximum-scale=1 :允许用户缩放到的最大比例(默认为1)

user-scalable=no :用户是否可以手动缩放(默认为no)

2、引入包含Media的CSS文件

一般情况HTMLCSS代码都是分开写的,Media也不例外。

<link rel="stylesheet" type="text/css" href="m320.css" media="only screen and (max-width:320px)"/>

<link rel="stylesheet" type="text/css" href="m480.css" media="only screen and (min-width:321px) and (max-width:375px)"/>

3、写Media中的代码

以某个网页的响应式布局为例

结构:@media设备类型and (设备特性){样式代码}

/*媒体查询*/

/*当页面大于1200px时,大屏幕,主要是PC端*/

@media (min-width: 1200px) {

}

/*在992 和1199 像素之间的屏幕里,中等屏幕,分辨率低的PC*/

@media (min-width: 992px) and (max-width: 1199px) {

#adver .center {

width: 50%

margin: -10px 0 0 -25%

}

main .center h2 {

font-size: 40px

}

}

/*768和991像素之间的屏幕里,小屏幕,主要是PAD*/

@media (min-width: 768px) and (max-width: 991px) {

#adver .center {

width: 60%

margin: -10px 0 0 -30%

}

#adver .search, #adver .button {

font-size: 20px

}

main .center h2 {

font-size: 35px

}

}

/*在480和767像素之间的屏幕里,超小屏幕,主要是手机*/

@media (min-width: 480px) and (max-width: 767px) {

header, header .center, header .link {

height: 45px

}

header .logo, .sm-hidden,.sidebar,.md-hidden {

display: none

}

header .link {

width: 100%

line-height: 45px

}

#adver {

padding: 45px 0 0 0

}

#adver .center {

width: 70%

height: 53px

margin: -10px 0 0 -35%

}

#adver .search, #adver .button {

height: 45px

font-size: 18px

}

.sm-visible {

display: block

}

main .center h2 {

font-size: 30px

}

main .center p {

font-size: 15px

}

main figure {

width: 49.2%

}

}

/*在小于480像素的屏幕,微小屏幕,更低分辨率的手机*/

@media (max-width: 479px) {

header, header .center, header .link {

height: 45px

}

header .logo, .xs-hidden, .sm-hidden, .sidebar, .md-hidden {

display: none

}

header .link {

width: 100%

line-height: 45px

}

header .link li {

width: 25%

}

#adver {

padding: 45px 0 0 0

}

#adver .center {

width: 80%

height: 48px

margin: -10px 0 0 -40%

}

#adver .search, #adver .button {

height: 40px

font-size: 16px

}

.sm-visible {

display: block

}

footer .bottom, footer .version {

font-size: 13px

}

main .center h2 {

font-size: 26px

}

main .center p {

font-size: 14px

}

main figure {

width: 99%

}

}

响应式布局的原理就是在不同的窗口大小下显示不同的结构和样式。只要掌握好CSS的样式,响应式布局就没问题。