Device and Viewport Size In JavaScript

viewport

How to get the viewport size: jQuery's $(window).width() is highly regarded as cross-broswer compatible. JavaScript's document.documentElement.clientWidth is faster and is also cross-broswer compatible. Consider using document.documentElement.clientWidth — if you look in the jQuery source that's what they're using. The tables below compare these live against the less consistent inner/outer methods:

width methodslive output
$(window).width() undefined
document.documentElement.clientWidthundefined
window.innerWidth nichtundefined
window.outerWidth nichtundefined
@media breakpoint
correctedViewportW()
height methodslive output
$(window).height() undefined
document.documentElement.clientHeightundefined
window.innerHeight nichtundefined
window.outerHeight nichtundefined
@media breakpoint
correctedViewportH()

device

How to get the device size: It's simple. Use window.screen.width for device width and window.screen.height for device height. The .availWidth/.availHeight methods give you the device size minus UI taskbars (try on an iPhone) and are slower outside of Webkit. Device size is static and does not change when the page is resized or rotated.

width methodslive output
window.screen.widthundefined
window.screen.availWidth nichtundefined
@media breakpoint
height methodslive output
window.screen.heightundefined
window.screen.availHeight nichtundefined
@media breakpoint

document

For further comparison, here are document size methods (not usually needed for responsive design but useful in other regards such as scrolling apps). Note the difference between $(document).width() and some of the others (especially when the window is wider than the max-width of the body). jQuery uses the Math.max of 5 numbers to calculate this: the last 4 in these blocks and the docElem's clientWidth / clientHeight. For decent cross-browser support I think the Math.max of the last 3 in these blocks is sufficient rather than the 5 jQuery uses.

width methodslive output
$(document).width()undefined
document.body.clientWidth nichtundefined
document.body.offsetWidthundefined
document.body.scrollWidthundefined
document.documentElement.clientWidthundefined
document.documentElement.offsetWidthundefined
document.documentElement.scrollWidthundefined
height methodslive output
$(document).height() undefined
document.body.clientHeight nichtundefined
document.body.offsetHeightundefined
document.body.scrollHeightundefined
document.documentElement.clientHeightundefined
document.documentElement.offsetHeightundefined
document.documentElement.scrollHeightundefined