学习 Media Query

Flying
2014-01-25 / 0 评论 / 126 阅读 / 正在检测是否收录...

最近做一个手机 Web 应用需要在各种平台的手机的不同分辨率下加载相应的图片。因为对图片要求较高,缩放会让图片变形模糊。最初想到的是用 Javascript 来获取手机屏幕大小,然后动态加载相应的 CSS 文件。这种办法是可行的,但不是最好的。最佳方案是使用今天将谈到的 Media Query。

css.svg

什么是 Media Query?

Media Query 是 CSS3 对 Media Type 的增强,事实上我们可以将 Media Query 看成是 Media Type + CSS 属性判断。

css 属性判断可以只是某个 CSS 属性的名称,也可以是属性 + 值:

如果设备支持 CSS 动画,那么就能执行这个外部样式表文件。

@media screen and (max-width:240px){
  body {
    font-size:medium;
  }
}

如果设备的浏览器的最大宽度是 240px,则页面将使用中号字体。注意属性和值之间是用冒号连接的,而不是等号,这与正常的 CSS 的写法一致。

媒体查询语句

我们可以将上述语句称为媒体查询语句,这样也更能理解一些。从上面的例子也可以看出,媒体查询语句一般由 Media Type 加一到多个 CSS 属性判断组成,而多个 CSS 属性判断可以用关键字 and 连接:

@media screen and (min-width:1024px) and (max-width:1280px) {
  body { 
    font-size:medium;
  }
}

其中 Media Type 可以省略,属性值也可以为空。当然,有属性值和没有属性值的情况代表的意义是不一样的,所以上面的这两条规则不是等价的。

而针对多个媒体类型的 CSS 规则,可以用逗号来隔开:

@media handheld and (min-width:360px),screen and (min-width:480px) {
  body {
    font-size:large;
  }
}
@media screen and (min-width:800px),print and (min-width:7in) {
  body {
    font-size:small;
  }
}

支持的属性

事实上,Media Query 支持的属性和我们常用的 CSS 属性是不太一样的,它们是一些特别定义的条目:

属性Min/Max描述
color整数yes每种色彩的字节数
color-index整数yes色彩表中的色彩数
device-aspect-ratio整数/整数yes宽高比例
device-heightlengthyes设备屏幕的输出高度
device-widthlengthyes设备屏幕的输出宽度
grid整数no是否是基于格栅的设备
heightlengthyes渲染界面的高度
monochrome整数yes单色帧缓冲器中每像素字节
resolution分辨率(“dpi/dpcm”)yes分辨率
scanProgressive interlacednotv 媒体类型的扫描方式
widthlengthyes渲染界面的宽度
orientationPortrait/landscapeno横屏或竖屏

浏览器支持

Media Query 毕竟属于 CSS3 的范畴,因此不是所有浏览器都支持。

  • IE 9 以下不支持
  • Firefox 3.5+(Gecko 1.9.1+)支持
  • Opera 9.5+完全支持
  • Opera mini 5 支持
  • webkit 支持大部分属性(safari 3.0 的内核版本是 522,iPhone 1 代的 safari 的内核版本是 524,webkit 大概从这个时候开始支持 media query,但是对部分属性比如 projection 支持不好)
  • iPhone OS 3.2 之前的版本不支持 orientation 属性,iPad 和 iPhone 4 支持该属性。
  • iPhone Safari 不支持 orientation(iPhone 4 支持)

其实,Media Query 与 Flex 手机应用中的 media 规则类似,只是用法有些差别。

5

评论 (0)

取消