Query multimediale CSS per iPhone 5


132

L'iPhone 5 ha uno schermo più lungo e non cattura la visualizzazione mobile del mio sito Web. Quali sono le nuove query di progettazione reattiva per iPhone 5 e posso combinare con le query iPhone esistenti?

La mia attuale query multimediale è questa:

@media only screen and (max-device-width: 480px) {}

3
Possiamo vedere le tue query multimediali esistenti?
BoltClock

Risposte:


283

Un'altra utile funzione multimediale è device-aspect-ratio.

Nota che l' iPhone 5 non ha un formato 16: 9 . Sono in effetti 40:71.

iPhone <5:
@media screen and (device-aspect-ratio: 2/3) {}

iPhone 5:
@media screen and (device-aspect-ratio: 40/71) {}

iPhone 6:
@media screen and (device-aspect-ratio: 375/667) {}

iPhone 6 Plus:
@media screen and (device-aspect-ratio: 16/9) {}

iPad:
@media screen and (device-aspect-ratio: 3/4) {}

Riferimento:
Media Queries @ W3C Calcolatore delle proporzioni di
confronto dei modelli di iPhone


2
Mi piace questo approccio ma non sono riuscito a farlo funzionare in una webview dell'app PhoneGap fino ad aggiungere -webkit-min-device-pixel-ratio come spiegato da Stephen Sprawl zsprawl.com/iOS/2012/09/css-media-queries-for -il-iphone-5 . @media screen e (device-aspect-ratio: 40/71) e (-webkit-min-device-pixel-ratio: 2) {// iphone5 per i phonegaps}
TaeKwonJoe,

Ho dovuto aggiungere una and (-webkit-min-device-pixel-ratio: 2)query multimediale su iPhone 5 per farlo funzionare nella webview di PhoneGap come affermato da @TaeKwonJoe
Mahendra Liya

1
Grazie per aver aggiornato questo per includere iPhone 6!
Maverick,

Funziona abbastanza bene quando ho bisogno di differenziare iPhone 4 e iPhone 5 in CSS.
euccas,

1
Per iPhone 6, (device-aspect-ratio: 667/375) non ha funzionato su un vero iPhone fisico 6. Tuttavia ha funzionato sul simulatore iOS. L'ho cambiato in 375/667 e ha funzionato sul dispositivo fisico.
fai quello che ora è il

64

C'è questo, che merito a questo blog :

@media only screen and (min-device-width: 560px) and (max-device-width: 1136px) and (-webkit-min-device-pixel-ratio: 2) {
    /* iPhone 5 only */
}

Tieni presente che reagisce all'iPhone 5, non alla particolare versione di iOS installata su detto dispositivo.

Per unire con la tua versione esistente, dovresti essere in grado di delimitarli con virgola:

@media only screen and (max-device-width: 480px), only screen and (min-device-width: 560px) and (max-device-width: 1136px) and (-webkit-min-device-pixel-ratio: 2) {
    /* iPhone only */
}

NB: Non ho ancora testato il codice sopra, ma in precedenza ho testato @mediaquery delimitate da virgole e funzionano perfettamente.

Si noti che quanto sopra potrebbe colpire alcuni altri dispositivi che condividono rapporti simili, come il Galaxy Nexus. Ecco un metodo aggiuntivo che prenderà di mira solo i dispositivi che hanno una dimensione di 640 px (560 px a causa di alcune anomalie dei pixel di visualizzazione) e una tra 960 px (iPhone <5) e 1136 px (iPhone 5).

@media
    only screen and (max-device-width: 1136px) and (min-device-width: 960px) and (max-device-height: 640px) and (min-device-height: 560px),
    only screen and (max-device-height: 1136px) and (min-device-height: 960px) and (max-device-width: 640px) and (min-device-width: 560px) {
    /* iPhone only */
}

1
Puoi suggerire come potrei combinare questa query con la mia vecchia per catturare sia iPhone 4 che 5?
Maverick,

6
Attento in quanto ciò avrà effetto anche su altri telefoni, non solo sugli iPhone. Un esempio è il Samsung Galaxy Nexus.
Mike Sweeney,

@MikeSweeney Buona chiamata. Ho aggiornato il mio post con un nuovo metodo che non dovrebbe includere altri dispositivi.
Eric,

@Eric Questo è praticamente ciò su cui mi sono ritrovato a sistemarmi dopo un sacco di test cross-phone - ho dovuto portare l'altezza nel mix! Sembra funzionare alla grande sui 7-8 telefoni su cui collaudo.
Mike Sweeney,

questa riga è corretta iPhone 5 and not to iOS 6:? Dovrebbe essere: "iPhone5 e non iPhone 6"?
Sgnl,

38

Tutte queste risposte sopra elencate, che usano max-device-width o max-device-heightper le query sui media, soffrono di un bug molto forte: colpiscono anche molti altri popolari dispositivi mobili (probabilmente indesiderati e mai testati, o che arriveranno sul mercato in futuro).

Queste query funzioneranno per qualsiasi dispositivo che abbia uno schermo più piccolo e probabilmente il tuo design verrà interrotto.

In combinazione con query multimediali simili a dispositivi specifici (per HTC, Samsung, IPod, Nexus ...) questa pratica lancerà una bomba a orologeria. Per debigging, questa idea può rendere il tuo CSS uno spagetti incontrollato. Non puoi mai testare tutti i possibili dispositivi.

Tieni presente che l'unica media query rivolta sempre a IPhone5 e nient'altro è:

/* iPhone 5 Retina regardless of IOS version */
@media (device-height : 568px) 
   and (device-width : 320px) 
   and (-webkit-min-device-pixel-ratio: 2)
/* and (orientation : todo: you can add orientation or delete this comment)*/ {
                 /*IPhone 5 only CSS here*/
}

Si noti che esatto larghezza e l'altezza , non la larghezza massima sono controllate qui.


Ora, qual è la soluzione? Se vuoi scrivere una pagina web che avrà un bell'aspetto su tutti i possibili dispositivi, la migliore pratica è usare il degrado

/ * modello di degrado stiamo verificando la larghezza dello schermo solo sicuro, questo cambierà passando da verticale a orizzontale * /

/*css for desktops here*/

@media (max-device-width: 1024px) {
  /*IPad portrait AND netbooks, AND anything with smaller screen*/
  /*make the design flexible if possible */
  /*Structure your code thinking about all devices that go below*/
}
@media (max-device-width: 640px) {
 /*Iphone portrait and smaller*/
}
@media (max-device-width: 540px) {
 /*Smaller and smaller...*/
}
@media (max-device-width: 320px) {
 /*IPhone portrait and smaller. You can probably stop on 320px*/
}

Se oltre il 30% dei visitatori del tuo sito Web proviene da dispositivi mobili, capovolgi questo schema, fornendo un approccio mobile-first. Utilizzare min-device-widthin tal caso. Ciò accelererà il rendering delle pagine Web per i browser mobili.


10
Vorrei andare progressivamente al miglioramento e mobile prima. Questo inizia con il mobile e si costruisce usando min-device-width.
primavera133,

2
Inoltre, la soluzione altezza / larghezza / rapporto pixel che corrisponde solo all'iPhone 5 corrisponderà anche al telefono successivo che sembra avere le stesse caratteristiche. Il tema generale della tua risposta è corretto: pensare in termini di dispositivi specifici è il modo sbagliato di procedere.
Punta a punta il

@Dan - anche se la tua risposta non affronta direttamente la domanda, la esamina in una prospettiva più ampia delle migliori pratiche per la progettazione reattiva. Le cose che hai scritto qui, secondo me, sono molto profonde e pratiche. Cinque stelle.
Dimitri Vorontzov,

@ Dan - cercando di attuare il tuo suggerimento, qualcosa non funziona. Per favore, posso chiederti di dare un'occhiata: stackoverflow.com/questions/16486078/…
Dimitri Vorontzov,

@primavera, ti preghiamo di dire perché. Qual è il vantaggio di un primo approccio mobile?
S ..

7

per me, la domanda che ha fatto il lavoro è stata:

only screen and (device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)

7

iPhone 5 in verticale e orizzontale

@media only screen 
and (min-device-width : 320px) 
and (max-device-width : 568px) {

/* styles*/
}

iPhone 5 in orizzontale

@media only screen 
and (min-device-width : 320px) 
and (max-device-width : 568px) 
and (orientation : landscape) { 
/* styles*/

}

iPhone 5 in verticale

@media only screen 
and (min-device-width : 320px) 
and (max-device-width : 568px) 
and (orientation : portrait) { 
 /* styles*/

}

Perché hai bisogno max-device-width : 568pxdel ritratto?
adi518,

1
@ adi518 se non si utilizza la larghezza massima, vengono applicate le regole CSS per qualsiasi dispositivo superiore a
320 px,

1
Perché non usare device-width: 320px and device-height: 568pxinvece?
adi518,

5

Nessuna risposta funziona per me come target di un'app phonegapp.

Come indicato dai seguenti link , la soluzione seguente funziona.

@media screen and (device-height: 568px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 2) {
    // css here
}

5

Solo un'aggiunta molto rapida in quanto ho testato alcune opzioni e mi sono perso questo lungo la strada. Assicurati che la tua pagina abbia:

<meta name="viewport" content="initial-scale=1.0">


0

afaik no iPhone utilizza un rapporto pixel di 1,5

iPhone 3G / 3GS: (-webkit-device-pixel-ratio: 1) iPhone 4G / 4GS / 5G: (-webkit-device-pixel-ratio: 2)


0
/* iPad */
@media screen and (min-device-width: 768px) {
    /* ipad-portrait */
    @media screen and (max-width: 896px) { 
        .logo{
            display: none !important;
        }
    }
    /* ipad-landscape */
    @media screen and (min-width: 897px) { 

    }
}
/* iPhone */
@media screen and (max-device-width: 480px) {
    /* iphone-portrait */
    @media screen and (max-width: 400px) { 

    }
    /* iphone-landscape */
    @media screen and (min-width: 401px) { 

    }
}

-3

Dovresti forse abbassare il "-webkit-min-device-pixel-ratio" a 1,5 per catturare tutti gli iPhone?

@media only screen and (max-device-width: 480px), only screen and (min-device-width: 640px) and (max-device-width: 1136px) and (-webkit-min-device-pixel-ratio: 1.5) {
/* iPhone only */
}

1
Quale iPhone utilizza un rapporto pixel del dispositivo di 1,5?
BoltClock

1
Consiglio vivamente di eseguire query multimediali in base alla larghezza del dispositivo e non al nome del dispositivo (iPhone). Quindi, se l'iPhone 5 ha una larghezza maggiore, rendilo utilizzabile.
Tom Roggero,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.