媒体查询(Media Queries)早在在css2时代就存在,通过css3的洗礼后变得更增强大bootstrap的响应式特性就是今后而来的.css
简单的来说媒体查询是一种用于修饰css什么时候起做用的语法.html
Media Queries 的引入,其做用就是容许添加表达式用以肯定媒体的环境状况,以此来应用不一样的样式表。换句话说,其容许咱们在不改变内容的状况下,改变页面的布局以精确适应不一样的设备。(1)
既然媒体查询是用于控制样式的,而样式的使用无外乎以下几种规则:css3
link
引入style
标签style
属性@import
引入而显式的使用媒体查询声明样式咱们有以下三种方法:chrome
link
引入时使用media
属性style
标签时添加media
属性咱们先来看看link
的使用方式:编程
link标签使用媒体查询后基本的样子以下(1):bootstrap
<link rel="stylesheet" type="text/css" href="swordair.css" media="screen and (min-width: 400px)">
一旦使用了媒体查询修饰link标签后,就意味着符合媒体查询后这个样式就会被启用,一样的规则适用于style标签.浏览器
那么对于上面的那一句media="screen and (min-width: 400px)"
就能够解释为:
当屏幕的宽度大于等于400px的时候应用这条样式规则.app
上面的例子中咱们能够看到多出了一个media
属性,而media
中内容就是媒体查询的语法,能够被以下解释:ide
一个媒体查询由一个可选的媒体类型和零个或多个使用媒体功能的限制了样式表范围的表达式组成,例如宽度、高度和颜色。媒体查询,添加自CSS3,容许内容的呈现针对一个特定范围的输出设备而进行裁剪,而没必要改变内容自己。(2)
看起来很复杂,可是实际上一个媒体查询的声明就分为如下三个部分:wordpress
那么使用上方的例子来讲media="screen and (min-width: 400px)"
中screen
就是媒体类型,
然后面的and
被称做逻辑操做符,(min-width: 400px)
则被称做媒体特性.
上文说道媒体查询在css2中就已经有了,因此有不少媒体类型是在css2时代提出的,其中就只有screen
和all
被普遍的使用,有不少都被删除掉了.
常使用的媒体类型css2制定
不常使用的媒体类型
css2.1被废弃掉的媒体类型(3)
名称 | 特性 |
---|---|
width | 可视宽度 |
height | 可视高度 |
媒体特性一览:
https://developer.mozilla.org...
你们能够运行一下这个例子来感觉一下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> html,body{ height: 100%; } body{ background-color: aqua; } </style> <style media="screen and (min-width: 400px)"> body{ background-color: #000; } </style> <title>test</title> </head> <body> </body> </html>
在这个例子中屏幕宽度大于400像素的时候body
的背景颜色是黑色,可是一旦低于400像素后就成为了青绿色.
一个媒体查询声明中能够由多个媒体查询组成(使用逗号分割),一个单独的规则是由以下的格式组成的:
类型 | 数量 | 默认值 |
---|---|---|
媒体类型 | 0 / 1 | all |
媒体特性 | n(n!=0) | |
逻辑操做符 | n-1 |
也就是说一个媒体查询中能够存在多条规则,对于一个规则须要一个媒体类型(默认all)和n个媒体特性(可选),他们之间的链接使用逻辑操做符来链接.
当不填写媒体类型对应的默认规则:
上面的例子的媒体查询有以下内容screen and (width: 400px)
若是你看过媒体特性一览表就会发现min-
这个内容是没有提到的.
大部分媒体特性都是有前缀的,媒体特性前缀主要用于约束媒体特性的做用范围.
所谓的逻辑操做符说白了就是编程中的逻辑操做符,用于链接多个媒体特性表达式.
显示的逻辑操做符一共有两个:
注意:默认使用逗号分割的多个媒体查询就是or的写法,也就是说逗号就至关于or操做符
特殊的有一个:
实际使用中然并卵的功能
例子1:
screen and (min-width: 400px)
宽度大于400像素的设备使用这个样式.
例子2:
(min-width: 700px) and (orientation: landscape)
宽度大于700像素且屏幕为横屏的时候使用这个样式.
例子3:
handheld and (max-width:20em), screen and (max-width:30em)
表示此CSS被应用于宽度小于20em的手持,或者宽度小于30em的屏幕.
所谓的条件规则组就是值媒体的声明不在link
标签和style
标签上,而是在css代码中,利用条件规则组咱们能够将一块css代码在符合媒体查询的时候应用.
使用方式(BootStrap中的样式代码)
@media (min-width:768px) { .lead { font-size: 21px } }
在这个例子中:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css" media="screen and (min-width: 400px)"> html,body{ height: 100%; } body{ background-color: aqua; } @media screen and (min-width: 400px){ body{ background-color: #000; } } </style> <title>test</title> </head> <body> </body> </html>
在style
标签上声明的属性和在内部的条件规则组
媒体查询设计的一致,可是内部的条件规则组
覆盖掉了外部style
上的媒体查询.
能够看到他们实际上它们之间没有优先级,只有前后执行的顺序,后执行的规则会覆盖掉前面的规则.
(1)
http://www.swordair.com/blog/...
(2)
https://developer.mozilla.org...
(3)
https://developer.mozilla.org...
更多的详细的例子:
http://www.cnblogs.com/lguow/...
使用媒体查询注意的常见错误:
https://blog.csdn.net/qq_3755...
电脑分辨率对应的媒体查询:
https://blog.csdn.net/happyde...
在写例子的时候我使用到了两个浏览器最新的firefox和最新的chrome,有趣的事情是两者在style
标签上使用media
属性表现不一样.
firefox中不写<meta name="viewport" content="width=device-width, initial-scale=1" />
也是正常运行,可是chrome就不能够.