CSS3 Media Query 响应式媒体查询

在CSS中,有一个极其实用的功能:@media 响应式布局。具体来说,就是可以根据客户端的介质和屏幕大小,提供不同的样式表或者只展示样式表中的一部分。通过响应式布局,可以达到只使用单一文件提供多平台的兼容性,省去了诸如浏览器判断之类的代码。

当然这种设计也存在着缺点,比如我所见的不少使用响应式布局的设计在适配移动端时大量使用 display:none 隐藏富媒体元素,这样势必会导致大量不必要的流量。因此,如果有较为重要的移动端需求,那么还是开发专门的移动版页面为好。不过,对于诸如内容较少的页面或者单页式网站来说,响应式布局依然不失为一种偷懒的好方法 ^ ^

一、在 <head> 链接CSS文件时提供判断语句,选择性加载不同的CSS文件

<link rel="stylesheet" href="middle.css" media="screen and (min-width: 400px)">

这句意味在满足 media 的判断语句 screen and (min-width: 400px) 即 屏幕并且最小宽度不小于400px 的介质上面使用 middle.css 。

二、在CSS文件中分段书写不同设备的代码

/* CSS Code */
@media screen and (min-width: 600px) { /* CSS Code */ }
@media screen and (max-width: 599px) { /* CSS Code */ }

相信这个代码也很容易理解,写在 @media 语句段外的是共用代码,第一个 @media 语句段是 屏幕以及最小宽度600px ,第而个 @media 语句段是 屏幕以及最大宽度599px 。

如果不同的代码段有冲突或者重叠,会按照CSS原本的代码优先级排序,即后方代码替代前方代码,等等。

三、媒体介质类型

CSS3中提供了多种媒体介质类型,虽然常用的就俩……注意媒体类型名称区分大小写,并且尽管有些介质类型有重合,但是一个平台只会有一种介质类型。(我猜这个标准很多浏览器不会遵守吧?)

  1. all – 全部媒体类型
  2. braille – 盲文触摸装置
  3. embossed – 分页盲文打印机 (W3C的无障碍做的真细心……)
  4. handheld – 小屏幕和流量有限的手持设备(注意!安装标准来说移动设备都应该使用这个介质类型,但是实际上安卓根本不理会这个介质,请使用 screen 结合媒体查询语句使用)
  5. print – 提供给打印机的样式,最常用的介质类型,打印页面时获得适合阅读的效果
  6. projection – 投影,给投影机使用(有人用?)
  7. screen – 彩色屏幕,最常用的介质类型,一般和屏幕大小表达式联合使用
  8. speech – 语音朗诵,用于屏幕阅读软件(和将来的Siri?)
  9. tty – 固定间距字符网格,例如功能机那样的
  10. tv – 智能电视设备(唔不知道我家的创维酷开支持如何……)

四、媒体查询语句

除了媒体介质,我们还能通过 and 使用 Media Query 语句,达到对屏幕大小的判断生成响应式布局。(可以通过改变浏览器窗口大小在桌面下测试效果)

一个 Media Query 包含一种媒体类型,如果媒体类型没有指定,那么就是默认类型all,比如:

media="(max-width: 600px)"

也可以使用 and 表示同时满足这两者时生效,达到限定范围:

handheld and (min-width:20em) and (max-width:50em)

逗号 , 被用来表示 并列 和 或者 :

handheld and (max-width:20em), screen and (max-width:30em)

not 用来排除符合表达式的设备:

not screen and (color)

下面来解释一下遇到冲突时的机制:

<link rel="stylesheet" href="styleA.css" media="screen and (min-width: 800px)">
<link rel="stylesheet" href="styleB.css" media="screen and (min-width: 600px) and (max-width: 800px)">
<link rel="stylesheet" href="styleC.css" media="screen and (max-width: 600px)">

上面将设备分成3种,分别是宽度大于800px时,应用 styleA ,宽度在600px到800px之间时应用 styleB ,以及宽度小于600px时应用 styleC 。那假如宽度正好等于800px时该应用那个样式?是 styleB,因为前两条表达式都成立,按CSS默认优先级规则后者覆盖了前者。

因此,为了避免冲突,这个例子正常情况应该这样写:

<link rel="stylesheet" href="styleA.css" media="screen">
<link rel="stylesheet" href="styleB.css" media="screen and (max-width: 800px)">
<link rel="stylesheet" href="styleC.css" media="screen and (max-width: 600px)">

五、浏览器支持

媒体介质在CSS2中已经被添加,因此主流平台的浏览器毫无疑问都可以正确支持。但是 Media Query 语句是CSS3中添加的新功能,部分浏览器可能并不理解。例如IE能成功解读媒体介质,但是却无法解读 and 后面的媒体查询语句,就会连带媒体介质一起忽略。为了让不识别媒体查询语句的浏览器依然识别到媒体介质,可以使用 only 关键字进行hack。

<link rel="stylesheet"  href="example.css" media="only screen and (color)">

添加了 only 关键字后,支持媒体查询语句的浏览器依然正常解析。但不支持媒体查询语句但正确读取媒体介质的设备,由于先读取到 only 而不是 screen ,将忽略这个样式。不支持媒体查询的IE不论是否有 only ,都直接忽略样式。

最后是浏览器支持情况:

  • IE8-
  • IE9+
  • Chrome 5+
  • Opera 10+
  • Firefox 3.6+<
  • Safari 4+

媒体类型还支持 not和only关键字,它们可以用来更方便的定位某个媒体设备:

not:排除某种制定的媒体类型

@media not print and (color){
}

only:指定某种特定的媒体类型,可以用来排除不支持媒体查询的浏览器:

@media only screen and (color){
}
时间: 2024-10-08 14:05:44

CSS3 Media Query 响应式媒体查询的相关文章

【前端】响应式媒体查询

响应式媒体查询 媒体查询 从 CSS 版本 2 开始,就可以通过媒体类型在 CSS 中获得媒体支持.如果您曾经使用过打印样式表,那么您可能已经使用过媒体类型.清单 1 展示了一个示例. 清单 1. 使用媒体类型 <link rel="stylesheet" type="text/css" href="site.css" media="screen" /> <link rel="stylesheet&

一种让 IE6/7/8 支持 media query 响应式设计的方法

在不同的浏览器宽度下使用不同的 CSS 声明,常见的方案是使用 media query,但这个方案不支持 IE9 以下浏览器. 国外比较流行的 UI 框架 bootstrap v3 版本中使用 media query 技术实现了栅格布局 ,但要兼容 IE8 的话,( IE6/7 没有中国占比那么高,所以不用兼容)需要引入 Respond.js 的方案. 该方案的原理分以下 4 步: 1.在样式 link 之后,载入 respond.js ,该脚本会获取在他之前出现的 link 节点到一个数组 2

CSS3 - @media响应式 媒体查询(Media Querie)

随着pc.移动设备的屏幕规格增多.增大,当前,依据使用Media Query在不同的条件下使用不同的样式,使页面达到不同的渲染效果,可以有效的解决各种屏幕分辨率下的用户体验及移动web开发多种需求. Media Queries(媒体查询):作用就是允许添加表达式用以确定媒体的环境情况,以此来应用不同的样式表.换句话说,其允许我们在不改变内容的情况下,改变页面的布局以精确适配或响应各种不同分辨率的设备.(通过屏幕大小,使用不同css对页面进行重构或开发,让网页会根据屏幕宽度调整布局) 一.了解vi

pc端响应式-媒体查询

媒体查询(@media):能在不同的条件下使用不同的样式,使页面在不同在终端设备下达到不同的渲染效果 列举常用的pc屏幕宽度: 1024  1280  1366  1440  1680  1920  我们可在css样式中来写,也在不同屏幕下引入相应的样式. 1.css样式 假设我们在不同屏幕下要写基础字体的变化: @media screen and(min-width: 1024px){ body{font-size: 12px} } /*>=1024的设备屏幕*/ @media screen

网页响应式媒体查询代码

原生实现rem响应式 <!DOCTYPE html> <html style="font-size: 100px"> <head lang="en"> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1

响应式-媒体查询

@media screen and (min-width:1000px){            div{                color: black;            }        }         @media screen and (max-width:1000px)  and (min-width:768px) {            div {                color:red;            }        }        @me

响应式 媒体查询 盒模型

盒模型      border-box      content-box  border-sizing:有两个值    border-box(容器的实际大小是用户设置的)     content-box(容器实际的大小就是设置的 width,height)

响应式布局(二)—— CSS3 Media Query

响应式布局有三种实现方式: CSS3 Media Query 原生 JS 代码 第三方开源框架(最常见的有 bootstrap) CSS3 -- Media Query 1. 媒体查询实现方式 方式一:styleSheet样式表中的写法: 如:<style>标签中使用@media <style> @media screen and (min-width: 480px) { body{background: blue;} } </style> 方式二:<link&g

CSS3 Media Query实现响应式Web设计(针对不同移动设备宽度)

如今的屏幕分辨率,小至320px(iPhone),大到2560px甚至更高(大显示器),变化范围极大.除了使用传统的台式机,用户会越来越多的通过手机.上网本.iPad一类的平板设备来浏览页面.这种情况下,固定宽度的设计方案将会显得越发不合理.页面需要有更好的适应性,其布局结构要做到根据不同的设备及屏幕分辨率进行响应调整.接下来,我们将了解一下怎样通过HTML5和CSS3 Media Queries(媒介查询)相关技术来实现跨设备跨浏览器的响应式Web设计方案 范例效果预览 首先,我们来看看本篇范