Devo usare unità di valore px o rem nel mio CSS? [chiuso]


375

Sto progettando un nuovo sito Web e voglio che sia compatibile con il maggior numero possibile di browser e impostazioni del browser. Sto cercando di decidere quale unità di misura dovrei usare per le dimensioni dei miei caratteri ed elementi, ma non riesco a trovare una risposta definitiva.

La mia domanda è: dovrei usare pxo remnel mio CSS?

  • Finora so che l'utilizzo pxnon è compatibile con gli utenti che modificano la dimensione del carattere di base nel browser.
  • Ho ignorato ems perché sono più una seccatura da mantenere, rispetto a rems, mentre cadono in cascata.
  • Alcuni sostengono che rems siano indipendenti dalla risoluzione e quindi più desiderabili. Ma altri dicono che la maggior parte dei browser moderni ingrandisce tutti gli elementi allo stesso modo, quindi l'utilizzo pxnon è un problema.

Lo sto chiedendo perché ci sono molte opinioni diverse su quale sia la misura di distanza più desiderabile nei CSS e non sono sicuro di quale sia la migliore.


4
Questa è una questione di controversie, argomentazioni e opinioni, non il tipo di domande tecniche in cui SO è bravo. A proposito, la risposta corretta è "No". ☺
Jukka K. Korpela,

2
Anche il commento è obsoleto. Solo perché il PO chiede l'opinione giusta, non significa che daremo solo la nostra opinione. Quasi 8 anni dopo, questa domanda mostra che c'è ancora interesse nel modo in cui il soggetto si evolve. Le risposte attuali sono comprovate e abbastanza tecniche e NON supposte. Pertanto suggerisco di modificare la parola "opinione" in "esperienza" in modo da non cadere in questa trappola di riapertura e chiusura della domanda ancora e ancora.
Tim Vermaelen,

2
@TimVermaelen questa domanda è stata chiusa solo una volta nella vita. La modifica apportata non è stata sostanziale, poiché la risposta dipende ancora interamente dal contesto che non può essere fornito a meno che OP non modifichi la domanda per porre domande su uno scenario specifico. Non esiste un'opzione "migliore" per tutti i casi, quindi questa domanda è basata sull'opinione.
TylerH,

Risposte:


418

TL; DR: utilizzare px.

I fatti

  • Innanzitutto, è estremamente importante sapere che, per specifica , l' pxunità CSS non equivale a un pixel di visualizzazione fisico. Questo è sempre stato vero, anche nelle specifiche CSS 1 del 1996 .

    CSS definisce il pixel di riferimento , che misura la dimensione di un pixel su un display a 96 dpi. Su un display che ha un dpi sostanzialmente diverso da 96 dpi (come i display Retina), l'agente utente ridimensiona l' pxunità in modo che le sue dimensioni corrispondano a quelle di un pixel di riferimento. In altre parole, questo riscalamento è esattamente il motivo per cui 1 pixel CSS equivale a 2 pixel fisici del display Retina.

    Detto questo, fino al 2010 (e nonostante la situazione dello zoom mobile), pxquasi sempre equivaleva a un pixel fisico, poiché tutti i display ampiamente disponibili erano circa 96 dpi.

  • Le dimensioni specificate in ems sono relative all'elemento padre . Ciò porta al em"problema di composizione" in cui gli elementi nidificati diventano progressivamente più grandi o più piccoli. Per esempio:

    body { font-size:20px; } 
    div { font-size:0.5em; }
    

    Ci da:

    <body> - 20px
        <div> - 10px
            <div> - 5px
                <div> - 2.5px
                    <div> - 1.25px
    
  • Il CSS3 rem, che è sempre relativo solo htmlall'elemento root , è ora supportato sul 96% di tutti i browser in uso .

L'opinione

Penso che tutti siano d'accordo sul fatto che sia bene progettare le proprie pagine in modo che siano accomodanti per tutti e che si tenga conto dei non vedenti. Una di queste considerazioni (ma non l'unica!) È consentire agli utenti di ingrandire il testo del tuo sito, in modo che sia più facile da leggere.

All'inizio, l'unico modo per fornire agli utenti un modo per ridimensionare le dimensioni del testo era usare le unità di dimensioni relative (come ad esempio ems). Questo perché il menu della dimensione del carattere del browser ha semplicemente cambiato la dimensione del carattere principale. Pertanto, se si specificavano le dimensioni del carattere in px, non si ridimensionerebbero quando si modifica l'opzione della dimensione del carattere del browser.

I browser moderni (e persino il non moderno IE7) hanno tutti cambiato il metodo di ridimensionamento predefinito per ingrandire semplicemente tutto, comprese immagini e dimensioni delle scatole. In sostanza, ingrandiscono o riducono il pixel di riferimento.

Sì, qualcuno potrebbe ancora cambiare il loro browser foglio di stile predefinito di modificare la dimensione del font di default (l'equivalente della opzione dimensione carattere vecchio stile), ma questo è un modo molto esoterica di andare su di esso e scommetto che nessuno 1 lo fa. (In Chrome, è sepolto sotto le impostazioni avanzate, il contenuto Web, le dimensioni dei caratteri. In IE9, è ancora più nascosto. Devi premere Alt e andare su Visualizza, Dimensioni del testo.) È molto più semplice selezionare l'opzione Zoom in menu principale del browser (o utilizzare la rotella del mouse Ctrl+ +/ -/).

1 - all'interno dell'errore statistico, naturalmente

Se supponiamo che la maggior parte degli utenti ridimensioni le pagine utilizzando l'opzione di zoom, trovo le unità relative per lo più irrilevanti. È molto più semplice sviluppare la tua pagina quando tutto è specificato nella stessa unità (le immagini sono tutte trattate in pixel) e non devi preoccuparti del compounding. ( "Mi è stato detto che non ci sarebbe matematica" - si tratta di dover calcolare ciò che 1.5em effettivamente risolve.)

Un altro potenziale problema dell'utilizzo delle sole unità relative per le dimensioni dei caratteri è che i caratteri ridimensionati dall'utente possono infrangere le ipotesi formulate dal layout. Ad esempio, ciò potrebbe comportare che il testo venga troncato o eseguito troppo a lungo. Se usi unità assolute, non devi preoccuparti di dimensioni di carattere impreviste a causa della rottura del layout.

Quindi la mia risposta è utilizzare le unità pixel. Uso pxper tutto. Naturalmente, la tua situazione può variare e se devi supportare IE6 (che gli dei delle RFC abbiano pietà di te), dovrai emcomunque usare s.


43
Dovresti usare pixel e rem. Quindi i browser più recenti ottengono rem e quelli vecchi ricadono in pixel (come WordPress 2012). Questo può essere automatizzato con Sass o Less, quindi tutto ciò che devi fare è inserire il valore px e emette automaticamente px e rem.
cchiera,

63
Il mio grande cavillo con questo argomento è che quando si regolano le dimensioni del carattere e la spaziatura in corrispondenza di punti di interruzione reattivi è possibile impostare una nuova dimensione del carattere sull'elemento html e ogni misura impostata in rem si adatterà automaticamente, mentre con px è necessario scrivere nuove regole per ogni misurazione che desideri modificare. Ovviamente saranno necessarie ulteriori regolazioni anche quando si utilizza rem, ma con una pianificazione intelligente si ottiene un'enorme quantità di ridimensionamento proporzionale gratuitamente. Legare determinate misure di spaziatura della scatola al tipo, codice più chiaro e meno complessità / più manutenibilità equivale a una chiara vittoria per me.
RobW,

16
Supponendo che nessun utente cambi l'impostazione della dimensione del carattere è abbastanza audace. Tale affermazione dovrebbe essere supportata da dati. Altrimenti è solo un modo per alienare alcuni degli utenti che sono già fragili (gravemente ipovedenti). Se puoi, usa rem invece di px. IMO, le app dovrebbero essere in grado di ridimensionare in modo indipendente la loro interfaccia e le dimensioni del carattere. "Basta usare px" è ciò che molti sviluppatori in difficoltà con il problema degli ems vogliono sentire, ma non è la risposta giusta per il web.
Olivvv,

18
Sarebbe bello avere un seguito su questo. Rem è ora al 95% + supporto.
Statistiche di apprendimento con l'esempio del

10
Sbagliato, non mi interessa IE (nessuno dovrebbe).
Vahid Amiri,

194

Vorrei lodare la risposta di josh3736 per aver fornito un eccellente contesto storico. Sebbene sia ben articolato, il panorama CSS è cambiato in quasi cinque anni da quando è stata posta questa domanda. Quando è stata posta questa domanda, è px stata la risposta corretta, ma oggi non è più valida.


tl; dr: userem

Panoramica dell'unità

Storicamente le pxunità rappresentavano in genere un pixel del dispositivo. Con i dispositivi con densità di pixel sempre più alta, ciò non vale più per molti dispositivi, come ad esempio il display Retina di Apple.

remunità rappresentano la r oot em dimensioni. È quello font-sizedi qualunque partita :root. Nel caso di HTML, è l' <html>elemento; per SVG, è l' <svg>elemento. L'impostazione predefinita font-sizein ogni browser * è 16px.

Al momento della scrittura, remè supportato da circa il 98% degli utenti . Se siete preoccupati che altro 2%, ti ricordo che le media query sono anche supportati da circa il 98% degli utenti .

Sull'utilizzo px

La maggior parte degli esempi CSS su Internet usa pxvalori perché erano lo standard di fatto. pt, ine in teoria avrebbero potuto essere utilizzate varie altre unità , ma non gestivano bene i piccoli valori poiché avresti rapidamente bisogno di ricorrere a frazioni, che erano più lunghe da digitare e più difficili da ragionare.

Se volessi un bordo sottile, con pxcui potresti usare 1px, con ptcui dovresti usare 0.75ptper risultati coerenti, e questo non è molto conveniente.

Sull'utilizzo rem

remIl valore predefinito di 16pxnon è un argomento molto forte per il suo utilizzo. Scrivere 0.0625remè peggio che scrivere 0.75pt, quindi perché qualcuno dovrebbe usarlo rem?

Vi sono due parti a remvantaggio rispetto ad altre unità.

  • Le preferenze dell'utente sono rispettate
  • Puoi modificare il pxvalore apparente di remcome preferisci

Rispetto delle preferenze dell'utente

Lo zoom del browser è cambiato molto nel corso degli anni. Storicamente molti browser si font-sizeingrandivano, ma questo cambiava molto rapidamente quando i siti Web si rendevano conto che i loro meravigliosi design perfetti per i pixel si stavano rompendo ogni volta che qualcuno ingrandiva o riduceva. A questo punto, i browser ridimensionano l'intera pagina, quindi lo zoom basato sui caratteri è fuori dall'immagine.

Il rispetto dei desideri di un utente non è da escludere. Solo perché un browser è impostato per 16pximpostazione predefinita, non significa che nessun utente non possa modificare le proprie preferenze 24pxo 32pxcorreggerle per ipovisione o scarsa visibilità (ad es. Abbagliamento dello schermo). Se si basano le proprie unità su rem, qualsiasi utente con una dimensione del carattere superiore vedrà un sito proporzionalmente più grande. I bordi saranno più grandi, l'imbottitura sarà più grande, i margini saranno più grandi, tutto si espanderà fluidamente.

Se si basano le query multimediali rem, è anche possibile assicurarsi che il sito visualizzato dagli utenti sia adatto allo schermo. Un utente font-sizeimpostato 32pxsu un 640pxampio browser, visualizzerà effettivamente il tuo sito come mostrato a un utente 16pxsu un 320pxampio browser. Non c'è assolutamente alcuna perdita per RWD nell'uso rem.

Modifica del pxvalore apparente

Poiché remsi basa su font-sizedel :rootnodo, se si desidera modificare ciò che 1remrappresenta, è sufficiente modificare font-size:

:root {
  font-size: 100px;
}
body {
  font-size: 1rem;
}
<p>Don't ever actually do this, please</p>

Qualunque cosa tu faccia, non impostare l' :rootelemento font-sizesu un pxvalore.

Se si imposta il font-sizesu htmlper un pxvalore di, hai spazzato via le preferenze dell'utente senza un modo per farli tornare.

Se si desidera modificare il valore apparente di rem, utilizzare le %unità.

La matematica per questo è ragionevolmente semplice.

L'apparente dimensione del carattere :rootè 16px, ma diciamo che vogliamo cambiarlo in 20px. Tutto quello che dobbiamo fare è moltiplicare 16per un valore per ottenere 20.

Imposta la tua equazione:

16 * X = 20

E risolvi per X:

X = 20 / 16
X = 1.25
X = 125%

:root {
  font-size: 125%;
}
<p>If you're using the default font-size, I'm 20px tall.</p>

Fare tutto in multipli di 20non è poi così eccezionale, ma un suggerimento comune è di rendere remuguale la dimensione apparente 10px. Il numero magico per quello è 10/16quale è 0.625, o 62.5%.

:root {
  font-size: 62.5%;
}
<p>If you're using the default font-size, I'm 10px tall.</p>

Il problema ora è che l'impostazione predefinita font-sizeper il resto della pagina è impostata su un valore troppo piccolo, ma esiste una soluzione semplice per questo: Impostare un font-sizeon bodyusando rem:

:root {
  font-size: 62.5%;
}

body {
  font-size: 1.6rem;
}
<p>I'm the default font-size</p>

È importante notare che, con questa correzione in atto, il valore apparente di remè il 10pxche significa che qualsiasi valore in cui potresti aver scritto pxpuò essere convertito direttamente in remun punto decimale.

padding: 20px;

diventa

padding: 2rem;

La dimensione del carattere apparente che scegli dipende da te, quindi se vuoi non c'è motivo per cui non puoi usare:

:root {
  font-size: 6.25%;
}
body {
  font-size: 16rem;
}

e avere 1remuguale 1px.

Quindi il gioco è fatto, una soluzione semplice per rispettare i desideri degli utenti evitando anche di complicare eccessivamente il CSS.

Aspetta, allora qual è il trucco?

Temevo che potessi chiederlo. Per quanto mi piacerebbe fingere che remsia magia e risolva tutto, ci sono ancora alcune questioni degne di nota. Secondo me nulla di sconvolgente , ma li chiamerò in modo da non poter dire che non ti avevo avvertito.

Media query (uso em)

Uno dei primi problemi con cui ti imbatterai remriguarda le query multimediali. Considera il seguente codice:

:root {
  font-size: 1000px;
}
@media (min-width: 1rem) {
  :root {
    font-size: 1px;
  }
}

Qui il valore delle remmodifiche dipende dall'applicazione della media query e dalla media query dipende dal valore di rem, quindi cosa sta succedendo?

remin media query utilizza il valore iniziale di font-sizee non dovrebbe (vedi sezione Safari) tener conto di eventuali cambiamenti che possono avere successo al font-sizedi :rootelemento. In altre parole, il suo valore apparente è sempre 16px .

Questo è un po 'fastidioso, perché significa che devi fare alcuni calcoli frazionari, ma ho scoperto che le media query più comuni usano già valori multipli di 16.

|   px | rem |
+------+-----+
|  320 |  20 |
|  480 |  30 |
|  768 |  48 |
| 1024 |  64 |
| 1200 |  75 |
| 1600 | 100 |

Inoltre, se si utilizza un preprocessore CSS, è possibile utilizzare mixin o variabili per gestire le query multimediali, che maschereranno completamente il problema.

Safari

Sfortunatamente esiste un bug noto con Safari in cui le modifiche alla :rootdimensione del carattere cambiano effettivamente i remvalori calcolati per gli intervalli di query multimediali. Ciò può causare un comportamento molto strano se la dimensione del carattere :rootdell'elemento viene modificata all'interno di una query multimediale. Fortunatamente la correzione è semplice: utilizzare le emunità per le query multimediali .

Cambio di contesto

Se si passa da un progetto all'altro, è possibile che la dimensione del carattere apparente remabbia valori diversi. In un progetto, potresti usare una dimensione apparente di 10pxdove in un altro progetto potrebbe essere la dimensione apparente 1px. Questo può essere fonte di confusione e causare problemi.

La mia unica raccomandazione qui è di attenermi 62.5%alla conversione remin una dimensione apparente di 10px, perché questo è stato più comune nella mia esperienza.

Librerie CSS condivise

Se stai scrivendo CSS che verrà utilizzato su un sito che non controlli, come per un widget incorporato, non c'è davvero alcun buon modo per sapere quale dimensione apparente remavrà. In questo caso, sentiti libero di continuare a usarlo px.

Se vuoi comunque usarlo rem, considera di rilasciare una versione Sass o LESS del foglio di stile con una variabile per sovrascrivere il ridimensionamento per la dimensione apparente di rem.


* Non voglio allontanare nessuno dall'uso rem, ma non sono stato in grado di confermare ufficialmente che ogni browser utilizza 16pxper impostazione predefinita. Vedete, ci sono molti browser e non sarebbe così difficile per un browser divergere così leggermente, diciamo 15pxo 18px. Nei test, tuttavia, non ho visto un singolo esempio in cui un browser che utilizzava le impostazioni predefinite in un sistema che utilizzava le impostazioni predefinite aveva un valore diverso da 16px. Se trovi un esempio del genere, ti preghiamo di condividerlo con me.


So che è in ritardo ma, mi piace il modo in cui uso REM, ma ho più problemi a usare rem quando uso matrix()con javascript, ovvero i valori di traduzione della matrice che stanno usando px(correggimi se sbaglio), e ne sono così confuso .
Ampersanda,

3
@Ampersanda, in JavaScript utilizzerai ampiamente i valori di pixel calcolati. La mia raccomandazione è di abilitare / disabilitare le classi dove possibile in modo che i CSS possano gestire l'aspetto delle cose. Per alcune cose non sarai in grado di evitare di usare JS per calcolare i valori dei pixel, quindi la cosa migliore da fare è calcolare il valore dei pixel dallo stato DOM.
zzzzBov,

Vedo, quindi devo getComputedStyle()ma il risultato è sempre su pixel, quindi devo dividere il risultato per il remvalore (come 16). CMIIW
Ampersanda,

@Ampersanda solo se stai effettivamente generando un remvalore, se hai già il pxvalore corretto , non è necessario passare alle remunità per cose che sono già calcolate per il dato contesto.
zzzzBov,

1
hanno 1rem pari 1px questo provoca problemi dovuti al minimo font-size di Chrome: stackoverflow.com/questions/44378664/... stackoverflow.com/questions/24200797/...
Paul

44

In questo articolo si descrive abbastanza bene i pro ei contro di px, eme rem.

L'autore conclude infine che il metodo migliore è probabilmente quello di utilizzare entrambi pxe rem, dichiarando pxprima per i browser più vecchi e redeclaring remper i browser più recenti:

html { font-size: 62.5%; } 
body { font-size: 14px; font-size: 1.4rem; } /* =14px */
h1   { font-size: 24px; font-size: 2.4rem; } /* =24px */

1
Sì, è quello che mi ha interessato al rem in primo luogo. Due cose che non capisco: lo consiglia solo come unità di misura per i caratteri (non elementi), e se lo capisco correttamente l'unica vera ragione per usare (r) em è che gli utenti di IE possano ridimensionare il testo?

1
@ Samuel, credo di si. Se non fosse per il ridimensionamento del testo, credo che preferiremmo utilizzare px. Per quanto riguarda l'unità per gli elementi, attenersi a pxsarebbe meglio come di solito si vorrebbe dimensionare gli elementi con precisione.
uzyn,

Ma se lo fai, qualsiasi impostazione del browser che ridefinisce la dimensione del carattere di base rovinerebbe il layout giusto? Perché non rem è per tutto?

1
Come molti commenti notano qui , il motivo per cui abbiamo dovuto abbandonare pxè abilitare il ridimensionamento. Ora, se lo utilizziamo rem, dobbiamo comunque fornire il pxfallback (nei browser più vecchi). In sostanza ciò che significa pxridimensionare il supporto è meglio di rem. I browser più recenti supportano il pxridimensionamento e per i browser più vecchi in qualsiasi modo su cui eseguiremo il fallback px. Ora basato sulla luce di questa conclusione, sono molto interessato a sapere, perché usare rem? Se potessi vedere la luce alla fine del tunnel.
fusionstrings

3
Non vi è alcuna garanzia che valori come 62,5% = 10px. È valido solo quando la dimensione del carattere predefinita del browser è stata impostata su 16px. Mentre questo è il valore predefinito, non è garantito.
cimmanon,

7

Come risposta riflessa, ti consiglio di usare rem, perché ti permette di cambiare il "livello di zoom" dell'intero documento in una volta, se necessario. In alcuni casi, quando vuoi che la dimensione sia relativa all'elemento genitore, usa em.

Ma il supporto rem è discutibile, IE8 ha bisogno di un polyfill e Webkit mostra un bug. Inoltre, il calcolo dei pixel secondari può far scomparire cose come le linee di un pixel. Il rimedio è codificare in pixel per elementi così piccoli. Ciò introduce ancora più complessità.

Quindi, nel complesso, chiediti se ne vale la pena - quanto è importante e probabile che cambi il "livello di zoom" dell'intero documento all'interno dei CSS?

In alcuni casi è sì, in alcuni casi sarà no.

Quindi, dipende dalle tue esigenze e devi valutare i pro ei contro, perché l'uso di rem ed em introduce alcune considerazioni aggiuntive rispetto al flusso di lavoro "normale" basato su pixel.

Tieni presente che è facile cambiare (o meglio convertire) il tuo CSS da px a rem (JavaScript è un'altra storia), perché i seguenti due blocchi di codice CSS produrranno lo stesso risultato:

html {
}

body {
  font-size:14px;
}

.someElement {
  width: 12px;
}

html {
  font-size:1px;
}

body {
  font-size:14rem;
}

.someElement {
  width: 12rem;
}

6

Sì, REM e PX sono relativi, ma altre risposte hanno suggerito di optare per REM su PX, vorrei anche fare un backup di questo usando un esempio di accessibilità.
Quando l'utente imposta diverse dimensioni del carattere sul browser, REM scala automaticamente su e giù elementi come caratteri, immagini, ecc. Sulla pagina Web che non è il caso di PX.


Nell'immagine in basso a sinistra il testo è impostato usando la dimensione del carattere REM unità mentre il carattere del lato destro è impostato dall'unità PX.

inserisci qui la descrizione dell'immagine

Come puoi vedere, REM si ridimensiona automaticamente quando ridimensiono la dimensione del carattere predefinita della pagina Web. (Lato in basso a destra)

La dimensione del carattere di default di una pagina web è 16px che è uguale a 1 rem (solo per la pagina html predefinita cioè html{font-size:100%}), quindi 1.25rem è uguale a 20px.

PS: chi altro sta usando REM? Frameworks CSS! come Bootstrap 4, Bulma CSS ecc., quindi meglio andare d'accordo.


3

La risposta di josh3736 è buona, ma per fornire un contrappunto 3 anni dopo:

Consiglio di utilizzare le remunità per i caratteri, anche solo perché rende più semplice per te lo sviluppatore cambiare dimensione. È vero che gli utenti cambiano molto raramente la dimensione del carattere predefinita nei loro browser e che il moderno zoom del browser ingrandirà le pxunità. E se il tuo capo venisse da te e dicesse "non ingrandire le immagini o le icone, ma ingrandisci tutti i caratteri". È molto più semplice cambiare la dimensione del carattere di root e lasciare che tutti gli altri caratteri si ridimensionino rispetto a quello, quindi cambiare le pxdimensioni in dozzine o centinaia di regole CSS.

Penso che abbia ancora senso usare le pxunità per alcune immagini o per determinati elementi di layout che dovrebbero sempre avere le stesse dimensioni indipendentemente dalla scala del disegno.

Caniuse.com potrebbe aver affermato che solo il 75% dei browser quando josh3736 ha pubblicato la sua risposta nel 2012, ma a partire dal 27 marzo ha richiesto il supporto del 93,78% . Solo IE8 non lo supporta tra i browser che tracciano.


1
Only IE8 doesn't support it among the browsers they track.Eh? La pagina collegata afferma che "IE9 e IE10 non supportano le unità rem quando vengono utilizzate nella proprietà di stenografia dei caratteri o quando vengono utilizzate su pseudo elementi. IE9, 10 e 11 non supportano le unità rem se utilizzate nella proprietà di altezza della linea se utilizzate su: pseudo-elementi: before e: after. I bordi dimensionati in realtà scompaiono quando la pagina viene ingrandita in Chrome. Non funziona su browser Android 4.3 Samsung Note II e Samsung Galaxy Tab 2 su Android 4.2. Chrome 31-34 e Android basato su Chrome (come 4.4) presentano un bug relativo alla dimensione del carattere quando l'elemento radice ha una dimensione basata su percentuale. "
e-sushi,

Inoltre, in relazione al tuo as of March 27 they claim 93.78% support.Al momento della stesura di questo commento, caniuse mostra solo il 91,79% di supporto completo del browser. Guardando la tua percentuale, sono abbastanza sicuro di aver incluso anche il supporto del browser buggy (attualmente al 2,8%, che potrebbe essere interpretato come una copertura complessiva ottimistica del 94,6% - ma il fatto è che quel 2,8% viene fornito con buggy, incompleto o addirittura completamente supporto mancante ... come notato nel mio commento precedente: ogni errore è il risultato di diverse versioni del browser e combinazioni del sistema operativo.) Potresti voler correggere la tua risposta di conseguenza ...
e-sushi

1

Ho trovato che il modo migliore per programmare le dimensioni dei caratteri di un sito Web consiste nel definire una dimensione dei caratteri di base per bodye quindi usare em (o rem) per ogni altro font-sizeche dichiaro successivamente. Questa è una preferenza personale, suppongo, ma mi ha servito bene e ha anche reso molto facile incorporare un design più reattivo .

Per quanto riguarda l'utilizzo delle unità rem, penso che sia utile trovare un equilibrio tra l'essere progressivo nel codice, ma anche offrire supporto per i browser più vecchi. Dai un'occhiata a questo link sul supporto del browser per le unità rem , che dovrebbe aiutarti molto nella tua decisione.


Ok. Ma il design reattivo è altrettanto semplice con le unità px (basta scrivere le tue query multimediali basate su px anziché su em)?

È possibile, tuttavia, se si desidera ridurre la dimensione del carattere man mano che la larghezza della finestra del sito Web diminuisce, è possibile modificare la bodydimensione del carattere e tutto cambia con esso.
cereallarceny,

Non sono davvero preoccupato per il supporto del browser. Includerò solo una dimensione px di fallback per tutte le dimensioni, in modo che i browser più vecchi abbiano qualcosa da interpretare.

Quindi vai per il modo progressivo usando rem. Finché fornisci un fallback, allora non vedo alcun danno. A me sembra solo un lavoro extra, ma forse non nella tua situazione.
cereallarceny,

0

ptè simile a rem, in quanto è relativamente fisso, ma quasi sempre indipendente dal DPI, anche quando i browser non conformi trattano pxin modo dipendente dal dispositivo. remvaria con la dimensione del carattere dell'elemento radice, ma puoi usare qualcosa come Sass / Compass per farlo automaticamente pt.

Se avessi questo:

html {
    font-size: 12pt;
}

allora 1remsarebbe sempre 12pt. reme emsono indipendenti dal dispositivo quanto gli elementi su cui si basano; alcuni browser non si comportano secondo le specifiche e trattano pxletteralmente. Anche ai vecchi tempi del Web, 1 punto era costantemente considerato come 1/72 di pollice - cioè, ci sono 72 punti in un pollice.

Se hai un browser vecchio e non conforme e hai:

html {
    font-size: 16px;
}

quindi 1remdipenderà dal dispositivo. Per gli elementi che erediterebbero htmlper impostazione predefinita, 1emdipenderebbero anche dal dispositivo. 12ptsarebbe l' equivalente indipendente dal dispositivo, si spera, garantito :,16px / 96px * 72pt = 12pt dove 96px = 72pt = 1in.

Può essere piuttosto complicato fare i conti se vuoi attaccare unità specifiche. Ad esempio .75em of html = .75rem = 9pt, e .66em of .75em of html = .5rem = 6pt. Una buona regola empirica:

  • Utilizzare ptper dimensioni assolute. Se hai davvero bisogno che questo sia dinamico rispetto all'elemento root, stai chiedendo troppo CSS; hai bisogno di un linguaggio che si compili in CSS, come Sass / SCSS.
  • Utilizzare emper dimensioni relative. È abbastanza utile poter dire "Voglio che il margine a sinistra sia circa la larghezza massima di una lettera", oppure "Rendi il testo di questo elemento solo un po 'più grande di ciò che lo circonda". <h1>è un buon elemento su cui utilizzare una dimensione del carattere in ems, poiché potrebbe apparire in vari punti, ma dovrebbe essere sempre più grande del testo vicino. In questo modo, non devi avere una dimensione del carattere separata per ogni classe a cui viene applicata h1: la dimensione del carattere si adatterà automaticamente.
  • Utilizzare pxper formati molto piccoli. A dimensioni molto ridotte, ptpuò diventare sfocato in alcuni browser a 96 DPI, dal momento ptche pxnon si allineano completamente. Se vuoi solo creare un bordo sottile di un pixel, dillo. Se hai un display ad alto DPI, questo non ti sarà ovvio durante il test, quindi assicurati di testarlo su un display generico da 96 DPI ad un certo punto.
  • Non trattare i subpixel per rendere le cose fantasiose sui display ad alto DPI. Alcuni browser potrebbero supportarlo, in particolare su schermi a DPI elevato, ma è un no-no. La maggior parte degli utenti preferisce grandi e chiari, sebbene il web ci abbia insegnato agli sviluppatori diversamente. Se vuoi aggiungere dettagli estesi per i tuoi utenti con schermi all'avanguardia, puoi usare la grafica vettoriale (leggi: SVG), che dovresti comunque fare.

1
pt è per la stampa e non dovrebbe mai essere usato per le schermate
sf

@sf CSS definisce pt e px in modo tale che abbiano sempre lo stesso rapporto, nonostante questo non sia un utilizzo tecnicamente accurato di quei termini (72pt = 96px = 1in). In effetti, nei CSS, px non è in realtà un singolo dispositivo pixel. Sul mio schermo, 1px è 2 pixel del dispositivo. Il vantaggio di usare pt su px è che puoi facilmente specificare le dimensioni degli elementi rispetto alle dimensioni relative al testo.
Zenexer,

-2

Metà (ma solo metà) risposta snarky (l'altra metà è amaro disprezzo della realtà della burocrazia):

Usa vh

Tutto è sempre dimensionato per la finestra del browser.

Consenti sempre lo scorrimento verso il basso, mai lateralmente.

Imposta la larghezza del corpo in modo che sia un 50vh statico e nulla fluttua o si rompe dal div parent. E lo stile utilizza solo le tabelle in modo che tutto sia tenuto rigidamente in posizione come previsto. Includi una funzione javascript per annullare qualsiasi attività ctrl +/- che l'utente può fare.

Tutti ti odieranno tranne le persone che ti diranno di far combaciare le cose con il loro modello e saranno estatici. E tutti sanno che la loro opinione è l'unica che conta.


-3

Sì. O meglio no.

Ehm, voglio dire, non importa. Usa quello che ha senso per il tuo particolare progetto. PX ed EM o entrambi ugualmente validi, ma si comporteranno in modo leggermente diverso a seconda dell'architettura CSS della tua pagina generale.

AGGIORNARE:

Per chiarire, sto affermando che di solito non importa quale usi. A volte, potresti specificamente scegliere uno sopra l'altro. Gli EM sono utili se puoi iniziare da zero e vuoi usare una dimensione del carattere di base e rendere tutto relativo a quello.

I PX sono spesso necessari quando si esegue il retrofit di una riprogettazione su una base di codice esistente e è necessaria la specificità di px per evitare problemi di annidamento errato.


Quindi la tua risposta è che non importa? O ci sono alcune situazioni in cui valuteresti l'una sull'altra? E se sì, in quali situazioni sarebbe il caso?

@ Samuel sì, ci possono essere volte in cui vuoi usare l'una o l'altra. Ho aggiornato la mia risposta con maggiori informazioni.
DA.

Scusa, mi sono un po 'confuso con la formulazione originale. Penso che tu abbia REM nel titolo e EM nel corpo. Sembra che tu stia chiedendo specificamente di REM. La risposta è ancora più o meno la stessa, ma REM ha alcuni vantaggi aggiuntivi da considerare, ma viene utilizzata principalmente come EM: consente di utilizzare una dimensione del carattere "base".
DA.

Perché " em è bello [...] se puoi iniziare da zero e vuoi usare una dimensione del carattere di base e rendere tutto relativo a quello. "? Qual è il vantaggio di (r) em's su px? È così che gli utenti di IE possono ridimensionare il testo o ci sono altri vantaggi rispetto a px (che sembra essere più semplice)?

EM e REM hanno lo stesso vantaggio: puoi impostare HTML o BODY su una dimensione del carattere specifica (diciamo 10px) e quindi impostare tutto il resto come EM o REM. In questo modo, se vuoi rendere tutto il tipo proporzionalmente più grande, devi semplicemente cambiare quello stile iniziale da 10px a 11px. Questo è stato molto più utile 5 anni fa quando stavamo costruendo tutti i nostri widget personalizzati per il ridimensionamento dei font basati su JS. In questi giorni, i browser fanno un lavoro così migliore nello zoom (soprattutto mobile) che lo trovo molto meno di un vantaggio. Se trovi PX più semplice, allora questo è un vantaggio per te e sicuramente un motivo valido per andare con PX.
DA.

-4

sono la strada da percorrere, non solo per i caratteri, ma puoi usarli anche con scatole, spessore delle linee e altre cose, perché?

In parole semplici, sono gli unici che si adattano all'unisono con i tasti alt + e alt- nel browser per lo zoom.

Altre misure si ridimensionano, ma non in modo pulito come un em.

In una nota a margine se si desidera il massimo in termini di ridimensionamento, convertire anche la grafica in SVG basato su vettori ove possibile, poiché questi si ridimensioneranno in modo pulito con il rapporto di zoom del browser.


3
Ma la maggior parte dei browser oggigiorno ingrandisce equamente tutti gli elementi della pagina (a meno che non modifichi la dimensione del carattere di base), quindi il vantaggio di usare (r) em non è vero per i browser moderni, giusto?

Lo è e non lo è, sebbene sia corretto in quello che dici, si tratta più del fattore di ridimensionamento rispetto al delta di ridimensionamento. Il delta sarà sempre uniforme a prescindere dalla misurazione utilizzata, ma il fattore di scala (a condizione che i calcoli siano eseguiti correttamente) si adatterà in base alle necessità, per esempio un monitor widescreen rispetto a un monitor standard o pixel rettangolari rispetto a pixel quadrati. Poiché le rems si basano in realtà su una vera misurazione di una stampante, il ridimensionamento sarà sempre più adatto, altri (come%) sono spesso nella migliore delle ipotesi un offset delta
misero

(cont) con la moltiplicazione applicata in entrambe le direzioni e, di conseguenza, in alcuni casi può dare un rapporto di visione gravemente sproporzionato.
shawty

2
"In parole semplici, gli em sono quelli che si adattano all'unisono con i tasti alt + e alt- nel browser per lo zoom." = che non è corretto.
DA.

Ok, quindi avrei potuto formularlo meglio, vedi il mio commento precedente per la correzione.
Shawty

-5

Gli EM sono l'unica cosa che si adatta alle query multimediali che gestiscono il ridimensionamento +/-, che le persone fanno sempre, non solo i non vedenti. Ecco un'altra dimostrazione professionale ben scritta del perché questo è importante.

A proposito, questo è il motivo per cui Zurb Foundation utilizza ems , mentre Bootstrap 3 inferiore utilizza ancora i pixel.


2
Questo non è proprio corretto. In passato, i pixel non potevano essere ingranditi nelle vecchie versioni di IE. +/- ora esegue uno zoom a pagina intera in tutti i browser attuali, quindi questo non è un problema. Inoltre, questa domanda riguarda le rems piuttosto che px - non em vs px.
Rich Bradshaw,

1
Ragazzi, mi fate ridere. Hai mai provato a ridimensionare il tuo sito usando +/- usando i pixel? La scrittura sui pixel da ingrandire è assolutamente errata. Giù votami tutto quello che vuoi. I voti non cambiano la realtà.
robmuh,

1
Forse stiamo affrontando cose leggermente diverse: hai qualche possibilità di creare una semplice demo per dimostrare la differenza?
Rich Bradshaw,

Non penso che la domanda riguardi quali unità utilizzare nelle query dei media ...
binki
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.