媒体查询可以看成是浏览器提供的获取⽤户系统参数和设置的接⼝。目前,媒体查询应用最多的就是响应式布局的开发。
prefers-color-scheme 深浅主题
@media (prefers-color-scheme: light) {
.article {
background:#fff;
color: #000;
}
}
@media (prefers-color-scheme: dark) {
.article {
background:#000;
color: white;
}
}
prefers-reduced-motion 动画减弱
prefers-reduction-motion 用于检测用户的系统是否被开启了动画减弱功能。
no-preference
用户未修改系统动画相关特性。
reduce
这个值意味着用户修改了系统设置,将动画效果最小化,最好所有的不必要的移动都能被移除。
@media (prefers-reduced-motion: reduce) {
html:focus-within {
scroll-behavior: auto;
}
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
any-hover 与 hover 设备是否⽀持悬停效果
@media (any-hover: hover) {
/* ⽀持悬停 */
}
@media (any-hover: none) {
/* 不⽀持悬停 */
}
@media (hover: hover) {
/* 主输⼊装置⽀持悬停 */
}
@media (hover: none) {
/* 主输⼊装置不⽀持悬停 */
}
any-pointer 与 pointer 设备是否可以精确点击
@media (any-pointer: none) {
/* 不⽀持点击 */
}
@media (any-pointer: coarse) {
/* ⾄少⼀个装置点击不精准 */
}
@media (any-pointer: fine) {
/* 有装置点击很精准 */
}
@media (pointer: none) {
/* 主输⼊装置点击不可⽤ */
}
@media (pointer: coarse) {
/* 主输⼊装置点击不精准 */
}
@media (pointer: fine) {
/* 主输⼊装置点击精准 */
}
在 HTML 和 JavaScript 中也可以使用媒体查询
可以单独把移动端的 CSS 单独提出来:
<link rel="stylesheet" href="default.css">
<link rel="stylesheet" href="mobile.css" media="(max-width: 480px)">
使用媒体查询控制图像资源的加载
<picture>
<source srcset="rect.png" media="(min-width: 480px)">
<img src="square.png">
</picture>
如果是在 JS 中,可以使用 matchMedia 这个 API 方法判断是不是匹配对应的媒体查询:
if (matchMedia('(max-width: 480px)').matches) {
// js here
}
注意,在 JS 应用中,如果参数是 CSS 声明(也就是出现了冒号),外面需要有个括号,否则语法不正确,也就是 matchMedia(‘max-width:480px’) 是无效的。