# useMatchMedia
`useMatchMedia` tracks if the window matches the given media query strings.
It adds three new behaviors to your Stimulus controller for each media query string you specify:
- `is[Name]` triggered when the media query string matches.
- `not[Name]` triggered when the media query string doesn't match.
- `[name]Changed` triggered when the media query changes.
## Reference
```javascript
useMatchMedia(controller, options)
```
**controller** : a Stimulus Controller (usually `'this'`)
**options** :
| Option| Description | Default value |
|-----------------------|-------------|---------------------|
| `mediaQueries` | An object of media queries where the key is the name of the query and the value is a media query string. **Make sure you wrap the whole query with parenthesis.** | `{}` |
| `eventPrefix` | Whether to prefix the emitted event. Can be a **boolean** or a **string**.
- **true** prefix the event with the controller identifier `users:is:small`
- **my-prefix** prefix the event with the given string `my-prefix:is:small`
- **false** to remove prefix `is:small` | `true` |
| `debug` | Whether to log debug information. See [debug](debug.md) for more information on the debugging tools | `false` |
| `dispatchEvent` | Whether to dispatch a event. | `true` |
## Usage
```js
import { Controller } from '@hotwired/stimulus'
import { useMatchMedia } from 'stimulus-use'
export default class extends Controller {
connect() {
useMatchMedia(this, {
mediaQueries: {
small: '(min-width: 320px) and (max-width: 769px)',
tall: '(min-height: 1000px)',
light: '(prefers-color-scheme: light)',
landscape: '(orientation: landscape)',
}
})
}
smallChanged({ name, media, matches, event }) {
console.log("small media query changed")
}
isSmall({ name, media, matches, event }) {
console.log("small media query matches")
}
notSmall({ name, media, matches, event }) {
console.log("small media query doesn't match")
}
// The same for
// tall => tallChanged() // isTall() // notTall()
// light => lightChanged() // isLight() // notLight()
// landscape => landscapeChanged() // isLandscape() // notLandscape()
}
```
## Events
When `dispatchEvent` is enabled (the default), this module dispatches three events for each media query you define, where `[name]` is the key of the media query (all prefixed by the controller identifier by default, e.g. `users:small:changed`):
- `[name]:changed` dispatched when the media query changes.
- `is:[name]` dispatched when the media query matches.
- `not:[name]` dispatched when the media query doesn't match.
Each event carries `event.detail = { name, media, matches, event }`.
See [events](events.md) for more information on the event prefix behavior.
```html