【发布时间】:2020-09-21 21:40:58
【问题描述】:
我注意到 css 媒体查询定义和 javascript window.matchMedia 媒体查询定义之间的区别:
css 规则最初应用于加载的页面。
javascript中定义的规则不会在页面加载后执行,而是在输入新条件后执行。
一个例子:
我有两个具有等效媒体查询定义的不同页面,第一个在 css 中定义,第二个在 javascript 中定义:
css 版本(在样式元素中定义):
@media (min-width: 401px) and (max-width: 600px) { body {background-color: red; } }
@media (min-width: 601px) and (max-width: 800px) { body {background-color: blue; } }
javascript 版本(全局定义或在正文加载后调用的函数中定义):
window.matchMedia("(min-width: 401px) and (max-width: 600px)")
.addListener(function(e) {
if (e.matches) {
document.body.style.background = "red";
}
});
window.matchMedia("(min-width: 601px) and (max-width: 800px)")
.addListener(function(e) {
if (e.matches) {
document.body.style.background = "blue";
}
});
当我加载一个页面并且窗口是 700 像素宽时
- css 版本页面为蓝色
- javascript 版本是白色的,只有在满足新条件后才会更改其状态,即窗口大小低于 601 像素。
如何强制匹配的 window.matchMedia 在页面加载时执行?
【问题讨论】:
-
我知道 window.onresize 和 body onload,我知道我可以使用它们来解决我的问题。但我认为这是没有必要的。我相信 window.matchMedia 的行为与 css 解决方案相同。我认为使用回调函数注册一次查询就足够了。