Javascript Media Queries

Javascript media queries used to be a pain in the butt. I won’t go in to why because thanks to window.matchMedia it’s now very easy.

window.matchmedia has a matches property which returns a boolean value, so to run it once just use it something like and if statement:

1
2
3
4
5
if(window.matchMedia("(min-width: 500px)").matches) {
  /* the viewport is at least 500 pixels wide */
} else {
  /* the viewport is less than 500 pixels wide */
}

It’s also possible to add a listener to call a function to run some code whenever the query return value changes:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
if(matchMedia){ // Only run if matchMedia is supported
  const media_query = window.matchMedia("(max-width : 500px)"); // Create media query
  media_query.addListener(widthChange); // Optional listener with function to run
  widthChange(media_query); // Initial run
}

function widthChange(media_query){
  if(media_query.matches){ // If the media query resolves true
    // window width is under 500px wide
    console.log('Under');
  } else {
    // window width is more than 500px wide
    console.log('Over');
  }
}