Valors i unitats CSS

Totes les propietats CSS tenen assignats un valor o un conjunt de valors permesos; donar una ullada a qualsevol pàgina de propietats de MDN t'ajudarà a comprendre els valors que admet una propietat concreta. En aquest article veurem uns quants dels valors i unitats que són d’ús més habitual.

Prerequisits: Coneixements bàsics d'informàtica, tenir el programari bàsic instal·lat, coneixements bàsics de treballar amb fitxers i d'HTML (consulta la Introducció a l'HTML) i nocions de com funciona el CSS.
Objectiu: Adquirir informació sobre els diferents tipus de valors i unitats que s’utilitzen en les propietats CSS.

Què és un valor CSS

En les especificacions CSS i en les pàgines de propietat d'aquest projecte MDN pots identificar amb facilitat els valors perquè estan escrits entre parèntesis angulars (brackets), per exemple <color> o <length>. Si veus que per a una propietat és vàlid el valor <color>, vol dir que per a aquesta propietat pots utilitzar com a valor qualsevol dels colors vàlids que apareixen a la pàgina de referència de la propietat <color>.

Nota: Observa que també es fa referència als valors CSS com tipus de dades. Bàsicament són termes intercanviables: el terme tipus de dada és en realitat una altra manera de dir valor.

Nota: Els valors CSS solen denotar-se entre parèntesis angulars per a diferenciar-los de les propietats CSS (per exemple, la propietat color i el tipus de dada <color>). Encara que tant els tipus de dades CSS com els elements d’HTML es denoten entre parèntesis angulars, és poc probable que et confonguis perquè s'utilitzen en contextos molt diferents.

En l'exemple següent hem establert el color del nostre títol de capçalera amb una paraula clau, i el fons amb la funció rgb():

h1 { 
  color: black; 
  background-color: rgb(197,93,161); 
} 

Un valor en CSS és una manera de definir una col·lecció de subvalors permesos. Això vol dir que si <color> és un valor permès, no t'has de demanar quins dels diferents tipus de valor del color es poden utilitzar: les paraules clau, els valors hexadecimals, les funcions rgb(), etc. Pots utilitzar qualsevol valor <color> disponible, sempre que sigui compatible amb el navegador. La pàgina de MDN et dona informació sobre la compatibilitat de cada valor amb els navegadors. Per exemple, consulta la pàgina <color> i observa que en la secció de compatibilitat dels navegadors s’enumeren diferents tipus de valors de color i la compatibilitat que tenen amb els diferents navegadors.

A continuació donem una ullada a uns quants dels tipus de valors i unitats amb què et pots trobar habitualment, amb exemples perquè facis proves amb diferents valors possibles.

Nombres, longituds i percentatges

En CSS pots trobar diversos tipus de dades numèriques. Totes les dades següents es classifiquen com a dades numèriques:

Tipus de dada Descripció
<integer> Un <integer> és un nombre enter, com ara 1024 o -55.
<number> Un <number> representa un nombre decimal: pot tenir o no un punt de separació de xifres decimals, per exemple 0.255, 128 o -1.2.
<dimension> Un <dimension> és un valor <number> amb una unitat associada, per exemple 45deg, 5s o 10px. <dimension> és una categoria «paraigua» que inclou els tipus <length>, <angle>, <time> i <resolution>.
<percentage> Un <percentage> representa una proporció d'algun altre valor, per exemple el 50%. Els valors de percentatge sempre són relatius a una altra quantitat, per exemple, la longitud d'un element en percentatge és relativa a la longitud de l'element pare.

Longituds

El tipus numèric que es troba amb més freqüència és <length>, per exemple 10px (píxels) o 30em. En CSS s'utilitzen dos tipus de longituds: relatives i absolutes. És important conèixer-ne la diferència per a entendre quines mides pot atènyer un element.

Unitats de longitud absolutes

Totes les unitats que es mostren a continuació són unitats de longitud absolutes: no són relatives a cap altre element i es considera que tenen sempre la mateixa mida.

Unitat Nom Equival a
cm Centímetres 1cm = 96px/2,54
mm Mil·límetres 1 mm = 1/10 d'1cm
Q Quarts de mil·límetre 1T = 1/40a d'1cm
in Polzades 1in = 2,54cm = 96px
pc Piques 1pc = 1/16 d'1 in
pt Punts 1pt = 1/72a de 1in
px Píxels 1px = 1/96a de 1in

La majoria d'aquests valors són més útils quan s'utilitzen en una sortida en format imprès, més que no en una sortida per pantalla. Per exemple, la pantalla no s’acostuma a mesurar en cm (centímetres). Normalment, les úniques unitats que es fan servir per a la pantalla són els píxels (px).

Unitats de longitud relatives

Les unitats de longitud relatives són unitats que es prenen en relació amb un altre element, potser la mida de la lletra o la mida de la finestra gràfica. L’avantatge d’utilitzar unitats relatives és que amb una planificació acurada pots definir a escala la mida del text o d’altres elements de la pàgina. A la taula següent pots trobar algunes de les unitats que són més útils per al desenvolupament web.

Unitat Relativa a
em La mida de la lletra de l’element pare.
ex L’altura x de la lletra de l'element.
ch La mesura d'avanç (amplada) del glif «0» del tipus de lletra de l'element.
rem La mida de la lletra de l’element arrel.
lh L’alçada de línia de l’element.
vw L’1% de l'amplada de la finestra gràfica.
vh L’1% de l'alçada de la finestra gràfica.
vmin L’1% de la dimensió més petita de la finestra gràfica.
vmax L’1% de la dimensió més gran de la finestra gràfica.

Un exemple il·lustratiu

En l'exemple següent pots observar com es comporten algunes unitats de longitud relativa i absoluta. La primera caixa té una amplada (width), establerta en píxels. Com que és una unitat absoluta, aquesta amplada roman sempre igual, independentment d’altres canvis.

La segona caixa té una amplada fixa establerta en unitats vw (amplada de la finestra gràfica). Aquest valor és relatiu a l'amplada de la finestra gràfica; així, 10vw és un 10 per cent de l'amplada de la finestra gràfica. Si canvia l’amplada de la finestra del navegador, la mida de la caixa ha de canviar, però aquí no et funcionarà perquè aquest exemple està incrustat a la pàgina amb <iframe>. Si vols veure-ho en acció, has d’obrir l’exemple en una pestanya nova del teu navegador.

La tercera caixa utilitza unitats em. Aquestes unitats són relatives a la mida de la lletra. Hem establert una mida de lletra d'1em en l’element <div> que conté una classe .wrapper. Canvia aquest valor per 1,5em i observa que la mida de la lletra de tots els elements augmenta, però només augmenta l’amplada de l’últim element, perquè l’amplada és relativa a la mida de la lletra.

Després de seguir les instruccions anteriors, juga una mica més amb els valors i observa què hi obtens.

Unitats em i rem

Les unitats em i rem són les dues longituds relatives que és probable que et trobis amb més freqüència per a dimensionar elements, des de caixes fins a text. Val la pena entendre com funcionen i en què es diferencien, sobretot quan comences a introduir-te en temes més complexos, com ara aplicar estil al text o el disseny de pàgines web amb CSS. T’ho mostrem a continuació amb un exemple.

L’HTML d’aquest exemple consisteix en dos blocs de llistes imbricades: hi ha tres llistes en total i tots dos blocs tenen el mateix HTML. L’única diferència és que en el primer bloc hi ha una classe em, i en el segon una classe rem.

Per començar, establim la mida de la lletra de l’element <html> a 16px.

Breument, la unitat em fa referència a «la mida de lletra de l'element pare». Els elements <li> que hi ha dins dels elements <ul> amb una classe em hereten la mida de l’element pare, de manera que en cada nivell d’imbricació successiu la mida de la lletra augmenta progressivament perquè en cadascun hi ha una mida de lletra establerta en 1,3em (1,3 vegades la mida de la lletra de l’element pare).

Breument, la unitat rem fa referència a «la mida de lletra de l'element arrel» (els rem estàndard es corresponen amb l’em de l’arrel). Els elements <li> dins dels elements <ul> amb una classe rem prenen la mida de l'element arrel (<html>). Això significa que no augmenten en cada nivell d’imbricació successiu.

Tanmateix, observa que si canvies la mida de la lletra (font-size) de l’element <html> amb el CSS, canvia tot el que hi està relacionat, tant els rem com els em.

 

Percentatges

En molts casos, un percentatge es tracta de la mateixa manera que una longitud. La qüestió amb els percentatges és que sempre es defineixen en relació amb algun altre valor. Per exemple, si defineixes la mida de la lletra (font-size) d'un element com un percentatge, aquesta serà un percentatge del valor de font-size de l’element pare. Si fas servir un percentatge per a un valor de l’amplada (width), serà un percentatge del valor de width de l’element pare.

En l'exemple següent, les dues caixes amb la mida especificada en unitats de percentatge i les dues caixes amb la mida especificada en unitats de píxel tenen els mateixos noms de classe. Tots dos conjunts de caixes tenen 200px i un 40% d’amplada, respectivament.

La diferència és que el segon conjunt de dues caixes es troba dins d’un contenidor de 400 píxels d’amplada. La segona caixa de 200px d'amplada té la mateixa amplada que la primera, però la segona caixa del 40% ara és el 40% de 400px, molt més estreta que la primera.

Canvia l'amplada del contenidor o el valor en percentatge i observa què passa.

 

L’exemple següent mostra les mides de lletra en percentatges. Cada element de llista <li> té una mida de lletra font-size del 80%; per tant, la lletra dels elements de llista imbricats és cada cop més petita a mesura que la mida de lletra s’hereta de l’element pare.

 

Observa que molts valors accepten unitats de longitud i de percentatge, però n’hi ha que només accepten unitats de longitud. Consulta quins valors s’accepten en les pàgines de referència de cada propietat de MDN. Si el valor permès inclou <length-percentage>, pots utilitzar una longitud o un percentatge. Si el valor permès només inclou <length> no s’admet l’ús de percentatges.

Nombres

Hi ha valors que accepten nombres sense unitat. Un exemple de propietat que accepta un nombre sense unitat és la propietat opacity, que controla l’opacitat d’un element (el nivell de transparència). Aquesta propietat accepta un nombre entre el 0 (totalment transparent) i l’1 (totalment opac).

En l’exemple següent, canvia el valor opacity per diversos valors decimals entre el 0 i l’1 i observa com la caixa i el contingut es tornen més o menys opacs.

 

Nota: Si en CSS fas servir un nombre com a valor, no l’has de posar entre cometes.

Color

Hi ha moltes maneres d’especificar el color en CSS, i algunes s’han implementat més recentment que d’altres. El CSS pot utilitzar els mateixos valors de color per a qualsevol element, ja sigui per a especificar el color del text com el color del fons, o qualsevol altra cosa.

El sistema de colors estàndard disponible en els equips moderns és de 24 bits, que permet la visualització d’uns 16,7 milions de colors diferents mitjançant una combinació de diferents canals vermell, verd i blau amb 256 valors diferents per a cada canal (256 x 256 x 256 = 16.777.216). Observa algunes de les maneres com podem especificar colors amb el CSS.

Nota: En aquest tutorial analitzarem els mètodes habituals per a especificar el color que tenen una bona compatibilitat amb els navegadors. N’hi ha d’altres, que no tenen una bona compatibilitat amb els navegadors i són menys habituals.

Paraules clau per als colors

Molt sovint en els exemples de la nostra secció d’aprenentatge o en alguna altra pàgina de MDN veuràs que utilitzem paraules clau de colors, perquè són una manera senzilla i comprensible d’especificar un color. Hi ha moltes paraules clau, i algunes tenen noms força curiosos. En pots veure una llista completa a la pàgina dedicada al valor <color>.

Juga amb diferents valors de color en els exemples en viu que et presentem a continuació per a entendre més bé com funcionen.

Els valors RGB hexadecimals

El tipus de valor de color següent que probablement trobaràs més sovint són els codis hexadecimals. Cada valor hexadecimal consisteix en un símbol hashtag/coixinet (#) seguit de sis nombres hexadecimals, cadascun dels quals pot prendre un dels 16 valors que van del 0 a la f (que representa el 15), és a dir: 0123456789abcdef. Cada parell de valors representa un dels canals (vermell, verd i blau) i permet especificar qualsevol dels 256 valors disponibles per a cada un (16 x 16 = 256).

Aquests valors són una mica més complexos i menys fàcils d’entendre, però són molt més versàtils que les paraules clau: amb els valors hexadecimals pots representar qualsevol color que vulguis per a la teva paleta de colors.

 

Canvia un cop més els valors i observa com varien els colors.

Valors RGB i RGBA

El tercer sistema de què parlarem aquí és RGB. Un valor RGB és una funció rgb() que proporciona tres paràmetres que representen els valors dels canals vermell, verd i blau dels colors, igual que els valors hexadecimals. La diferència amb RGB és que els canals no estan representats per dos dígits hexadecimals, sinó per un nombre decimal entre 0 i 255, que sembla una mica més fàcil d’entendre.

Reescrivim el nostre darrer exemple adaptat amb l’ús de colors RGB:

 

També pots utilitzar colors RGBA: funcionen exactament igual que els colors RGB, de manera que pots utilitzar qualsevol valor RGB, però s’hi afegeix un quart valor que representa el canal alfa del color, que en controla l'opacitat. Si estableixes aquest valor a 0, el color és totalment transparent, mentre que 1 el fas totalment opac. Els valors que hi ha entremig proporcionen diferents nivells de transparència.

Nota: Entre establir un canal alfa per a un color o utilitzar la propietat {cssxref("opacity")}} que hem vist abans hi ha una diferència fonamental. Quan empres l'opacitat, l’element i tot el que té a l’interior són opacs, mentre que amb l’ús de colors RGBA, només es torna opac el color que especifiques.

En l'exemple següent hem afegit una imatge de fons al bloc que conté les nostres caixes de colors. A continuació, hem configurat les caixes perquè tinguin valors d'opacitat diferents: observa que el fons es veu més quan el valor del canal alfa és més petit.

Canvia els valors del canal alfa en aquest exemple i observa com això afecta la sortida del color.

Nota: En algun moment els navegadors moderns es van actualitzar perquè rgba() i rgb(), i també hsl() i hsla() (ho veurem més avall) fossin àlies purs els uns dels altres i es comportessin exactament igual. Així, per exemple, tant rgba() com rgb() accepten colors amb valors de canal alfa i sense. Prova de canviar en l'exemple anterior les funcions rgba() per rgb() i comprova si els colors encara funcionen. Tot i que és decisió teva la manera com aplicar estil, fer servir funcions diferents que separin les definicions dels colors transparents de les dels que no ho són proporciona una compatibilitat (una mica) més bona amb els navegadors i pot servir d’indicador visual de quins colors del teu codi estan definits amb transparència.

Els valors HSL i HSLA

Una mica menys de compatibilitat que RGB presenta el model de color HSL (no és compatible amb versions antigues d’Internet Explorer), que es va implementar després de molta insistència per part dels dissenyadors. En lloc dels valors vermell, verd i blau, la funció hsl() accepta valors de tonalitat, saturació i lluminositat, que distingeixen els 16,7 milions de colors, però d'una manera diferent:

  • Tonalitat: El to de base del color. Pren un valor entre el 0 i el 360, que representa un angle al voltant d'una roda de color.
  • Saturació: El nivell de saturació que presenta el color. Pren un valor entre el 0 i el 100%, en què al 0 no hi ha color (apareix com una ombra de gris) i al 100% la saturació del color és total.
  • Lluminositat: La claror i brillantor del color. Pren un valor entre el 0 i el 100%, en què al 0 no hi ha llum (apareix negre del tot) i al 100% la llum és total (apareix blanc del tot).

Podem adaptar l'exemple RGB amb colors HSL, d’aquesta manera:

 

De la mateixa manera que RGB té RGBA, HSL té un equivalent HSLA, que et proporciona la mateixa funció d’especificació del canal alfa. Ho mostrem a continuació canviant el nostre exemple RGBA adaptat amb colors HSLA.

 

Pots utilitzar qualsevol d'aquests valors de color en els teus projectes. En la majoria de casos és probable que et triïs una paleta de colors (i el mètode que escullis per a especificar el color), que faràs servir al llarg de tot el projecte. Pots fer combinacions de colors i barreges, però per coherència acostuma a ser millor si tot el teu projecte empra el mateix model de colors.

Imatges

El tipus de dada <image> utilitza valors permesos que són imatges. Poden ser tant fitxers d'imatge enllaçats des d'una funció url(), com degradats.

En l'exemple següent presentem una imatge i un degradat emprats com a valors de la propietat CSS background-image.

 

Nota: hi ha altres valors possibles per a <image>, però són més recents i encara tenen poca compatibilitat amb els navegadors. Si vols saber-ne més, dona una ullada a la pàgina que MDN dedica al tipus de dada <image>.

Posició

El tipus de dada <position> representa un conjunt de coordenades 2D que s’utilitzen per a posicionar un element, com ara una imatge de fons (amb background-position). Pot prendre paraules clau com top, left, bottom, right i center per a alinear els elements amb límits específics d’una caixa 2D, i també longituds, que representen desplaçaments respecte de les vores superior i esquerra de la caixa.

Un valor de posició típic consta de dos valors: el primer estableix la posició horitzontal, i el segon la vertical. Si només especifiques el valor per a un eix, l’altre utilitza center per defecte.

En l’exemple següent hem posicionat una imatge de fons a 40px de la part superior dreta del contenidor amb una paraula clau.

 

Juga amb aquests valors i observa com pots anar desplaçant la imatge.

Cadenes i identificadors

Al llarg dels exemples anteriors hem vist que es fan servir paraules clau com a valors (per exemple, les paraules clau de <color> com ara red, black, rebeccapurple i goldenrod). Aquestes paraules clau s’anomenen més precisament identificadors, i són valors especials que el CSS entén. Per tant, no s'escriuen entre cometes (és a dir, no es tracten com cadenes alfanumèriques).

En alguns casos en CSS s’utilitzen cadenes alfanumèriques, per exemple en especificar contingut generat. En aquests casos, aquest valor es posa entre cometes per a denotar que es tracta d’una cadena alfanumèrica. En l'exemple següent utilitzem paraules clau de color, que s’escriuen sense cometes, i una cadena de contingut generat, escrita entre cometes.

 

Funcions

L'últim tipus de valor que analitzarem és el grup de valors coneguts com a funcions. En programació, una funció és un bloc de codi reutilitzable que es pot executar diverses vegades per completar una tasca repetitiva amb un esforç mínim tant per part del desenvolupador com de l’ordinador. Les funcions normalment s’associen a idiomes com JavaScript, Python o C++, però també n’hi ha en CSS, com a valors de propietats. Ja hem vist funcions en acció en l’article sobre els colors: rgb(), hsl(), etc. El valor que retorna una imatge des d'un fitxer, url(), també és una funció.

Un valor que es comporta més com les funcions que pots trobar en un llenguatge de programació tradicional és la funció calc() de CSS. Aquesta funció et permet fer càlculs senzills dins del CSS. És útil sobretot quan vols calcular valors que no pots definir quan escrius el CSS del teu projecte perquè necessites que el navegador te’ls proporcioni en temps d'execució.

Per exemple, a continuació fem servir la funció calc() per a assignar a una caixa una amplada d’un 20% + 100px. El 20% es calcula a partir de l’amplada de l’element pare contenidor .wrapper, i canvia si en canvia l’amplada. Aquest càlcul no es pot fer prèviament perquè no sabem quin serà el 20% de l’element pare, de manera que demanem al navegador que ens ho calculi amb la funció calc().

Resum

Hem fet una passada ràpida pels tipus de valors i unitats més habituals amb què et pots trobar. Pots consultar tots els diferents tipus a la pàgina de referència Valors i unitats en CSS; molts d’ells els faràs servir a mesura que avances per aquests articles.

L’important és que recordis que cada propietat té una llista determinada de valors permesos, i que cada valor té una definició que explica quins en són els subvalors. Aleshores, pots consultar-ne les dades específiques aquí, a les pàgines d’MDN.

Per exemple, és útil saber que <image> també et permet crear un degradat de color, però potser no és obvi.

En aquest mòdul

  1. La cascada i l'herència
  2. Els selectors CSS
  3. El model de caixes
  4. Fons i vores
  5. El tractament del text en diverses direccions
  6. El desbordament dels continguts
  7. Valors i unitats
  8. Dimensionar elements amb el CSS
  9. Imatges, mèdia i elements de formulari
  10. Aplicar estil a les taules
  11. Depura el teu CSS
  12. Organitza el teu CSS