S-ar putea să fiți de acord cu utilizarea unor unități de măsură flexibile, dar totuși nu ați putea înțelege pe deplin când să utilizați rem
și când să utilizați em
. Acest tutorial vă va ajuta să vă dați seama!
Ambii em
și rem
sunt unități flexibile, scalabile, care sunt traduse de browser în valori ale pixelilor, în funcție de setările dimensiunii fontului din design. Dacă utilizați o valoare de 1em
sau 1rem
, se poate traduce în browser ca orice de la 16px
la 160px
sau orice altă valoare.
Pe de altă parte px
valorile sunt utilizate de browser ca atare 1px
va fi afișat întotdeauna exact 1px
.
Încercați cursorul în acest exemplu CodePen pentru a vedea cum se face valoarea rem
și em
unitățile se pot traduce în diferite valori ale pixelilor, în timp ce se stabilesc în mod explicit px
unitățile rămân fixe în mărime:
Utilizarea em
și rem
unitățile noastre ne oferă flexibilitate în desenele noastre și capacitatea de a scala elemente în sus și în jos, în loc să fie blocate cu dimensiuni fixe. Putem folosi această flexibilitate pentru a face ca desenele și modelele noastre să fie mai ușor de reglat în timpul dezvoltării, să fie mai receptive și să permită utilizatorilor de browsere să controleze scara globală a site-urilor pentru o lizibilitate maximă.
Ambii em
și rem
unitățile oferă această flexibilitate și funcționează în moduri similare, astfel încât întrebarea importantă este când trebuie să ne folosim em
valori și când trebuie să folosim rem
valorile?
Diferența dintre em
și rem
este modul în care browserul determină px
valoare pe care o traduc. Înțelegerea acestei diferențe reprezintă cheia pentru determinarea momentului de utilizare a fiecărei unități.
Vom începe prin a trece peste cum rem
și em
unitățile de lucru de la sol pentru a vă asigura că știți fiecare detaliu. Apoi vom merge mai departe De ce ar trebui să utilizați em
sau rem
Unități.
În cele din urmă vom examina aplicația practică a exact acelor elemente ale unui design tipic pe care ar trebui să îl utilizați pentru fiecare tip de unitate.
rem
Unități Traduceți în valorile pixelilorAtunci când se utilizează rem
unități, dimensiunea pixelilor la care se traduce, depinde de mărimea fontului elementului rădăcină al paginii, adică de html
element. Această dimensiune a fontului rădăcinii este înmulțită cu numărul pe care îl utilizați cu dvs. rem
unitate.
De exemplu, cu dimensiunea fontului elementului rădăcină de 16px
, 10rem
ar echivala cu 160px
, adică 10 x 16 = 160.
em
Unități Traduceți în valorile pixelilorAtunci când se utilizează em
unitățile pixelilor, valoarea pixelilor pe care ați terminat-o este o multiplicare a dimensiunii fontului pe elementul care este desemnat.
De exemplu, dacă div are o dimensiune a fontului 18px
, 10em
ar echivala cu 180px
, adică 10 x 18 = 180.
Este o concepție greșită oarecum răspândită em
unitățile sunt relative la dimensiunea fontului elementului părinte. De fapt, conform spec. W3, ele sunt relative la dimensiunea fontului "elementului pe care sunt folosite".
Mărimea fontului elementului principal poate sa efect em
valori, dar când se întâmplă acest lucru este numai din cauza moștenirii. Să aruncăm o privire asupra motivului și să vedem cum funcționează acest lucru în acțiune.
em
UnitățiLucrând cu em
unitățile pot începe să devină complicate atunci când vine vorba de moștenire, deoarece fiecare element moșteneste automat dimensiunea fontului părintelui său. Efectul moștenirii poate fi anulat numai prin setarea explicită a dimensiunii fontului cu o unitate care nu este supusă moștenirii, cum ar fi px
sau vw
.
Dimensiunea fontului elementului pe care se află em
unități determină dimensiunea lor. Dar acel element poate să fi moștenit o dimensiune a fontului de la părintele său, care a moștenit o dimensiune a fontului de la părintele său, și așa mai departe. Ca atare, este posibil pentru oricine em
valoarea care va fi efectuată de dimensiunea fontului oricărui părinte.
Să ne uităm la un exemplu. Simțiți-vă liber să încercați acest lucru în CodePen pentru dvs. în timp ce noi trecem prin el. Pe măsură ce mergeți, utilizați Chrome Developer Tools sau Firebug pentru Firefox pentru a inspecta valorile pixelului nostru em
unitățile sunt calculate în.
em
MoştenireDacă avem o pagină cu dimensiunea fontului rădăcină de 16px
(de obicei, implicit) și un copil div în interiorul său cu padding de 1.5em
, div va moșteni dimensiunea fontului 16px
din elementul rădăcină. Prin urmare, padding sale se va traduce la 24px
, adică 1,5 x 16 = 24.
Atunci dacă am înfășura un alt div în jurul primului și a pus-o marimea fontului
la 1.25em
?
Învelișul nostru div moșteneste dimensiunea fontului rădăcinii 16px
și se înmulțește prin propriile sale marimea fontului
setarea 1.25em
. Aceasta stabilește div pentru a avea o dimensiune a fontului 20px
, adică 1,25 x 16 = 20.
Acum div divorțul nostru nu mai moșteni direct din elementul rădăcină, ci mostenesc dimensiunea fontului 20px
de la noul său div. Valoarea sa de umplutură 1.5em
acum echivalează cu 30px
, adică 1,5 x 20 = 30.
Acest efect de scalare poate fi amplificat și mai mult dacă adăugăm un em
bazat pe dimensiunea fontului la div divorț original, să spunem 1.2em
.
Div divorțează 20px
dimensiunea fontului de la părintele său, apoi se înmulțește cu cea proprie 1.2em
setarea, dându - i o nouă dimensiune a fontului 24px
, adică 1,2 x 20 = 24.
1.5em
padding pe divul nostru va schimba acum dimensiunea din nou cu noua dimensiune font, de data aceasta 36px
, adică 1,5 x 24 = 36.
În cele din urmă, pentru a ilustra în continuare acest lucru em
unitățile sunt relative la mărimea fontului elementului pe care sunt utilizate, (nu elementul părinte), să vedem ce se întâmplă cu 1.5em
dacă am setat explicit div pentru a utiliza o dimensiune a fontului 14px
, o valoare care nu este supusă moștenirii.
Acum, padding noastre a scăzut la 21px, adică 1.5 x 14 = 21. Acesta nu este afectat de dimensiunea fontului elementului părinte.
Cu toate aceste posibilități de complicație, puteți vedea de ce este important să știți cum să utilizați em
unități într-un mod ușor de gestionat.
În mod normal, browserele au o dimensiune a fontului de 16 pixeli, dar acest lucru poate fi schimbat oriunde de la 9px la 72px de către utilizator.
Radacina html
elementul își moștenește mărimea fontului din setările din browser, dacă nu este înlocuită cu o valoare fixă stabilită în mod explicit.
Deci, în timp ce dimensiunea fontului pe html
element este ceea ce determină direct rem
valori, dimensiunea fontului ar putea să vină mai întâi din setările browserului.
Astfel, setările pentru dimensiunea fontului browserului pot influența valoarea fiecărei rem
unitate folosită într-un design, precum și fiecare em
unitate prin moștenire.
Cu excepția cazului în care sunt suprascrise, html
element va moșteni oricare ar fi setarea implicită a dimensiunii fontului în browser. De exemplu, să luăm un site unde nu marimea fontului
proprietatea este setată pe html
element.
Dacă un utilizator are browserul la dimensiunea implicită a fontului de 16 pixeli, dimensiunea fontului rădăcină va fi de 16 pixeli. În Instrumentele de dezvoltator Chrome puteți vedea ce a moștenit un element verificând Afișați proprietăți moștenite sub computerizata fila.
În acest caz 10rem
echivalează cu 160px
, adică 10 x 16 = 160.
În cazul în care utilizatorul leagă dimensiunea fontului browserului până la 18 pixeli, dimensiunea fontului rădăcină devine de 18 pixeli. Acum 10rem
se traduce la 180px
, adică 10 x 18 = 180.
em
Unitate de dimensiune font HTMLCând o em
dimensiunea fontului este setată pe html
element, valoarea pixelului la care se face traducerea va fi un set de setări pentru dimensiunea fontului browserului.
De exemplu, dacă site-ul lui html
element a avut un marimea fontului
proprietate setat la 1.25em
, dimensiunea fontului rădăcină ar fi de 1,25 ori mai mare decât setarea dimensiunii fontului browserului.
Dacă dimensiunea fontului browserului a fost setată la 16px
, dimensiunea fontului rădăcină ar ieși ca 20px
, adică 1,25 x 16 = 20.
În acest caz 10rem
ar fi egal 200px
, adică 10 x 20 = 200.
Cu toate acestea, dacă dimensiunea fontului browserului a fost setată la 20px
, dimensiunea fontului rădăcinii se va traduce la 25px
, adică 1,25 x 20 = 25.
Acum 10rem
ar fi egal 250px
, adică 10 x 25 = 250.
em
vs. rem
DiferențăCeea ce se reduce la toate acestea este:
Traducerea rem
unitatea la valoarea pixelului este determinată de dimensiunea fontului html
element. Această dimensiune a fontului este influențată de moștenirea din setarea dimensiunii fontului browserului, cu excepția cazului în care este explicit înlocuită cu o unitate care nu este supusă moștenirii.
Traducerea em
unitățile la valorile pixelilor sunt determinate de mărimea fontului elementului în care sunt utilizate. Această dimensiune a fontului este influențată de moștenirea din elementele părinte, cu excepția cazului în care este explicit suprimată cu o unitate care nu este supusă moștenirii.
rem
Unități:Cea mai mare putere rem
oferta de unități nu este doar faptul că acestea dau dimensionare consistentă, indiferent de moștenirea elementelor. Mai degrabă, ele ne dau o modalitate de a avea setări de dimensiune a fontului utilizatorilor care influențează fiecare aspect al unui aspect al unui site folosind rem
unde am folosit px
Unități.
Din acest motiv scopul principal al utilizării rem
unitățile ar trebui să fie pentru a se asigura că orice dimensiune implicită a fontului pe care un utilizator le-a setat browser-ul, aspectul se va ajusta pentru a se potrivi cu dimensiunea textului din cadrul acestuia.
Un site poate fi conceput inițial, concentrându-se pe cea mai comună dimensiune a fontului browserului implicit de 16 pixeli.
Dimensiunea fontului pentru browser 16pxDar prin utilizarea rem
dacă un utilizator mărește dimensiunea fontului, integritatea aspectului va fi păstrată și textul nu va fi scos într-un spațiu rigid destinat textului mai mic.
Și dacă utilizatorul își micșorează dimensiunea fontului, întregul aspect scade în jos și nu va fi lăsat într-o minusculă de text într-o pustie de spațiu alb.
Dimensiunea fontului browserului 9 pixeliUtilizatorii modifică setările dimensiunii fontului pentru tot felul de motive, de la vederea înțepenită până la alegerea setărilor optime pentru dispozitivele care pot fi foarte diferite în ceea ce privește mărimea și distanța de vizionare. Utilizarea acestor setări permite experiențe mult mai bune pentru utilizatori.
Unii designeri folosesc rem
bazate pe machete în legătură cu un fix px
unitate marimea fontului
setarea pe html
element. Acest lucru se face de obicei astfel încât să se schimbe dimensiunea fontului pe html
element poate scala în ansamblu proiectarea în sus sau în jos.
Vă sfătuesc cu fermitate acest lucru, deoarece depășește dimensiunea fontului html
elementul moșteneste din setările browserului utilizatorului. Prin urmare, acest lucru împiedică setările să aibă vreun efect și elimină capacitatea utilizatorului de a optimiza pentru o vizualizare optimă.
Dacă doriți să modificați dimensiunea fontului pe html
element, face acest lucru cu un em
sau rem
valoare ca mărimea fontului rădăcină va continua să fie mai mult decât setarea dimensiunii fontului pentru utilizator.
Acest lucru vă va permite în continuare să vă scalați designul în sus sau în jos prin schimbarea dvs. html
element, dar veți păstra efectul setărilor browserului utilizatorului.
em
UnitățiValoarea cheie em
oferta de unități este că acestea permit valorile de dimensionare să fie determinate de o dimensiune a fontului, altele decât cele ale html
element.
Din acest motiv, scopul principal al em
unități ar trebui să fie pentru a permite scalabilitate în contextul unui element specific de proiectare.
De exemplu, ați putea seta umplutură
, margine
și inaltimea liniei
în jurul unui element de meniu de navigare folosit em
valorile.
În acest fel, dacă schimbați mărimea fontului din meniu, spațiul din jurul elementelor de meniu se va scala proporțional, independent de restul aspectului.
Meniu cu dimensiunea fontului de 1,2 oreÎn secțiunea anterioară privind moștenirea ați văzut cât de repede se ține evidența em
unitățile pot ieși din mână. Din acest motiv, vă recomand numai utilizând em
dacă identificați o nevoie clară a acestora.
S-ar putea să existe o dezbatere între designerii web și sunt sigur că diferiți oameni au diferite abordări preferate, cu toate acestea recomandarea mea este după cum urmează.
em
Unități pentru:Orice calibrare ar trebui în funcție de dimensiunea fontului unui element diferit de rădăcină.
În general vorbind, singurul motiv pentru care va trebui să utilizați em
unități este de a scala un element care nu are dimensiunea fontului implicit.
După exemplul de mai sus, componentele de proiectare precum elementele de meniu, butoanele și titlurile pot avea propriile dimensiuni de fonturi specificate. Dacă schimbați aceste dimensiuni ale fontului, doriți ca întreaga componentă să fie scalată proporțional.
Proprietățile comune pe care le va aplica această orientare sunt margine
, umplutură
, lăţime
, înălţime
și inaltimea liniei
setări, atunci când este utilizat pe elemente cu dimensiunea fontului fără implicit.
Vă recomandăm ca atunci când angajați em
unități, dimensiunea fontului elementului în care sunt utilizate ar trebui să fie setat rem
pentru a păstra scalabilitatea, dar pentru a evita confuzia în moștenire.
em
Unități pentru dimensiunile fontuluiEste destul de comună pentru a vedea em
unități utilizate pentru dimensionarea fontului, în special în titluri, cu toate acestea, aș sugera că desenele sunt mai ușor de gestionat dacă rem
unitățile sunt de obicei folosite pentru dimensionarea fontului.
Motivele adesea folosite em
unitățile sunt o alegere mai bună decât px
unități, fiind relativ la dimensiunea obișnuită a textului. in orice caz rem
unitățile pot atinge acest obiectiv la fel de bine. Dacă orice modificare a dimensiunii fontului pe html
elementul este făcut, dimensiunile titlurilor vor scala totuși.
Încercați să schimbați em
dimensiunea fontului pe html
element în acest CodePen pentru a vă vedea:
De cele mai multe ori, nu vrem ca dimensiunile fontului să se bazeze pe orice alt element decât rădăcina, cu doar câteva excepții.
Un exemplu în care am putea dori em
baza de dimensiune a fontului ar putea fi un meniu derulant, unde avem un text al elementului de meniu al doilea nivel, în funcție de dimensiunea fontului primului nivel. Un alt exemplu ar putea fi o pictogramă de font folosită în interiorul unui buton, unde dimensiunea pictogramei ar trebui să se refere la mărimea textului butonului.
Cu toate acestea, cele mai multe elemente dintr-un design web vor avea tendința să nu aibă acest tip de cerință, așa că, în general, veți dori să le utilizați rem
unități pentru dimensionarea fontului, cu em
unități numai acolo unde este necesar.
rem
unități pentru:Orice calibrare nu are nevoie em
unități din motivele descrise mai sus, și ar trebui în funcție de setările dimensiunii fontului browserului.
Acest lucru reprezintă aproape totul într-un design standard, incluzând cele mai multe înălțimi, cele mai multe lățimi, cele mai multe straturi, cele mai multe margini, lățimea marginilor, majoritatea dimensiunilor fontului, umbrele, practic aproape fiecare parte a aspectului.
Pe scurt, tot ce se poate face cu scalabilitate rem
unități, ar trebui să fie.
Când creați machete, este adesea mai ușor să gândiți în pixeli, dar să ieșiți în rem
Unități.
Aveți posibilitatea să aveți pixel rem
calcule efectuate automat printr-un preprocesor precum Stylus / Sass / Less sau un postprocesor ca PostCSS cu pluginul PXtoRem.
Alternativ, puteți utiliza PXtoEM pentru a efectua manual conversiile.
rem
Întrebări mediaEste important, atunci când utilizați rem
pentru a crea un design uniform scalabil, interogările dvs. media ar trebui să fie, de asemenea, în rem
unități. Acest lucru vă va asigura că, indiferent de mărimea fontului browserului utilizatorului, interogările dvs. media vor răspunde la acesta și vor ajusta aspectul.
De exemplu, dacă un utilizator mărește foarte mult textul, este posibil ca aspectul să fie necesar să coboare dintr-o două coloană într-o singură coloană, la fel ca și pe un dispozitiv mobil ecranat mai mic.
Dacă punctele de întrerupere sunt la lățimile fixe ale pixelilor, numai o altă dimensiune a ferestrei de vizualizare le poate declanșa. Cu toate acestea rem
bazate pe puncte de oprire vor răspunde și la dimensiunea fontului diferită.
em
sau rem
Pentru:Lățimea coloanelor într-un aspect ar trebui să fie de obicei %
astfel încât să se poată adapta rapid la ferestrele de vizualizare cu dimensiuni imprevizibile.
Cu toate acestea, coloanele unice ar trebui încorporate în general rem
valori prin lățimea maximă
cadru.
De exemplu:
css .container lățime: 100%; max-lățime: 75rem;
Aceasta menține coloana flexibilă și scalabilă, dar împiedică aceasta să devină prea largă pentru ca textul să fie ușor de citit.
Într-un design web tipic, nu vor exista multe părți din aspectul dvs. care nu pot fi proiectate pentru scalabilitate. Cu toate acestea, uneori veți întâlni elemente care într-adevăr trebuie să utilizeze valori fixe explicite pentru a preveni scalarea.
Precondiția utilizării valorilor fixe de dimensionare ar trebui să fie aceea că dacă elementul în cauză ar fi fost scalat, s-ar rupe. Acest lucru nu se întâmplă adesea, deci înainte de a fi tentați să bateți pe aceia px
unități, întrebați-vă dacă utilizarea acestora este o necesitate absolută.
Să facem o scurtă recapitulare a ceea ce am acoperit:
rem
și em
unitățile sunt calculate în valorile pixelilor de către browser, pe baza dimensiunilor fontului din design.em
unitățile se bazează pe mărimea fontului elementului în care sunt utilizate.rem
unitățile se bazează pe dimensiunea fontului html
element.em
unitățile pot fi influențate de mărimea mărimii fontului din orice element parentalrem
unitățile pot fi influențate de moștenirea mărimii fontului din setările pentru fonturile browserului.
em
unități de dimensionare care ar trebui să scadă în funcție de dimensiunea fontului unui alt element decât rădăcina.rem
unități de dimensionare care nu au nevoie em
unități, și care ar trebui să scadă în funcție de setările dimensiunii fontului browserului.rem
dacă nu sunteți sigur că aveți nevoie em
unități, inclusiv în dimensiuni de fonturi.rem
unități pe interogările mediaem
sau rem
în lățimea de dispunere a mai multor coloane - utilizați %
in schimb.em
sau rem
dacă scalarea ar provoca în mod inevitabil un element de aspect pentru a se rupe.Sper că ați construit acum o imagine robustă și completă a modului exact em
și rem
unitățile de lucru, și prin faptul că știu cum să le pârghie cel mai bine în desenele dumneavoastră.
Vă încurajez să încercați pentru dvs. instrucțiunile de folosire conținute în acest tutorial și bucurați-vă de scalabilitatea și capacitatea de reacție a planurilor pe care le vor permite să creați.