CSS2 allows you to specify stylesheet for specific media type such as screen or print. Now CSS3 makes it even more efficient by adding media queries. You can add expressions to media type to check for certain conditions and apply different stylesheets. For example, you can have one stylesheet for large displays and a different stylesheet specifically for mobile devices. It is quite powerful because it allows you to tailor to different resolutions and devices without changing the content. Continue on this post to read the tutorial and see some websites that make good use of media queries.
CSS3 Media Queries (demo)
Check my demo and resize your browser window to see it in action.
Max Width
The following CSS will apply if the viewing area is smaller than 600px.
@media screen and (max-width: 600px) {
.class {
background: #ccc;
}
}
If you want to link to a separate stylesheet, put the following line of code in between the <head> tag.
<link rel="stylesheet" media="screen and (max-width: 600px)" href="small.css" />
Min Width
The following CSS will apply if the viewing area is greater than 900px.
@media screen and (min-width: 900px) {
.class {
background: #666;
}
}
Multiple Media Queries
You can combine multiple media queries. The following code will apply if the viewing area is between 600px and 900px.
@media screen and (min-width: 600px) and (max-width: 900px) {
.class {
background: #333;
}
}
Device Width
The following code will apply if the max-device-width is 480px (eg. iPhone display). Note: max-device-width means the actual resolution of the device and max-width means the viewing area resolution.
@media screen and (max-device-width: 480px) {
.class {
background: #000;
}
}
For iPhone 4
The following stylesheet is specifically for iPhone 4 (credits: Thomas Maier).
<link rel="stylesheet" media="only screen and (-webkit-min-device-pixel-ratio: 2)" type="text/css" href="iphone4.css" />
For iPad
You can also use media query to detect orientation (portrait or landscapse) on the iPad (credits: Cloud Four).
<link rel="stylesheet" media="all and (orientation:portrait)" href="portrait.css">
<link rel="stylesheet" media="all and (orientation:landscape)" href="landscape.css">
Media Queries for Internet Explorer
Unfortunately, media query is not supported in Internet Explorer 8 or older. You can use Javascript to hack around. Below are some solutions:
- CSS Tricks - using jQuery to detect browser size
- The Man in Blue - using Javascript (this article is written 6 years ago)
- jQuery Media Queries Plugin
Sample Sites
You need to view the following sites with a browser that supports media queries such as Firefox, Chrome, and Safari. Go to each site and see how the layout responds base on the size of your browser winow.
Hicksdesign
- Large size: 3 columns sidebar
- Smaller: 2 columns sidebar (the middle column drops to the left column)
- Even smaller: 1 column sidebar (the right column shift up below the logo)
- Smallest: no sidebar (logo & right column shift up and the other sidebar columns move below)

Colly
The layout switches between one column, 2 columns, and 4 columns depend on the viewing area of your browser.

A List Apart
- Large size: navigation at the top, 1 row of pictures
- Medium size: navigation on the left side, 3 columns of pictures
- Small size: navigation at the top, no background image on logo, 3 columns of pictures

Tee Gallery
This one is very similar to previous example Colly, but the difference is the images of TeeGallery resize as the layout stretchs. The trick here is use relative percentage value instead of fixed pixel (ie. width=100%).

Conclusion
Keep in mind: having an optimized stylesheet for mobile devices doesn't mean your site is optimized for mobile. To be truly optimized for mobile devices, your images and markups need to cut on the load size as well. Media queries are meant for design presentation, not optimization.
Perfect tutorial. Will surely give it a try on my website. Thanks for sharing :)
Very good article
thanks for the article :D it’s going to be very useful in a project.
awesome stuff.
Great article. Mobile design is definitely not a cosmetic only feature anymore and with the growing market of smartphones, better start doing it by default i’d say.
Very helpful, can’t wait to utilize this. I wonder if you could target specific devices like the iphone/pad just by using CSS now…?
Very well written article, thank you. I liked the examples you provided, makes it easy to follow along.
It’s just to bad that IE as usually won’t support these kind of things. I have great hopes for IE9 though, once it’s released!
Great info. Media queries is a nice addition to CSS that saves us a lot of time and effort in making the website more user-friendly. The provided demo is very useful.
Great Great Great. Your CSS tutorials are the best!
Very interesting tutorial. Thank you
Hi,
Certainly I have off topic question. I can see that web designers struggling for cross browser compatibility. My question is, is CSS3 still usable for our website. We still have lots of people still using Internet Explorer 6 and other non-upgraded browser version.
I don’t think older version browsers supports CSS3. How much practical it is to design your website in CSS3?
Regards,
Webdezine Blog
Thanks for share.
Helpful info there you have,this post saves me some time from searching. Thanks for your effort.
nice article!
Great Great Great.
Hei, I didin’t knoow about this.
Thank you a lot!
CSS 3 is pretty amazing! These media queries will certainly make life easier applying stylesheets to different browser sizes and mobile browsers. The iphone one is a good idea with the two orientations – simples. :)
That’s useful, too bad CSS3 is only on modern browsers, I have tested many CSS3 codes on older browsers and the page gets converted into a mess, I guess we would have to wait until most people upgrade their browsers.
Thanks for sharing this. I have written it down on my notebook. IE is a mess so we have to wait for IE supporting this.
see you in 2035!
I just went to the demo web page on my phone (Samsung Gravity, smaller than an iPhone). Unfortunately all the colored boxes were lit up at once…so something went wrong. It seems the entire web design community is struggling to find a working solution. Surely there must be a way to check the screen size on non-Apple (and thus, non-Safari) devices?