Media Query
媒体查询(Media Query)在 CSS2 中就已经存在了,但是只能查询 Media Type,CSS3 中除了能查询 Media Type 外,还加入了 Media Feature 的查询。
语法
媒体查询包含一个“媒体类型(Media Type)”以及至少一个测试“媒体特性(Media Feature)”的表达式,表达式和媒体类型将根据实际情况计算的到 true 或者 false。如果指定的媒体类型符合当前设备并且媒体特性表达式都为真,那当前媒体查询为真,Media Query 为 true,对应的样式规则生效。
1 | @media [媒体类型] 媒体特性 {} |
除非使用了 not
或 only
操作符,否则 Media Type 是可选的,默认值为 all
逻辑运算符
类型 | 说明 |
---|---|
and | 逻辑与,用于连接 Media Type、Media Feature 用于结合多个媒体特性或媒体类型 |
, | 设备列表 |
not | 排除某种设备 |
only | 限定某种设备类型 |
and
用于结合多个媒体特性或媒体类型到一个 Media Query。
1 | /* Media Type 为 all 时 Media Feature 为 min-width 700 */ |
,
用于结合多个 Media Query ,任 一Media Query 为 true 时应用样式,相当于逻辑运算符中的 or。
1 | /* 宽度大于 700px,或者宽度大于高度的显示器上 */ |
not
用于对整个 Media Query 结果取反,必须位于一个 Media Query 的开头。另外,在逗号分隔的多个 Media Query 中,not 只对它作用的 Media Query 生效。not 不能对单个 Media Feature 取反,只能作用于整个 Media Query。
1 | /* not 将在最后求值 */ |
only
用于向早期浏览器隐藏媒体查询,only
必须位于 Media Query 的开头。
1 | @media only screen and (min-width:400px) and (max-width:600px) {} |
无法识别媒体查询的浏览器要求获得逗号分割的媒体类型列表,规范要求:它们应该在第一个不是连字符的非数字、字母之前截断每个值。所以上面的示例解释为:
1 | @media only {} |
因为没有 only
这样的媒体类型,所以样式表被忽略。如果不加 only,下面的示例会被解析为 @media screen {}
这样一来即使浏览器不知道 Media Query 的真正含义,样式也会应用于所有屏幕设备。
尽管存在此行为,如果希望向其他不太常用的浏览器隐藏样式,任然建议在媒体查询前面添加 only。
1 | @media screen and (min-width:400px) and (max-width:600px) {} |
媒体类型(Media Type)
类型 | 说明 |
---|---|
all | 所有设备 |
文档打印或打印预览模式 | |
screen | 彩色电脑屏幕 |
speech | 阅读器 |
注意:在 CSS2.1 和 CSS3 Media Query 中定义的 Media Type:tty、tv、projection、handheld、braille、embossed、aural,在media queries level 4 中都废弃了,不推荐使用。
媒体特性(Media Feature)
媒体特性 | 说明 |
---|---|
width | viewport width |
height | viewport height |
device-width 、 device-height | 设备的宽度、高度 |
aspect-ratio | viewport 的宽高比如:16/9 |
device-aspect-ratio | 设备宽高比 |
orientation | 宽度和高度的大小关系。landscape(横屏)、portrait(竖屏) |
resolution | 设备的分辨率 |
上面是一些常见的 Media Feature,不是全部,Media Feature 的维度很多,但是最常用的是 viewport 的 width 和 height。
使用方式
在 CSS2 中,媒体查询只使用于 <style>
和 <link>
标签中,以 media 属性来查询,CSS3 中可以用 @media 来查询。
1 | <link href="css/reset.css" rel="stylesheet" type="text/css" media="screen"> |
1 | <style type="text/css" media="screen"> |
1 | @import url("css/reset.css") screen; |
1 | @media screen { |
Media Query 常用方法
- 排他(exclusive)
为确保在某一个条件下只有一个样式表生效,将查询条件严格划分。
1 | @media (max-width: 400px) { |
- 覆盖(overriding)
可以对元素设置相同优先级,使用样式顺序,通过覆盖,避免排他。
1 | @media (min-width: 400px) { |
- 移动优先(Mobile first)
默认样式假设为移动设备宽度,然后通过 min-width 控制扩展样式。
1 | html { |
BootStrap 移动优先,断点分别为 768、992、1200,这三个断点的区间对应手机、平板、桌面、大桌面。
- PC 优先(desktop first)
默认以宽屏进行样式设置,通过 max-width 控制样式覆盖。
1 | html { |