Introducció als Fulls d'Estil (CSS)

Introducció

Ja a la versió 4.0 de l'HTML es va començar a separar l'estructura d'un document del seu aspecte. L'HTML es reservava pel que s'havia dissenyat en un principi, per l'estructura, i per l'aspecte es crea un nou "llenguatge": Els Fulls d'Estil (CSS: Cascading Style Sheets). Tot i que els navegadors no complien amb l'estàndard complert, molt aviat es van veure els avantatges de fer servir fulls d'estil: Més control sobre posició, tipus de lletra, colors, imatges, ... que mai; recollir en un sol lloc el format i aspecte de tot un conjunt de pàgines web, compatibilitat fàcil entre diferents navegadors, codi més senzill i pàgines més petites (i, per tant, més ràpides de descarregar).

En aquest document es vol presentar aquest llenguatge, sense pretendre ser un tractat complert sobre el tema. Com molts altres temes en l'àmbit informàtic, s'aprenen fent-los servir. Els fulls d'estil són una eina potentíssima. Els límits són més qüestió de la imaginació dels que els fan servir.

HTML per fulls d'estil

Pel tema dels fulls d'estil s'utilitzen especialment dues etiquetes HTML (a més de les que es fan servir normalment) i dos atributs. Les etiquetes son div i span. Totes dues serveixen per marcar des de on i fins a on va un fragment de document. Juntament amb els atributs class i id, ens permetran més tard definir l'aspecte i format d'aquest fragment.

Per exemple:

<div id="menu">
  <a href="index.html">Presentació</a><br />
  <a href="aficions.html">Aficions</a><br />
  <a href="amics.html">Amics</a><br />
  <a href="enllacos.html">Enllaços</a><br />
</div>

Després podem definir l'aspecte d'aquest fragment així:

#menu {
  border: thin solid red;
  color: maroon;
  background-color: #ADD8E6;
}
amb el que fariem que el "menu" tingués unes vores vermelles, text marró i fons blau clar.

A la pràctica, amb els fulls d'estil no fa falta gairebé cap altre atribut d'HTML que class i id. Només aquells atributs obligatoris a certes etiquetes (com src a img o href a les etiquetes a) o aquells que vulguem posar per que els navegadors que no entenen els fulls d'estil presentin la informació adequadament (com per exemple l'atribut border d'una table).

Normalment l'etiqueta div serveix per marcar blocs i span per marcar fragments continus. Els blocs tenen una amplada, unes vores, uns marges, ... mentre que els fragments continus formen part d'un flux de dades. Altres exemples d'etiquetes de bloc son h1, p i table. Exemples d'etiquetes continues són strong, a, code, ... Tot i que amb fulls d'estil es pot canviar el comportament d'aquestes etiquetes.

On posar els estils

El primer lloc on es poden col·locar atributs d'estil es dins una mateixa etiqueta HTML, amb l'atribut HTML style.

Per exemple:

<h1 style="color: darkblue; width: 100%;">Introducció als Fulls d'Estil (CSS)</h1>

L'inconvenient d'aquesta col·locació és que ni el codi és senzill, ni separem gaire estructura de aspecte. En alguns casos no hi ha més remei que posar els estils a un atribut style, però en general, no és aconsellable fer-ho.

Una altra possibilitat és posar-ho a una etiqueta style dins el head del document HTML.

Per exemple:

<style>
  h1 {
    color: darkblue; 
    width: 100%;
  }
</style>

Aquesta col·locació té l'avantatge de mantenir tots els atributs d'estil a un mateix lloc del document. El codi HTML és molt més net i l'estil és fàcil de modificar sense haver d'anar a l'HTML. El problema es que si volem el mateix estil a més d'una pàgina, hauríem de mantenir una etiqueta style a cada pàgina HTML, i modificar-les una per una.

La millor manera de definir un full d'estil és a un fitxer apart, per exemple anomenant-lo elmeu.css i amb aquest contingut:

h1 {
  color: darkblue; 
  width: 100%;
}
#menu {
  border: thin solid red;
  color: maroon;
  background-color: #ADD8E6;
}

Per que el navegador sàpiga que ha d'aplicar l'estil a la pàgina, hem d'incloure aquesta etiqueta al head de la pàgina:

<link rel="stylesheet" href="elmeu.css" type="text/css">

Aquesta última és la col·locació recomanada, ja que és la que ens permet treure més profit dels fulls d'estil.

Definint un estil

Al full d'estil, podem definir l'aspecte d'una etiqueta:

h1 {
  color: darkblue; 
  width: 100%;
}

L'aspecte d'un fragment amb un determinat nom:

#menu {
  border: thin solid red;
  color: maroon;
  background-color: #ADD8E6;
}

L'aspecte d'un fragment d'un determinat tipus (per exemple, quan fem servir class="cita"):

.cita {
  font-style: italic;
  margin-left: 10%;
}

També podem definir un atribut per a més d'una etiqueta al mateix temps:

body, td, th {
  font-family: arial, sans-serif;
}

O l'aspecte d'una etiqueta segons el seu context (per exemple, un enllaç dins el fragment menu):

#menu a {
  text-decoration: none;
  font-weight: bold;
}

Per últim, hi ha un tipus de atribut que es diu pseudo-class, dels quals ara mateix els navegadors només entenen uns quants (el més utilitzat, :hover pels enllaços:

a {
  color: blue;
  text-decoration: none;
}
a:hover {
  text-decoration: underline;
}

Unitats

A molts atributs CSS hem d'especificar quantitats. Aquestes quantitats de vegades fan referència a la mida de la lletra, a la mida de la pàgina o a una mida exacta, absoluta. La següent taula recull els diferents tipus de dades que ens podem trobar als fulls d'estil.

Tipus de dada Significat Exemple
Longitut em amplada d'una "m" margin-left: 1.5em
ex amplada d'una "x" padding: 2ex
px píxel font-size: 20px
in polzada (2,54 cm) margin: 0.25in
cm centímetre margin: 2.5cm 3cm
mm milímetre margin: 25mm
pt punt (com a les mides de lletra) font-size: 12pt
pc pica (una altra mida de lletra) font-size: 18pc
Percentatge % respecte al bloc on es trobi l'etiqueta font-size: 200%
Color #RGB components vermell, vert i blau del color en hexadecimal i de 0 a 15 color: #FE0
#RRGGBB components vermell, vert i blau del color en hexadecimal i de 0 a 255 color: #F7E403
(R,G,B) components vermell, vert i blau del color en decimal i de 0 a 255 color: (200, 150, 25)
(R%,G%,B%) components vermell, vert i blau del color en percentatge color: (100%, 45%, 5%)
color nom predefinit del color color: darkblue
(URL) URL on trobar el fitxer list-item-image: url(imatges/boleta.gif)

El model de capsa

Els blocs a una pàgina web tenen marges (margin), vores (border) i farcit (padding) per tots quatre costats: a dalt (top), dreta (right), a baix (bottom) i esquerra (left). Això pot ser una mica confós al principi. Aquesta imatge il·lustra què és cada cosa:
image

El contingut (content) és el que hi posem dins el bloc. Al voltant té el padding, a continuació les vores i finalment els marges. Si definim un color de fons, aquest només arribarà fins les vores.

Recull de propietats CSS

En aquest apartat es llista la majoria d'atributs definits a la versió 1 de les CSS (CSS1). Hi ha una segona versió que encara no suporten completament els navegadors (CSS2), de la qual s'inclouen també alguns; i hi ha una versió 3 (CSS3) en desenvolupament.

Atributs de tipus de lletra

Atribut Valors Exemple
font-family nom de tipus de lletra
serif
sans-serif
monospaced
font-family: verdana, arial, sans-serif
font-style normal
italic
oblique
font-style: italic
font-variant normal
small-caps
font-variant: small-caps
font-weight normal
bold
bolder
lighter
font-weight: bold
font-size mida
percentatge
larger
smaller
font-size: 200%

Atributs de color i fons

Atribut Valors Exemple
color color color: #FFFFFF
background-color color
transparent
color: #CC0
background-image URL background-image: url(imatges/llibreta.gif)
background-repeat repeat
repeat-x
repeat-y
no-repeat
background-repeat: no-repeat
background-attachment scroll
fixed
background-attachment: fixed
background-position mida
percentatge
top
center
bottom
left
right
background-position: center

Atributs de text

Atribut Valors Exemple
word-spacing mida word-spacing: 2em
letter-spacing mida letter-spacing: 0.1em
text-decoration none
underline
overline
line-through
text-decoration: underline
vertical-align top
middle
bottom
vertical-align: middle
text-transform capitalize
uppercase
lowercase
text-transform: capitalize
text-align left
right
center
justify
text-align: justify
text-indent mida
percentatge
text-indent: 1em
line-height número
mida
percentatge
line-height: 1.5

Atributs de capsa/bloc

Atribut Valors Exemple
margin
margin-top
margin-right
margin-bottom
margin-left
mida
percentatge
margin-left: 10%
margin: 1in 1.5in 1in 2in
padding
padding-top
padding-right
padding-bottom
padding-left
mida
percentatge
padding-bottom: 8px
padding: 1em 2 em
border-width
border-width-top
border-width-right
border-width-bottom
border-width-left
mida
thin
medium
thick
border-width-left: 1px
border: thick
border-color color border-color: (100%,50%,0%)
border-style none
dotted
dashed
solid
double
groove
ridge
inset
outset
border-style: dashed
width mida
percentatge
width: 80%
height mida height: 100px
float left
right
float: right
clear left
right
both
clear: both

Atributs de classificació

Atribut Valors Exemple
display block
inline
list-item
display: block
white-space normal
pre
nowrap
white-space: nowrap
list-style-type disc
circle
square
decimal
lower-roman
upper-roman
lower-alpha
upper-alpha
none
list-style-type: decimal
list-style-image URL list-style-image: url(imatges/boleta.gif)
list-style-position inside
outside
list-style-position: inside

Pseudo-classes

Pseudo-class Exemple
a:link
a:active
a:visited
a:hover
a:hover {text-weight: bold}
:first-line p:first-line {margin-left: 1em}
:first-letter p:first-letter {font-size:200%}

Aquí no hi són tots els atributs possibles, però si la majoria dels que mai utilitzaràs. Experimenta i pràctica i dominaràs el tema dels fulls d'estil!

Referències