media type(媒体类型)是css 2中的一个很是有用的属性,经过media type咱们能够对不一样的设备指定特定的样式,从而实现更丰富的界面。media query(媒体查询)是对media type的一种加强,是CSS 3的重要内容之一。随着移动互联网的发展,media query开始获得你们的重视。css
让咱们先了解一下media type,其实这个你们会比较熟悉一点,咱们一般会用到的media type会是all 和screen,而后是print,一些网站会专门经过print类型为页面的打印格式提供更友好的界面。
其实,media type有不少种:html
类型 | 解释 |
---|---|
all | 全部设备 |
braille | 盲文 |
embossed | 盲文打印 |
handheld | 手持设备 |
文档打印或打印预览模式 | |
projection | 项目演示,好比幻灯 |
screen | 彩色电脑屏幕 |
speech | 演讲 |
tty | 固定字母间距的网格的媒体,好比电传打字机 |
tv | 电视 |
咱们能够经过几种方法来声明media type:android
<link href="style.css" media="screen print" ...
<?xml-stylesheet media="screen" href="style.css"...
@import url("style.css") screen;
1 2 3 |
<style media="screen"> @import url("style.css");</style> |
1 2 3 |
@media screen{ selector{rules} } |
固然,这几种方法各有利弊,而咱们经常使用的是第一种和最后一种方法。web
正如前文所说,media query是CSS 3对media type的加强,事实上咱们能够将media query当作是media type+css属性判断。chrome
请注意,下面提到的一些关键字等内容,有些是在media type中就可用的,可是放到media query中将能更好的发挥其做用,因此我就在适当的地方引入。浏览器
css属性判断能够只是某个CSS属性的名称,也能够是属性+值:app
<link rel="stylesheet" media="screen and (animation)” herf=“…”
若是设备支持CSS动画,那么就能执行这个外部样式表文件。iphone
1 2 3 |
@media screen and (max-width:240px){ body{font-size:medium;} } |
若是设备的浏览器的最大宽度是240px,则页面将使用中号字体。工具
PS:属性和值之间是用冒号链接的,而不是等号,这与正常的CSS的写法一致。字体
咱们能够将上述语句称为媒体查询语句,这样也更能理解一些。从上面的例子也能够看出,媒体查询语句通常由media type+一到多个CSS属性判断组成,而多个CSS属性判断能够用关键字and链接:
1 2 3 |
@media screen and (min-width:1024px) and (max-width:1280px){ body{font-size:medium;} } |
其中media type能够省略,属性值也能够为空:
@media (color:4){}
@media (color){}
固然,请注意,有属性值和没有属性值的状况表明的意义是不同的,因此上面的这两条规则不是等价的。
而针对多个媒体类型的CSS规则,能够用逗号来隔开:
1 2 3 |
@media handheld and (min-width:360px),screen and (min-width:480px){ body{font-size:large;} } |
1 2 3 |
@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-height | length | yes | 设备屏幕的输出高度 |
device-width | length | yes | 设备屏幕的输出宽度 |
grid | 整数 | no | 是不是基于格栅的设备 |
height | length | yes | 渲染界面的高度 |
monochrome | 整数 | yes | 单色帧缓冲器中每像素字节 |
resolution | 分辨率(“dpi/dpcm”) | yes | 分辨率 |
scan | Progressive interlaced | no | tv媒体类型的扫描方式 |
width | length | yes | 渲染界面的宽度 |
orientation | Portrait/landscape | no | 横屏或竖屏 |
从这些属性中咱们能够看出,media query就是为了更好的适配各类设备而生的。
webkit是最先实现media query支持的浏览器内核之一,同时它也根据本身的须要搞了一些特有的扩展属性,最经常使用的有:
transform-2d | 只用于支持使用 -webkit-transform实现2D变换的浏览器 |
transform-3d | 只用于支持使用 -webkit-transform实现3D变换的浏览器 |
transition | 只用于支持使用-webkit-transition实现变换效果的浏览器 |
animation | 只用于支持使用-webkit-animation实现动画的浏览器 |
详情请看这里:http://webkit.org/specs/MediaQueriesExtensions.html
firefox也提供一些本身的扩展,不过因为firefox浏览器的手机版如今还很弱,因此不多会用到,感兴趣的同窗能够到https://developer.mozilla.org/En/CSS/Media_queries查阅。
细心的同窗可能已经注意到前面用到的这两个关键词,他们是要配合支持它们的属性使用的,它们的意义与咱们经常使用的max-width和minwidth等相似。
各属性对max和min的支持在前面的属性列表中有给出,这里是一个详细的列表:
height | min-height | max-height |
device-width | min-device-width | max-device-width |
device-height | min-device-height | max-device-height |
aspect-ratio | min-aspect-ratio | max-aspect-ratio |
device-aspect-ratio | min-device-aspect-ratio | max-device-aspect-ratio |
color | min-color | max-color |
color-index | min-color-index | max-color-index |
Monochrome | min-monochrome | max-monochrome |
Resolution | min-resolution | max-resolution |
媒体类型还支持 not和only关键字,它们能够用来更方便的定位某个媒体设备:
not:排除某种制定的媒体类型
@media not print and (color){ }
only:指定某种特定的媒体类型,能够用来排除不支持媒体查询的浏览器:
@media only screen and (color){ }
如今让咱们来看一些典型的例子:
<link media="only screen and (max-device-width: 480px)" href="style.css">
这是apple官方网站推荐的一种定位iPhone safari浏览器的方法,在iPhone一代和2代的时代,这条规则的确可以正确的判断出iPhone的浏览器,可是后来出现了Android的大屏幕手机,好比Nexus One和HTC desire,这条规则也能适配这些480px宽度的机器。
Google以前经过如下方式为iPhone手机提供横屏样式(由于最先的3代iPhone手机不支持orientation属性):
1 2 3 4 5 6 |
@media screen and (max-height:300px){ #linksDiv{ margin-top:10px; } ...} |
android系统的开放性致使其终端的多样性,那么对于各类各样的android手机来讲,屏幕分辨率的差别致使针对android手机的页面重构复杂性增长,那么咱们能够用media query为每种分辨率提供特定样式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* for 240 px width screen */ @media only screen and (max-device-width:240px){ selector{ } } /* for 360px width screen */ @media only screen and (min-device-width:241px) and (max-device-width:360px){ selector{ } } /* for 480 px width screen */ @media only screen (min-device-width:361px)and (max-device-width:480px){ selector{ } } |
device-aspect-ratio能够用来适配特定屏幕长宽比的设备,这也是一个颇有用的属性,好比,咱们的页面想要对长宽比为4:3的普通屏幕定义一种样式,而后对于16:9和16:10的宽屏,定义另外一种样式,好比自适应宽度和固定宽度:
1 2 3 4 5 6 7 8 9 10 11 |
/* for 4:3 screen */ @media only screen and (device-aspect-ratio:4/3){ selector{ } } /* for 16:9 and 16:10 screen */ @media only screen and (device-aspect-ratio:16/9) and (device-aspect-ratio:16/10){ selector{ } } |
固然,对于手机也可使用这个属性,好比对于480px*800px的Nexus One和Desire等手机,能够用下面的样式来匹配:
1 2 3 4 5 |
/* for 480px*800px width screen */ @media only screen (device-aspect-ratio:5/3){ selector{ } } |
O’Reilly为其网站制做了针对iPad和iPhone设备的不一样版本,从而提供最适合相关设备阅读的界面,他们的作法就是使用media query:
1 2 3 4 |
<link rel="stylesheet" media="all and (max-device-width: 480px)" href="iphone.css"> <link rel="stylesheet" media="all and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:portrait)" href="ipad-portrait.css"> <link rel="stylesheet" media="all and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:landscape)" href="ipad-landscape.css"> <link rel="stylesheet" media="all and (min-device-width: 1025px)" href="ipad-landscape.css"> |
详细介绍能够查看这里:http://broadcast.oreilly.com/2010/04/using-css-media-queries-ipad.html
CSS 3的media query是一个很强大也很好用的工具,它为咱们在不一样的设备和环境下实现丰富的界面提供了一种快捷方法,虽然如今各个浏览器对它的支持还有些差别,可是你们都在改进,IE 9已经开始支持media query了。不过目前media query的最大舞台是在高端手持设备,相信随着移动互联网的快速发展,media query也会很好发挥本身的做用。