Skip to content

Instantly share code, notes, and snippets.

@Elbone
Last active August 29, 2015 14:05
Show Gist options
  • Save Elbone/6c0913124c6864937724 to your computer and use it in GitHub Desktop.
Save Elbone/6c0913124c6864937724 to your computer and use it in GitHub Desktop.
Screen width MediaQueries in JS without a library
<!-- Adapted from http://seesparkbox.com/foundry/breakpoint_checking_in_javascript_with_css_user_values -->
<!doctype html>
<html>
<head>
<title>CSS Media Check</title>
<style type="text/css">
#mediaquery{
-webkit-transition: width .001s;
-moz-transition: width .001s;
-ms-transition: width .001s;
-o-transition: width .001s;
transition: width .001s;
}
#mediaquery:after {
content: "small";
display: none;
}
@media all and (min-width: 10px) {
#mediaquery {
width: 50px;
}
#mediaquery:after {
content: "small";
}
}
@media all and (min-width: 600px) {
#mediaquery{
width: 100px;
}
#mediaquery:after {
content: "medium";
}
}
@media all and (min-width: 800px) {
#mediaquery{
width: 200px;
}
#mediaquery:after {
content: "large";
}
}
</style>
</head>
<body>
<!-- query element -->
<div id="mediaquery"></div>
<script>
window.MQ = {};
window.MQ.element = document.getElementById("mediaquery");
window.MQ.currentSize = '';
// Generic event triggering
var trigger = function (type, element) {
var event;
if (document.createEvent) {
event = document.createEvent("HTMLEvents");
event.initEvent(type, true, true);
} else {
event = document.createEventObject();
event.eventType = type;
}
event.eventName = type;
if (document.createEvent) {
element.dispatchEvent(event);
} else {
element.fireEvent("on" + event.eventType, event);
}
}
var updateMQ = function () {
var size = window.getComputedStyle(window.MQ.element,":after").getPropertyValue("content");
window.MQ.currentSize = size;
trigger('MQ.'+size, window);
}
// Listen for MQ changes
window.addEventListener('MQ.small', function() {
console.log('MQ.small fired');
}, true);
window.addEventListener('MQ.medium', function() {
console.log('MQ.medium fired');
}, true);
window.addEventListener('MQ.large', function() {
console.log('MQ.large fired');
}, true);
// Check for all browsers
window.MQ.element.addEventListener('webkitTransitionEnd', updateMQ, true);
window.MQ.element.addEventListener('MSTransitionEnd', updateMQ, true);
window.MQ.element.addEventListener('oTransitionEnd', updateMQ, true);
window.MQ.element.addEventListener('transitionend', updateMQ, true);
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment