MediaQueryList

A MediaQueryList object stores information on a media query applied to a document, with support for both immediate and event-driven matching against the state of the document. You can create a MediaQueryList 通过调用 matchMedia() on the window object. The resulting object handles sending notifications to listeners when the media query state changes (i.e. when the media query test starts or stops evaluating to true ).

This is very useful for adaptive design, since this makes it possible to observe a document to detect when its media queries change, instead of polling the values periodically, and allows you to programmatically make changes to a document based on media query status.

特性

MediaQueryList interface inherits properties from its parent interface, EventTarget .

matches 只读
A Boolean that returns true document currently matches the media query list, or false if not.
media 只读
A DOMString representing a serialized media query.

方法

MediaQueryList interface inherits methods from its parent interface, EventTarget .

addListener()
Adds to the MediaQueryList a callback which is invoked whenever the media query status—whether or not the document matches the media queries in the list—changes. This method exists primarily for backward compatibility; if possible, you should instead use addEventListener() to watch for the change 事件。
removeListener()
Removes the specified listener callback from the callbacks to be invoked when the MediaQueryList changes media query status, which happens any time the document switches between matching and not matching the media queries listed in the MediaQueryList . This method has been kept for backward compatibility; if possible, you should generally use removeEventListener() to remove change notification callbacks (which should have previously been added using addEventListener() ).

Events

The following events are delivered to MediaQueryList 对象:

change
Sent to the MediaQueryList when the result of running the media query against the document changes. For example, if the media query is (min-width: 400px) change event is fired any time the width of the document's 视口 changes such that its width moves across the 400px boundary in either direction.
Also available using the onchange event handler property.

范例

This simple example creates a MediaQueryList and then sets up a listener to detect when the media query status changes, running a custom function when it does to change the appearence of the page.

var para = document.querySelector('p');
var mql = window.matchMedia('(max-width: 600px)');
function screenTest(e) {
  if (e.matches) {
    /* the viewport is 600 pixels wide or less */
    para.textContent = 'This is a narrow screen — less than 600px wide.';
    document.body.style.backgroundColor = 'red';
  } else {
    /* the viewport is more than than 600 pixels wide */
    para.textContent = 'This is a wide screen — more than 600px wide.';
    document.body.style.backgroundColor = 'blue';
  }
}
mql.addEventListener('change', screenTest);
					

注意 : You can find this example on GitHub (see the source code , and also see it running live ).

You can find other examples on the individual property and method pages.

规范

规范 状态 Comment
CSS Object Model (CSSOM) View Module
The definition of 'MediaQueryList' in that specification.
工作草案 初始定义

浏览器兼容性

更新 GitHub 上的兼容性数据
Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet
MediaQueryList Chrome 9 Edge 12 Firefox 6 IE 10 Opera 12.1 Safari 5.1
5.1
Prior to Safari 14, MediaQueryList is based on EventTarget , so you must use addListener() and removeListener() to observe media query lists.
WebView Android Yes Chrome Android 18 Firefox Android Yes Opera Android Yes Safari iOS 5
5
Prior to Safari 14, MediaQueryList is based on EventTarget , so you must use addListener() and removeListener() to observe media query lists.
Samsung Internet Android 1.0
EventListener objects as parameters Chrome 45 Edge ≤79 Firefox 55 IE No Opera No Safari ? WebView Android 45 Chrome Android 45 Firefox Android 55 Opera Android No Safari iOS ? Samsung Internet Android 5.0
MediaQueryList inherits EventTarget Chrome 45 Edge 16 Firefox 55 IE No Opera Yes Safari No WebView Android 45 Chrome Android 45 Firefox Android 55 Opera Android Yes Safari iOS No Samsung Internet Android 5.0
addListener() Chrome 9 Edge 12 Firefox 6 IE 10 Opera 12.1 Safari 5.1
5.1
Prior to Safari 14, MediaQueryList is based on EventTarget , so you must use addListener() and removeListener() to observe media query lists.
WebView Android Yes Chrome Android 18 Firefox Android Yes Opera Android Yes Safari iOS 5
5
Prior to Safari 14, MediaQueryList is based on EventTarget , so you must use addListener() and removeListener() to observe media query lists.
Samsung Internet Android 1.0
matches Chrome 9 Edge 12 Firefox 6 IE 10 Opera 12.1 Safari 5.1 WebView Android Yes Chrome Android 18 Firefox Android Yes Opera Android Yes Safari iOS 5 Samsung Internet Android 1.0
media Chrome 9 Edge 12 Firefox 6 IE 10 Opera 12.1 Safari 5.1 WebView Android Yes Chrome Android 18 Firefox Android Yes Opera Android Yes Safari iOS 5 Samsung Internet Android 1.0
onchange Chrome 45 Edge ≤79 Firefox 55 IE No Opera Yes Safari No WebView Android 45 Chrome Android 45 Firefox Android 55 Opera Android Yes Safari iOS No Samsung Internet Android 5.0
removeListener() Chrome 9 Edge 12 Firefox 6 IE 10 Opera 12.1 Safari 5.1
5.1
Prior to Safari 14, MediaQueryList is based on EventTarget , so you must use addListener() and removeListener() to observe media query lists.
WebView Android Yes Chrome Android 18 Firefox Android Yes Opera Android Yes Safari iOS 5
5
Prior to Safari 14, MediaQueryList is based on EventTarget , so you must use addListener() and removeListener() to observe media query lists.
Samsung Internet Android 1.0

图例

完整支持
完整支持
不支持
不支持
兼容性未知
兼容性未知
见实现注意事项。

另请参阅