I am using the media query in css to differentiate iphone and ipad
Here\'s my code:
/* iphone 3 */
@media only screen and (min-device-width : 320px)
Check out http://css-tricks.com/snippets/css/media-queries-for-standard-devices/
/* iPhone 4 ----------- */
@media
only screen and (-webkit-min-device-pixel-ratio : 1.5),
only screen and (min-device-pixel-ratio : 1.5) {
/* Styles */
}
/* iPads (portrait) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : portrait) {
/* Styles */
}
iOS does not currently support orientation:portrait
and orientation:landscape
.
Instead Apple currently uses the following:
Portrait
orientation:0
orientation:180 (not currently supported on iphone)
Landscape
orientation:90
orientation:-90
Ref: http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html
I have tried this link http://jsfiddle.net/andresilich/SpbC3/4/show/ in the responsive test tool like http://mattkersley.com/responsive/ and http://ipadpeek.com
.I have seen the landscape and the portrait mode displaying the same view. Is there any problem with those tools?
Great answer on using the colors to detect device and orientation. iPhone 4 did not work though and only rendered as either green or purple backgrounds.
I found this article which shed some light. http://www.hemmachat.com/2011/04/21/iphone-website-for-good-beginnings/
Now using the pixel ratio of 2 instead I can now get red and brown on an iPhone 4.
/* iPhone 4 portrait */
@media only screen and (-webkit-min-device-pixel-ratio: 2) {
body {
background-color:red;
}
}
/* iPhone 4 landscape */
@media only screen and (-webkit-min-device-pixel-ratio: 2) and (min-width: 480px){
body {
background-color:brown;
}
}
Modify your iPhone 4 media query to target high density pixel displays (retina = iPhone4)
@media screen and (max-device-width: 640px), screen and (-webkit-min-device-pixel-ratio: 2) and (orientation:portrait) { ... }
Didn't notice you reopened the question with an expansion so here is a reworked answer to target both iphones (3 and 4) and ipads.
Breakdown of what you should expect:
teal
background color.orange
on an ipad (landscape).black
on an ipad (portrait)red
on an iphone 4 (portrait)pink
on an iphone 4 (landscape)green
on regular smartphones, e.g Androids (landscape)purple
on a regular smartphone (portrait)CSS
body {
background-color:teal;
-webkit-transition: background-color 1000ms linear;
-moz-transition: background-color 1000ms linear;
-o-transition: background-color 1000ms linear;
-ms-transition: background-color 1000ms linear;
transition: background-color 1000ms linear;
}
/* iPads (portrait and landscape) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px) {
body {
background-color:yellow;
}
}
/* iPads (landscape) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : landscape) {
body {
background-color:orange;
}
}
/* iPads (portrait) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : portrait) {
body {
background-color:black;
}
}
/* iPhone 4 - (portrait) ---------- */
@media
only screen and (-webkit-min-device-pixel-ratio : 2) and (orientation:portrait),
only screen and (min-device-pixel-ratio : 2) and (orientation:portrait){
body {
background-color:red;
}
}
/* iPhone 4 - (landscape) ---------- */
@media screen and (-webkit-min-device-pixel-ratio : 2) and (orientation:landscape), screen and (min-device-pixel-ratio : 2) and (orientation:landscape){
body {
background-color:pink;
}
}
/* Smartphones (landscape) ----------- */
@media only screen
and (min-width : 321px)
and (max-width: 480px) {
body {
background-color:green;
}
}
/* Smartphones (portrait) ----------- */
@media only screen
and (max-width : 320px) {
body {
background-color:purple;
}
}`<!-- language-all: lang-css -->
I reformatted the @media
queries found in this fine article over at CSS-tricks to comply to some iphone4-specific bits, but overall this media query set should cover both iphones (3 and 4 with separate media queries) and ipads as well.
Here is a demo you can try in your i-devices.
http://jsfiddle.net/andresilich/SpbC3/4/show/
And you can also try out the queries over at http://quirktools.com/screenfly/ to see how they stack up. One thing though, the screenfly site does not differentiate between iphone 3 and 4 because regular browsers skip the webkit
only -webkit-min-device-pixel-ratio : 1.5
pixel ratio count so you will get better results testing it out in your actual device.