2013-05-06 6 views
53

Per Android, persone consigliamo usando dp (densità indipendente pixel) le misure per gli elementi dell'interfaccia utente, e ci sono le convenzioni che esistono come l'utilizzo di 48DP per un'altezza tasto, eccCosa sono le unità dp (densità indipendente dai pixel) con CSS?

Sto lavorando su un'applicazione web, e Sto ricevendo molte critiche sul design dell'interfaccia utente dicendo che non è conforme agli standard di progettazione Android. Ovviamente, la mia applicazione avrà un aspetto diverso poiché utilizza CSS e HTML invece del tema Android Holo, ma mi piacerebbe comunque renderlo conforme il più possibile. Tuttavia, i CSS non consentono misurazioni indipendenti dalla densità.

quando verifico la mia applicazione su diverse risoluzioni e densità di pixel, non ha un bell'aspetto, e, a volte, è così sproporzionato quindi non è nemmeno funzionale. I CSS non hanno unità dp come lo sviluppo nativo di Android, ma mi chiedevo quali fossero alcune alternative.

Posso in qualche modo ottenere la densità di pixel utilizzando Javascript e scalare manualmente tutto in modo appropriato? Qual è il modo migliore per creare un'app Web che appaia e funzioni correttamente su tutte le risoluzioni/densità?

+0

di CSS 'px' è lo stesso di 'dp' su Android. [Secondo le specifiche CSS3. su unità e valori] (http://www.w3.org/TR/css3-values/#absolute-lengths). – omninonsense

risposta

21

http://www.w3.org/TR/css3-values/#lengths

L'unità più simile disponibile in CSS sono le unità finestra-percentuali.

  • vw - Uguale all'1% della larghezza del blocco contenente iniziale.
  • vh - pari all'1% dell'altezza del blocco contenitore iniziale.
  • vmin - Uguale al minore di vw o vh.
  • vmax - Uguale al maggiore di vw o vh.

L'unico browser mobile di essere a conoscenza di che non supporta queste unità è Opera. http://caniuse.com/#feat=viewport-units

+0

Queste unità sono visualizzate correttamente durante la distribuzione in iOS? – jmhostalet

+0

@jmhostalet No, fa sì che il browser entri in una specie di loop infinito poiché l'altezza del viewport è dinamica. – rookie1024

8

Che dire di un'interfaccia basata su unità REM?

Non sono abbastanza esperto sull'argomento da confermare, ma penso che si possa fare un po 'di matematica in base alla dimensione del viewport per applicare una dimensione del font nell'elemento root e l'intera interfaccia si adegui di conseguenza. Questa roba è ancora un po 'stregoneria per me.

+0

Ho usato questo in passato e ho avuto un buon successo con esso. –

+0

Non è necessario impostare la dimensione del carattere. La dimensione predefinita del carattere dell'elemento radice è in genere una scelta abbastanza ragionevole per il dispositivo in questione. –

11

In CSS3 può essere più esatto dire che il web non ha Android di px. The spec for CSS3's px dice questo:

pixel; 1px è uguale a 1/96th di 1in

px potrebbe essere la misura che si desidera, in futuro.

+0

Non riesco a vedere come avverrà questa transizione senza rompere tutto. E usare le stesse dimensioni assolute (in cm) per, diciamo, testo su mobile e desktop non è un buon paradigma. –

+0

E 1in è definito come 96px. Le unità CSS come in, mm sono dipendenti dalla densità dei pixel. –

88

Non sono d'accordo con la risposta attualmente accettato. Come suggerisce uber5001, un px è un'unità fissa, e in uno spirito simile agli sforzi dello specifco Android dp.

Per Material's spec:

Quando si scrive CSS, utilizzare px ovunque dp o sp sono rilevate. Dp deve essere utilizzato solo in via di sviluppo per Android.

+12

Questa è la risposta. +1 per aver citato le specifiche del materiale. – Qix

+0

-1, px non è un'unità fissa. 1px = 1/96th di 1in, ma 1in = 96px. pixel è l'unità di base, non il pollice. Sì, è strano, ma in realtà l'ho provato. Ho cambiato una dimensione dell'elemento da px a mm e il rapporto tra il modo in cui è apparso su desktop e mobile non è cambiato affatto. La risposta accettata è la più corretta. –

+2

Da MDN: "L'unità non rappresenta un pollice fisico sullo schermo, ma rappresenta 96px Ciò significa che qualunque sia la densità di pixel reale schermo, si presume essere 96 dpi Sui dispositivi con maggiore densità di pixel, si 1in.. essere inferiore a 1 pollice fisico. Allo stesso modo mm, cm e pt non sono la lunghezza assoluta. " https://developer.mozilla.org/en/docs/Web/CSS/length#CSS_units_and_dots-per-inch –

8

Utilizzare rem.

è la dimensione del font dell'elemento radice e un'ottima unità di base per la dimensione di altri elementi dell'interfaccia utente.

Se uno usato la stessa dimensione assoluta (in centimetro), il testo e altri elementi sarebbe troppo grande sul cellulare o troppo piccola sul desktop.

Se uno usato la stessa quantità di pixel, il testo e altri elementi sarebbe troppo piccola sul cellulare o troppo grande sul desktop.

L'unità rem è sul posto perché si dice "Hey, questo è quanto grande testo normale dovrebbe essere." Basare la dimensione di altri elementi dell'interfaccia utente su questa è una scelta abbastanza ragionevole.

1

Perché non usare i punti, si tratta di un formato coerente tra i dispositivi. Ed è relativo alle dimensioni dello schermo. La maggior parte non ha familiarità con esso dal momento che proviene dalla pubblicazione tradizionale.

8

Come di CSS3, non ci sono unità di CSS che sono veramente indipendente dal dispositivo. Vedi lo W3C spec on absolute lengths. In particolare, le unità assolute potrebbero non corrispondere alle loro misurazioni fisiche.

Se le unità fisiche erano fedeli al loro scopo, si potrebbe usare qualcosa di simile a punti; punti sono abbastanza vicino a dps:

1 in = 72 pt 
1 in = 160 dp 

1 dp = 72/160 pt 

Se si utilizza SCSS, è possibile scrivere una funzione di tornare nel pts:

@function dp($_dp) { 
    @return (72/160) * $_dp + pt; 
} 

e usarlo:

.shadow-2 { 
    height: dp(2); 
}