媒体查询可以看成是浏览器提供的获取⽤户系统参数和设置的接⼝。目前,媒体查询应用最多的就是响应式布局的开发。
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’) 是无效的。
