为什么响应式设计需要媒体查询

日期:2016/8/5 / 人气:

没有?CSS3?的媒体查询模块,就不能针对设备特性(如视口宽度)设置特定的?CSS?样式。

如果你仔细研读?W3C?关于?CSS3?媒体查询模块的规范,就会看到媒体查询的官方解释:?HTML?4?和?CSS?2?目前支持为不同的媒体类型设定专有的样式表。

比如,一个页?面在屏幕上显示时使用无衬线字体,而在打印时则使用衬线字体。screen?和?print?是两种已定义的媒体类型。

媒体查询让样式表有更强的针对性,扩展了?媒体类型的功能。?媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成。媒体查询?中可用于检测的媒体特性有?width、height?和?color(等)。使用媒体查询,?可以在不改变页面内容的情况下,为特定的一些输出设备定制显示效果。

媒体查询语法

26?第?2章?媒体查询:支持不同的视口

还可以在?CSS样式表中使用媒体查询。例如,将下面的代码插入样式表,在屏幕宽度小于等于?400像素的设备上,h1?元素的文字颜色就会变成绿色。
@media?screen?and?(max-device-width:?400px)?{
h1?{?color:?green?}
}
还可以使用?CSS的@import?指令在当前样式表中按条件引入其他样式表。例如下面的代码会给视口最大宽度为?360像素的显示屏设备加载一个名为?phone.css?的样式表。
@import?url(“phone.css”)?screen?and?(max-width:360px);
切记,使用?CSS的@import?方式会增加?HTTP请求(这会影响加载速度)?,所以请谨慎使用该方法。

2.2?为什么响应式设计需要媒体查询?25

在现代浏览器(如果是?IE,至少要?IE9)中浏览该网页并不断调整浏览器窗口宽度。页面的背景颜色就会根据当前的视口尺寸而发生变化。为了清晰起见,我在这里使用了颜色名称,但实际上最好使用十六进制颜色值,如#ffffff。接下来,让我们继续分析媒体查询,学习如何对其进行充分利用。如果经常使用?CSS?2样式表,你就知道可以通过<link>标签的?media?属性为样式表指定设备类型(如显示屏或打印机)。具体说来,就是在?HTML页面的<head>标签中插入一
个如下面代码片段所示的?link?标签:
<link?rel=”stylesheet”?type=”text/css”?media=”screen”?href=”screen-styles.css”>
媒体查询则能使我们根据设备的各种功能特性来设定相应的样式,而不仅仅只针对设备类型。可以将媒体查询想象成对浏览器的提问。如果浏览器回答“是”?,则应用样式;如果回答是“否”?,则不应用样式。相对于在?CSS?2中能且只能问浏览器“你是一块显示屏吗?”,媒体查询能问的问题要多一点。例如,媒体查询可以问:“你是一块纵向放置的
显示屏吗?”我们看看对应的实际代码:
<link?rel=”stylesheet”?media=”screen?and?(orientation:?portrait)”?href=”portrait-screen.css”?/>
首先,媒体查询表达式询问了媒体类型(你是一块显示屏吗?),然后询问了媒体特性(显示屏是纵向放置的吗?)。任何纵向放置的显示屏设备都会加载?portrait-screen.css样式表,其他设备则会忽略该文件。在媒体查询的开头追加?not?则会颠倒该查询的逻辑。
例如,下面的代码就会颠倒前例中的效果,会使非纵向放置的显示屏设备加载样式文件:
<link?rel=”stylesheet”?media=”not?screen?and?(orientation:?portrait)”?href=”portrait-screen.css”?/>
也可以将多个表达式组合在一起。如,我们扩展一下前面的例子,限制只有视口宽度大于?800像素的显示屏设备才能加载文件。
<link?rel=”stylesheet”?media=”screen?and?(orientation:?portrait)?and?(min-width:800px)”?href=”800wide-portrait-screen.css”?/>
更进一步,还可以写一个媒体查询列表。查询列表中的任意一个查询为真,则加载文件。
全部查询都不为真,则不加载。例子如下:
<link?rel=”stylesheet”?media=”screen?and?(orientation:?portrait)?and?(min-width:
800px),?projection”?href=”800wide-portrait-screen.css”?/>
这里有两点需要注意。第一,媒体查询之间使用逗号分隔。第二,你会注意到在projection?之后,没有?and,也没有任何特性/值的组合。没有后续表达式,意味着只要是?projection?就满足条件。本例中,样式会应用于所有的投影仪。
和以前编写?CSS规则一样,基于媒体查询也可以按条件加载样式。在上面的例子中,我们在向页面的<head></head>标签中链接?CSS文件时使用了媒体查询。除此之外,我们
CSS媒体查询到底长什么样,更重要的是,它是怎么起作用的?
将下面这段代码插入到任意某个?CSS文件的最后,然后预览与之关联的网页:
body?{
background-color:?grey;
}
@media?screen?and?(max-width:?960px)?{
body?{
background-color:?red;
}
}
@media?screen?and?(max-width:?768px)?{
body?{
background-color:?orange;
}
}
@media?screen?and?(max-width:?550px)?{
body?{
background-color:?yellow;
}
}
@media?screen?and?(max-width:?320px)?{
body?{
background-color:?green;
}
}

作者: 云顶正版APP下载科技


Go To Top 回顶部