Secció 4: Posicionament CSS

4. Esquemes de posicionament

4.5. Posicionament relatiu

El concepte de posicionament relatiu no és esencialment difícil, però sovint és objecte de confusions i malentesos. En aquest capítol intentaré explicar-ne el funcionament i les situacions en què s'utilitza normalment.

Els elements posicionats relativament es comporten d'acord al fluxe normal. Aquesta afirmació és l'essència del posicionament relatiu, i val la pena aturar-s'hi una mica.

Els elements HTML es comporten per defecte segons el fluxe normal (position:static). Si els canviem el valor de position per relative... continuen exactament igual! No canvia el seu esquema de posicionament i per tant tampoc ho fa la seva disposició a la pàgina.

Aleshores, per a què serveix aquest valor de position? La clau és que tot i seguir el fluxe normal, l'element estarà posicionat. I això implica que establirà el bloc contenidor per als seus fills posicionats (ho hem vist a 4.3 'Posicionament absolut'). Aquest fet ens permet combinar el posicionament absolut amb el fluxe normal, cosa que dona una potència extra als layouts basats en CSS. El següent exemple il·lustra aquest fenòmen.

Exemple 1

Imaginem que tenim una pàgina web amb un curs de CSS ;-). A determinats punts de l'explicació es vol insertar uns DIVs aclaridors d'alguns aspectes importants. En aquest exemple els hem assignat la classe 'pos-rel'. Però a més volem que dins d'aquests DIVs, a la cantonada superior dreta, hi hagi un llistat de links amb més informació sobre l'aclariment, que inclourem en un DIV de classe 'nota'. Com ho faríem amb CSS?

.pos-rel {
position: relative;
padding: 10px 40% 10px 10px;
border: 1px solid #333;
background-color: #dbe1fb; }

.pos-rel .nota {
position: absolute;
width: 30%;
right: 5px; top: 5px;
padding: 1em;
border: 1px solid #333;
background-color: #fff; }

Nota: la segona sentència afecta als elements de classe 'nota' que siguin descendents d'un element de classe 'pos-rel'. Ho vàrem veure al capítol de selectors contextuals.

El resultat és el següent:

[Paràgraf P1] Aquest exemple il·lustra el comportament dels elements posicionats relativament. Recordem que l'ús més habitual del posicionament relatiu és establir el bloc contenidor del seus descendents posicionats de forma absoluta.
[DIV.pos-rel] Aquest DIV està posicionat relativament. Això implica que la seva disposició a la pàgina segueix el fluxe normal, i per tant es comporta com si no estés posicionat. Però en cavi estableix el bloc contenidor dels seus descendents posicionats, en aquest cas el DIV de classe 'nota'. Aquest es comporta com ho fan tots els elements amb posició absoluta: amb un desplaçament definit per 'top' i 'right' respecte el seu bloc contenidor, el qual l'estableix el seu element avantpassat posicionat més proper (el DIV de classe 'pos-rel'), i que correspon concretament a la seva àrea padding.
[DIV.nota] Un llistat de links:
Link 1
Link 2
Link 3
[Paràgraf P2] Com esperàvem, aquest paràgraf es situa a continuació del DIV de classe 'pos-rel', ja que els elements posicionats relativament es comporten d'acord al fluxe normal. Però gràcies al posicionament relatiu podem establir amb precisió la posició dels seus descendents posicionats absolutament.

Si ets usuari d'Internet Explorer, veuràs que els resultats no són el què esperàvem. La posicio del DIV de classe 'nota' no es correcta (IE no estableix correctament el seu bloc contenidor!). I el padding dret del DIV de classe 'pos-rel' tampoc no es mesura de forma correcta (és massa gran). En canvi el usuaris de Mozilla, per exemple, veuran l'exemple correctament. Aquestes incompatibilitats es poden resoldre de diverses maneres, però no és l'objectiu d'aquest curs. Idealment els responsables d'IE s'encarregaran d'adequar futures versions del navegador als estàndards del W3C, del qual són paradoxalment membres. En fi...

Pregunta

Què passaria si la classe 'pos-rel' tingués posició absoluta? I si no en tingués?

Solució >>

Em permeto insistir: l'ús més habitual del posicionament relatiu és actuar com a contenidor d'elements posicionats absolutament.

Posicionament relatiu i top, right, bottom, left

He dit abans que posicionar un element relativament només serveix per establir el bloc contenidor dels seus descendents posicionats i no afecta a la disposició de l'element en si. Això no és estrictament cert quan s'utilitzen les propietats top, right, bottom, left.

L'efecte d'aquestes propietats és el mateix que en el cas d'elements posicionats absolutament: estableixen el desplaçament de l'element respecte el seu bloc contenidor. Ara bé, així com en el posicionament absolut l'ús d'aquestes propietats és fonamental, en el posicionament relatiu rarement s'utilitzen.

Per entendre quin és el resultat d'utilitzar-les en el posicionament relatiu pensa que l'element es situa primer segons el fluxe normal i llavors es desplaça d'aquesta posició d'acord amb els valors de top, right, bottom, left, sense que es moguin els elements anterior i posterior.

Aquest no és normalment un efecte útil però pot ser-ho en algun cas, i sobretot val la pena entendre'l bé per no embolicar-se quan es fan layouts complexes.

Insisteixo, rarament usaràs top, right, bottom, left en elements posicionats relativament.

CSS en català
Darrera actualització: 11 de gener de 2004

© 2002-04, weC - Gonzalo Pérez de la Ossa
Contacte: wec@dense13.com

Valid XHTML 1.0! Valid CSS!