media query(媒体查询)和media type(媒体类型)
media type(媒体类型)是css 2中的一个非常有用的属性,通过media type我们可以对不同的设备指定特定的样式,从而实现更丰富的界面。media query(媒体查询)是对media type的一种增强,是CSS 3的重要内容之一。随着移动互联网的发展,media query开始得到大家的重视。
media type
让我们先了解一下media type,其实这个大家会比较熟悉一点,我们通常会用到的media type会是all 和screen,然后是print,一些网站会专门通过print类型为页面的打印格式提供更友好的界面。
其实,media type有很多种:
| 类型 | 解释 |
|---|---|
| all | 所有设备 |
| braille | 盲文 |
| embossed | 盲文打印 |
| handheld | 手持设备 |
| 文档打印或打印预览模式 | |
| projection | 项目演示,比如幻灯 |
| screen | 彩色电脑屏幕 |
| speech | 演讲 |
| tty | 固定字母间距的网格的媒体,比如电传打字机 |
| tv | 电视 |
media type的几种使用方法
我们可以通过几种方法来声明media type:
方法一
<link href="style.css" media="screen print" ...
方法二
<?xml-stylesheet media="screen" href="style.css"...
方法三
@import url("style.css") screen;
方法四
1 |
<style media="screen"> |
方法五
1 |
@media screen{
|
当然,这几种方法各有利弊,而我们常用的是第一种和最后一种方法。
media type的浏览器支持
- IE5.5/6/7不支持在@import中使用媒体类型
- Safari/firefox只支持all,screen,print三种类型(包括iphone)
- Opera 完全支持
- Opera mini 支持handheld,未指定则使用screen
- Windows Mobile系统中的IE支持handheld,其它支持不明…
media query
正如前文所说,media query是CSS 3对media type的增强,事实上我们可以将media query看成是media type+css属性判断。
请注意,下面提到的一些关键字等内容,有些是在media type中就可用的,但是放到media query中将能更好的发挥其作用,所以我就在适当的地方引入。
css属性判断可以只是某个CSS属性的名称,也可以是属性+值:
<link rel="stylesheet" media="screen and (animation)” herf=“…”
如果设备支持CSS动画,那么就能执行这个外部样式表文件。
1 |
@media screen and (max-width:240px){
|
如果设备的浏览器的最大宽度是240px,则页面将使用中号字体。
PS:属性和值之间是用冒号连接的,而不是等号,这与正常的CSS的写法一致。
媒体查询语句结构
我们可以将上述语句称为媒体查询语句,这样也更能理解一些。从上面的例子也可以看出,媒体查询语句一般由media type+一到多个CSS属性判断组成,而多个CSS属性判断可以用关键字and连接:
1 |
@media screen and (min-width:1024px) and (max-width:1280px){
|
其中media type可以省略,属性值也可以为空:
@media (color:4){}
@media (color){}
当然,请注意,有属性值和没有属性值的情况代表的意义是不一样的,所以上面的这两条规则不是等价的。
而针对多个媒体类型的CSS规则,可以用逗号来隔开:
1 |
@media handheld and (min-width:360px),screen and (min-width:480px){
|
1 |
@media screen and (min-width:800px),print and (min-width:7in){
|
media query支持的属性
事实上,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
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也提供一些自己的扩展,不过由于firefox浏览器的手机版现在还很弱,所以很少会用到,感兴趣的同学可以到https://developer.mozilla.org/En/CSS/Media_queries查阅。
max与min
细心的同学可能已经注意到前面用到的这两个关键词,他们是要配合支持它们的属性使用的,它们的意义与我们常用的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和only关键字,它们可以用来更方便的定位某个媒体设备:
not:排除某种制定的媒体类型
@media not print and (color){
}
only:指定某种特定的媒体类型,可以用来排除不支持媒体查询的浏览器:
@media only screen and (color){
}
media query的浏览器支持:
- 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支持)
实例:
现在让我们来看一些典型的例子:
检测iPhone safari:
<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横屏样式:
Google之前通过以下方式为iPhone手机提供横屏样式(因为最早的3代iPhone手机不支持orientation属性):
1 |
@media screen and (max-height:300px){
|
android手机的多分辨率问题:
android系统的开放性导致其终端的多样性,那么对于各种各样的android手机来说,屏幕分辨率的差异导致针对android手机的页面重构复杂性增加,那么我们可以用media query为每种分辨率提供特定样式:
1 |
/* for 240 px width screen */ |
device-aspect-ratio
device-aspect-ratio可以用来适配特定屏幕长宽比的设备,这也是一个很有用的属性,比如,我们的页面想要对长宽比为4:3的普通屏幕定义一种样式,然后对于16:9和16:10的宽屏,定义另一种样式,比如自适应宽度和固定宽度:
1 |
/* for 4:3 screen */ |
当然,对于手机也可以使用这个属性,比如对于480px*800px的Nexus One和Desire等手机,可以用下面的样式来匹配:
1 |
/* for 480px*800px width screen */ |
O’Reilly区分iPhone和iPad的方法
O’Reilly为其网站制作了针对iPad和iPhone设备的不同版本,从而提供最适合相关设备阅读的界面,他们的做法就是使用media query:
1 |
<link rel="stylesheet" media="all and (max-device-width: 480px)" href="iphone.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也会很好发挥自己的作用。
media query(媒体查询)和media type(媒体类型)的更多相关文章
- 媒体查询漫谈——@media Queries
通过不同的媒体类型和条件定义样式表规则.媒体查询让CSS可以更精确作用于不同的媒体类型和同一媒体的不同条件.媒体查询的大部分媒体特性都接受min和max用于表达”大于或等于”和”小与或等于”.如:wi ...
- 移动设备上的媒体查询 CSS media queries for mobile device
CSS的媒体查询虽然在传统的互联网页面可能发挥的余地不是很大,但是自从苹果和安卓的风靡之后,移动平台上的web开发变得越来越流行了,同时CSS的媒体查询可谓派上了大用场了. 以下为翻译内容,原文来自这 ...
- 关于响应式、媒体查询和media的关系 、流媒体布局flex 和em rem像素的使用 我有一些废话要讲.....
一.什么是响应式 随着移动端越来遇火 网站的布局成为一个热议的话题 有的人喜欢用手机浏览网站.有的人喜欢用paid浏览网站.有人喜欢用电脑浏览网站 那么问题来了 我们怎么样才能使用一套css样式 完成 ...
- CSS3媒体查询(Media Queries)
媒体类型: all 所有设备 screen 电脑显示器 handheld 便携设备 tv 电视类型设备 print 打印用纸打印预览视图 关键字 and not(排除某种设备) only(限定某种设备 ...
- 解决ie9以下下不支持html5和媒体查询(Media Queries)
ie9以下不支持媒体查询和html5,可以使用补丁完美兼容 1.html5shiv ie6~8不识别html5的新元素,可以通过使用html5shiv来解决 <!--[if lt IE 9]&g ...
- chrome 26.0.XXX版本下media query流媒体查询有问题的bug
这段代码什么意思: @media only screen and (max-width: 1360px) 当用户的界面小于等于1360px的时候, 会加载该流媒体样式(此时的界面是包含滚动条的): ...
- 媒体查询(media):设置PC端网页居中显示
@media screen and (min-width: 768px){ body{ background-color: #EAEAEA; } #fater{ width: 640px; margi ...
- CSS3 之媒体查询Media Query
Media Queries是CSS3有关媒体查询的属性,有了CSS3 之媒体查询Media Queries就可以进行媒体查询,针对每个不同的媒体进行不同的样式编写.传说中的Web响应式布局就可以毫无压 ...
- 媒体查询使用方法@media
Media Queries能在不同的条件下使用不同的样式,使页面在不同在终端设备下达到不同的渲染效果.前面简单的介绍了Media Queries如何引用到项目中,但Media Queries有其自己的 ...
随机推荐
- .net 基础服务开源战略规划备忘录
公司现状 1. 技术人员水平限制: 基础研发人员技术细节,性能处理能力不足,技术视野不够开阔;甚至一些高可用,高性能方案的概念都未听闻,更别提发展方向和思路了,令人痛心. 2. 技术反馈渠道限制: 公 ...
- C# 类型和变量
C# 中的类型有两种:值类型 (value type) 和引用类型 (reference type).值类型的变量直接包含它们的数据,而引用类型的变量存储对它们的数据的引用,后者称为对象.对于引用类型 ...
- 一个想法(续六):IT联盟创业计划:如何进行找钱、寻人、做事?
前言: 不知时间过的快,或是慢,一周过去了,在这一周,基本是围绕着创业这事在折腾. 也在看一些和创业相关的文章,不小心就看到了dudu在2007年呼喊创业的口号. 于是把他那一年的博文都给看了: 看着 ...
- devexpress实现单元格根据条件显示不同的样式(颜色、字体、对齐方式,大小等)
1.devexpress控件库之所以被大家所喜爱,是因为它将许多常用的东西都封装成了属性.可以通过一些简单的配置,将以前某些需要大篇幅代码才可实现的效果展示出来.这里是一个实现了将[第二列数据在表格0 ...
- [Linux] PHP程序员玩转Linux系列-备份还原MySQL
1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 前几天有个新闻,说是g ...
- 【前端】:jQuery下
前言: 接上一篇博客: [前端]:jQuery上 一.jQuery属性操作 ① attr(设置或返回自定义属性值) input.select.textarea框中的内容, 可以通过attr来获取,但是 ...
- 【转】jqGrid学习之介绍
JQGrid JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做什么事情. ...
- 每天一个Linux命令(14)--head命令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然的就是查看档案的结尾啦. 1.命令格式: h ...
- Tesseract pytesseract的安装和使用
Tesseract是开源的OCR引擎,可以识别的图片里的文字,支持unicode(UTF-8)编码,100多种语言,需要下载相应语言的训练数据. 安装: 有两种方法,一种是通过编译源码,比较麻烦.我使 ...
- Spring框架---IOC装配Bean
IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...