CSS for Mobile Devices - Media Query Essentials
By: System Admin 02/13/2015

In the modern age of web design, understanding media queries is essential if you want the website to be functional on multiple devices platforms. Media queries allow you to conditionally apply CSS selectors based upon the view port, screen size and resolution. Implementation Theory - Smallest to Largest The most common implementation theory for responsive website design is the mobile first approach. The concept is you start with the smallest screen and build your core CSS file for those dimensions. Then, for each subsequently larger screen size, you add media queries and additional CSS selectors. Applying selectors from the smallest to largest screen size allow you to minimize the bandwidth requirements for the smartphones by including only small, low-resolution images while allowing for large, high-resolution images to be included on larger screens. Media Query Syntax Media queries are implemented using the @media css selector followed by the constraints. The CSS selectors to be applied to the media query are grouped within curly brackets, just like any other CSS selector. @media (max-width:461px) and screen {   body { background-color:red; } } This would change the background of the body element to red for screen sizes smaller than 461px. If all of the conditions are true then the media query results to true and the content is applied to the page. Individual constraints can be coupled together with the AND keyword to require multiple constraints to be true. Multiple sets of constraints can be coupled together using a comma separated list (just like multiple CSS selectors) to apply a logical OR situation. Unless otherwise specified, the "all" media type is added to all media query sets, which means an empty set is the same as having no media query wrapper and the selectors are applied in all situations. Constructing Media Queries Media query constraints use some of the CSS properties and add a few more to be applicable on the device level. Note, constraints do not always need a value to be applied. Viewport The view port is the box in which the page is constructed. This is not always the same as the device width or the browser width. Users can set automatic zoom features which change the ratio between the browser width and the viewport, causing web developers headaches. You can set a scaling ratio for the viewport using the media tag in the html head section. Constraints Constraint Value* Effect all - Apply to all media types. This is the default behavior of any media query, so it is only needed when using complex constraints. screen - Apply to only screen media types print - Apply to only print media types. This is useful for creating a custom layout when a visitor want to print the site handheld - Apply to only handheld media types. only - Limits application of the media query, particularly in the situation of older browsers which do not properly support the queries, as these browsers do not recognize the keyword, causing an error in the processing. not - Apply to all situations except the identified one. width px/em/cm Limit to browsers with a specific RENDERING width. This turns out to be less useful than min-width or max-width. min-width px/em/cm  Limit to browsers with a RENDERING width of at least the set amount. Used when applying media queries from smallest to largest. max-width px/em/cm Limit to browsers with a RENDERING width up to set amount. Used when applying media queries from largest to smallest, or to further constrain selectors when used with min-width. height px/em/cm Limit to browsers with a specific RENDERING height. This turns out to be less useful than min-height or max-height. Height is not often used since width can often dictate the specific device and height becomes less important for vertically scrolling pages. min-height px/em/cm Limit to browsers with a RENDERING height of at least the set amount. max-height px/em/cm Limit to browsers with a RENDERING height up to set amount. device-width px/em/cm Limit to browsers with a specific SCREEN width. This turns out to be less useful than min-device-width or max-device-width. min-device-width px/em/cm Limit to browsers with a SCREEN width of at least the set amount. Used when applying media queries from smallest to largest. max-device-width px/em/cm Limit to browsers with a SCREEN width up to set amount. Used when applying media queries from largest to smallest, or to further constrain selectors when used with min-device-width. device-height px/em/cm Limit to browsers with a SCREEN height of at least the set amount. min-device-height px/em/cm Limit to browsers with a SCREEN height of at least the set amount. max-device-height px/em/cm Limit to browsers with a SCREEN height up to set amount. orientation portrait landscape Limit to browsers with a particular orientation. This effectively only used when dealing with mobile devices which are orientation conscious. aspect-ratio ratio Limit to a ratio between the "width" and the "height" values.  min-aspect-ratio ratio Limit to a minimum ratio between the "width" and the "height" values.   max-aspect-ratio ratio Limit to a maximum ratio between the "width" and the "height" values. device-aspect-ratio ratio Limit to a ratio between the "device-width" and the "device-height" values. Common values include 1/1, 4/3, 5/3, 16/9, 16/10. min-device-aspect-ratio ratio Limit to a minimum ratio between the "device-width" and the "device-height" values.  max-device-aspect-ratio ratio Limit to a maximum ratio between the "device-width" and the "device-height" values. resolution dpi/dpcm Limit to devices with a specified resolution. dpi = dots per CSS inch, dpcm = dots per CSS centimeter. min-resolution dpi/dpcm Limit to devices with a minimum resolution. max-resolution dpi/dpcm Limit to devices with a maximum resolution. color -/integer Limit to a specific color depth per component. For example, 0 would indicate monochrome while 2 would indicate 8 bit colors (256-color palette) and 8 indicates the standard full RGB palette. min-color integer Limit to a minimum color depth per component. max-color integer Limit to a maximum color depth per component. color-index -/integer Limit to a specific total color depth. For example, 1 would be monochrom while 8 would indicate 8 bit colors (256-color palette) and 24 indicates the standard full RGB palette. min-color-index integer Limit to a minimum total color depth. This is must effective at displaying different background images based upon the displayable colors, saving bandwidth on monochrome and greyscale displays. max-color-index integer Limit to a maximum total color depth. monochrome -/integer Limit to a specific greyscale color depth on a monochrome device. This is valuable when creating a custom display for printing out the page. min-monochrome integer Limit to a minimum greyscale color depth. max-monochrome integer Limit to a maximum greyscale color depth. scan progressive interlace Limits to TV media with progressive scanning or interlace scanning. Seldom used. grid -/0/1 Limit to displays running on a pure grid. Seldom used. * Dashes (-) indicate the value can be omitted and still work fine. Legacy and Browser-Specific Constraints Legacy Constraint Browser Modern Constraint -moz-images-in-menus Firefox 3.6+ none; Used to determine if images can appear in menus. Accepts 0/1. Corresponds to constraint "-moz-system-metric(images-in-menus)". -moz-mac-graphite-theme Firefox 3.6+ none; Used to determine if user is using the "Graphite" appearance on Mac OS X. Accepts 0/1.Corresponds to constraint "-moz-system-metric(mac-graphite-theme)". -moz-device-pixel-ratio -webkit-device-pixel-ratio Firefox 4-15 resolution -moz-os-version Firefox 25+ none; Used to determine which operating system is running the browser. Currently only implemented on windows, with values of "windows-wp", "windows-vista","windows-win7","windows-win8" -moz-scrollbar-end-backward Firefox 3.6+ none; Used to determine if user's interface displays a backward arrow at the end of the scrollbar. Accepts 0/1. Corresponds to constraint "-moz-system-metric(scrollbar-end-backward)". -moz-scrollbar-start-forward Firefox 3.6+  none; Used to determine if user's interface displays a forward arrow at the start of the scrollbar. Accepts 0/1. Corresponds to constraint "-moz-system-metric(scrollbar-start-forward)". Screen Sizes Device Display (WxH) Viewport (WxH) Resolution Render iPhone 2G, 3G, 3GS 320x480 320x480   163 dpi 1 dppx iPhone 4, 4S 640x960 320x480  326 dpi 2 dppx iPhone 5, 5C, 5S 640x1136 320x568 326 dpi 2 dppx iPhone 6 750x1334 375x667 326 dpi 2 dppx iPhone 6 Plus 1080x1920 414x736 401 dpi 3 dppx iPad, iPad 2 768x1024 768x1024  132 dpi 1 dppx iPad Air, iPad Air 2 1536x2048 768x1024 264 dpi 2 dppx iPad mini 2, 3  1536x2048 768x1024 326 dpi 2 dppx iPad mini 768x1024 768x1024  163 dpi 1 dppx iMac 2560x1440 2560x1440 109 dpi 1 dppx iMac Retina 5120x2880 5120x2880 218 dpi 1 dppx MacBook Pro Retina -13.3" 2560x1600 1280x800 227 dpi 2 dppx MacBook Pro Retina -15.4" 1800x2880 900x1440 220 dpi 3 dppx Galaxy Nexus 720x1280 720x1280 316 dpi 1 dppx Galaxy Mini 2 320x480 320x480 176 dpi 1 dppx Galaxy S3 720x1280 360x640 306 dpi 2 dppx Galaxy S4 1080x1920 360x640 441 dpi 3 dppx Galaxy S5 1080x1920 360x640  432 dpi 3 dppx Galaxy Tab 7 Plus 600x1024 600x1024  169 dpi 1 dppx Galaxy Tab 8.9 800x1280 800x1280  169 dpi 1 dppx Galaxy Tab 10.1 800x1280 800x1280 149.45 dpi 1 dppx Google Nexus 4 768x1280 768x1280  318 dpi 1 dppx Google Nexus 5 1080x1920 360x640 445 dpi 3 dppx Google Nexus 6 1440x2560 1440x2560  493 dpi 1 dppx Google Nexus 7 1200x1920 600x960 323 dpi 2 dppx Google Nexus 9 1536x2048 1536x2048  288 dpi 1 dppx Google Nexus 10 1600x2560 800x1280 300 dpi 2 dppx HTC Evo 480x800 480x800 217 dpi 1 dppx HTC One V 480x800 480x800 252 dpi 1 dppx HTC One X 720x1280 720x1280 312 dpi 1 dppx HTC One 1080x1920 360x640 469 dpi 3 dppx HTC One Mini 720x1280 720x1280  342 dpi 1 dppx HTC One Max 1080x1920 1080x1920  373 dpi 1 dppx HTC Pure 480x800 480x800  292 dpi 1 dppx HTC Desire Z, T-Mobile G2 480x800 480x800 252 dpi 1 dppx Blackberry Q5, Q10 720x720 360x360 330 dpi 2 dppx Blackberry Z10 768x1280 384x640 356 dpi 2 dppx Blackberry Z30 720x1280 360x640 295 dpi 2 dppx Blackberry Passport 1440x1440 1440x1440 453 dpi 1 dppx Lumia 520, 521 480x800 480x800 233 dpi 1 dppx Lumia 620 480x800 480x800 246 dpi 1 dppx Lumia 625 480x800 480x800 199 dpi 1 dppx Lumia 720, 820, 822 480x800 480x800 217 dpi 1 dppx Lumia 920, 928, 1020 768x1280 480x800 332 dpi 1.6 dppx Moto X 720x1280 360x640 312 dpi 2 dppx Moto G 720x1280 360x640 326 dpi 2 dppx Kindle Fire 600x1024 600x1024 169 dpi 1 dppx Kindle Fire HD - 7" 800x1280 800x1280 216 dpi 1 dppx Kindle Fire HD - 8.9" 1200x1920 1200x1920 254 dpi 1 dppx Kjndle Fire HDX - 8.9" 1600x2560 1600x2560 339 dpi 1 dppx Kindle Fire HDX - 7" 1200x1920 1200x1920 323 dpi 1 dppx Surface 768x1366 768x1366 148 dpi 1 dppx Surface 2, Pro, Pro 2 1080x1920 1080x1920 208 dpi 1 dppx Surface Pro 3 1440x2160 1440x2160 216 dpi 1 dppx Yoga 2 Pro 1800x3200 1800x3200 276 dpi 1 dppx ThinkPad Edge E531 1920x1080 1920x1080 141 dpi 1 dppx IdeaPad U310 1366x768 1366x768 118 dpi 1 dppx UltraSharp UP2414Q 3840x2160 3840x2160 185 dpi 1 dppx UltraSharp U2412M 1920x1200 1920x1200 94 dpi 1 dppx UltraSharp U2414H 1920x1080 1920x1080  93 dpi 1 dppx If you set the viewport scale to 1, the display dimension is the maximum size of an image you want to include while the viewport dimension is the one you use for your media queries. In  Practice It is not practical to create a media query for every single device, specifying its particular dimensions and resolution. Creating a set of breakpoints allow you to format a group of devices, instead of each individual device/screen. Also, setting the viewport scale to 1, simplifies all the artificial display dimensions into a handful of sizes. Adding a min-resolution constraint allows for special styling for those high resolution smart phones. To assist in the development process, we start with a mobile framework which already has the major break points identified. Download our framework Reference The specifications for media queries can be found at: http://www.w3.org/TR/css3-mediaqueries/ https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries https://developer.mozilla.org/en-US/docs/Mozilla/Mobile/Viewport_meta_tag https://www.apple.com/ipad/compare/ http://support.apple.com/kb/sp622 https://www.apple.com/iphone/compare/   }