Logotyp för Björns studiewebb

Egenskaper - Positionering (CSS3)

Innehåll

090501: Denna webbsida är under utveckling!

Egenskaper som behandlas på denna webbsida:

  • float: left | right | none
  • clear: none | left | right| both
  • position: static | relative | absolute | fixed

Positionering för mig har alltid varit något krångligt, men det kan bero på min mycket begränsade designförmåga. :-) På denna webbsida kommer jag försöka ge enkla exempel till oss "designdumma" så att vi kan göra våra webbsidor lite snyggare (och användbara?).

Inledning

Vid positionering är det viktigt att bli "kompis" med div-taggen! :-) div-taggen används för att skapa block - block som sen kan positioneras. Positioneringen kan vara absolut (t.ex. övre högra hörnet) eller relativ ("flytande"). (Tittar man i W3C:s standard så finns det en tredje: standard, d.v.s. normalt flöde. :-)

I exempel finns fyra fyrkantiga block (med olika färg) som har "flutits" till vänster - för det fjärde blocket har även angivits att inget får "flytas" till vänster om det (d.v.s. att det ska börja på ny rad).

Till början på sida

Relativ positionering

Relativ positionering bygger på att element "flyts" och positioneras relativt andra element (så som de färgade blocken ovan). Detta är mycket användbart för t.ex. bilder och små noteringar (som nästa stycke, i ruta nere till höger).

Detta är t.ex. en notering som "flutits" till höger.

För relativ positionering används följande egenskaper:

  • float - anger hur element ska "flytas"
  • clear - anger hur andra element får "flytas" relativt aktuellt element

Grundläggande

För att relativ positionering ska fungera så måste element (oftast) ha en bredd, men ibland även en höjd. Detta beror (som nämnt på sidan Boxar) på principen expand to fit, d.v.s. att element expanderar till fulla bredden (och ev. höjden) av sitt omslutande element (detta stycke anpassar t.ex. sin bredd till den vita ytan i den inre röda kantlinjen). (Motsatsen är shrink to fit som anpassar omslutande elements bredd, eller höjd, till aktuellt element, så som celler i tabeller.) För att ange bredd och höjd på element så används egenskaperna width resp. height.

Detta är t.ex. en notering som "flutits" till höger.

För att skapa noteringen uppe till höger används följande stilmall (endast de två första raderna har med positionering att göra, men här redovisas allt för helhetens skull :-).

float: right; /* Flyt till hoger */
width: 100px; /* Ange bredd - ett maste */
margin: 0px 0px 10px 10px;
border: 1px solid blue;
padding: 5px;
color: blue;
background: #ccc;
font-size: 90%;

Den observante ser att den andra noteringen inte verkar ha flutits, men det har den. Men för att stycket efter inte ska flyta runt det så används egenskapen clear i stycket, enligt nedanstående exempel.

clear: both;

Detta är t.ex. en notering som "flutits" till höger.

Så egenskapen clear används alltså för att aktuellt element ska börja på en ny rad efter alla eventuella flutna block. Genom att byta ut värdet both mot left eller right så kan man istället tillåta eventuella flutna element till höger resp. vänster.
(Jo, jag skrev rätt - detta stycke använder stilen clear: left; och flyter runt noteringen till höger. :-)

Använda i design av webbsidor

Relativ postitionering är mycket användbart för att bygga upp webbsidors design (så som den du tittar på nu :-). Principen (som jag använder i.a.f.) bygger på att allt placeras i block (DIV-taggar med ID-attribut) och att dessa block sen flyts till vänster, om flera kolumner önskas (så som meny och innehåll i denna webbsida).

Nedan visa koden för exempel på grundläggande block i webbsida med tre kolumner samt med sidhuvud och sidfot. Ytterst (först) finns en DIV-tagg för hela webbsidans innehåll (id="sida"), vilken används för att ange bredden på webbsidans innehåll, i vilken finns webbsidans tre delar (sidhuvud, innehall och sidfot). I innehall finns sen tre DIV-taggar för kolumner (kolumn1, kolumn2 och kolumn3), vilka kommer att flytas till vänster m.h.a. stilmall.

<div id="sida">
  <div id="sidhuvud">
    ...
  </div>
  <div id="innehall">
    <div id="kolumn1">
    ...
    </div>
    <div id="kolumn2">
    ...
    </div>
    <div id="kolumn3">
    ...
    </div>
  </div>
  <div id="sidfot">
    ...
  </div>
</div>

Stilmallar för ovanstående (X)HTML-kod visas nedan (och är ganska lång, men inte så komplicerad eftersom samma sak upprepas :-). Här är en kort genomgång av vad stilarna gör.

  • body - ange övergripande egenskaper, t.ex. för- och bakgrundsfärger samt typsnitt.
  • sida - ange bredd för sidans hela innehåll samt marginaler (om vill centrera).
  • sidhuvud - inget speciellt... (ändra färg, m.m. om så önskas).
  • kolumn1 - ange bredd samt flyt till vänster.
  • kolumn2 - ange bredd samt flyt till vänster.
  • kolumn3 - ange bredd samt flyt till vänster.
  • sidfot - ange att inget får flyta varken till vänster eller höger.
body {
  color: black;
  background-color: yellow;
  font-family: Arial, Helvetica, sans-serif;
}

#sida {
  width: 800px;
  margin: 0px auto;
  color: black;
  background-color: white;
}

#sidhuvud {
  color: white;
  background-color: maroon;
}

#kolumn1 {
  width: 200px;
  float: left;
  color: white;
  background-color: blue;
}

#kolumn2 {
  width: 380px;
  float: left;
  color: black;
  background-color: white;
}

#kolumn3 {
  width: 200px;
  float: left;
  color: white;
  background-color: teal;
}

#sidfot {
  clear: both;
  color: black;
  background-color: cyan;
  text-align: center;
}

Glöm inte kantlinjen!

Det är viktigt att komma ihåg att alla block har marginal, kantlinje och utfyllnad, d.v.s. när vi räknar ut hur breda element ska vara så måste vi ta hänsyn till bredden på alla dessa tre. I exempel ovan (4e 1.1) så kan vi se att jag inte tagit hänsyn till detta utan det finns en vit yta mellan tredje kolumnen och höger marginal.

Till början på sida

Absolut positionering

Absolut positionering anges med egenskapen position och sker på något av följande sätt:

  • enligt normala flödet ("standard"; position: static)
  • relativ sin position i det normala flöde (position: relative) - efterföljande element, i normala flödet, positioneras som om elementet fanns i sin ursprungliga position.
  • absolut sitt omslutande element (position: absolute) - efterföljande element, i normala flödet, positioneras som om elementet inte finns.
  • fixerat realtivt någon "referenspunkt" (position: fixed) - elementet finns på samma position oavsett hur besökare skrollar.

Element positioineras genom att ange avståndet från två av elementets kanter relativt något annat element (eller elementets position i flödet...).

Förrvirrad? Då är du inte ensam! :-) Denna typ av positionering kräver att man håller tungan rätt i mun.

En absolut positionerad notering.

Stycket ovan (som visas till vänster) har positionerats (och formaterats) med nedanstående egenskaper. (Detta stycke har fått en vänster marginal på 110 pixlar för att det inte ska visas under det positionerade stycket. Och detta exempel visar på hur lite jag kan om detta ämne. :-)

position: absolute;
margin-left: auto; 
margin-right: 10px; 
width: 100px; 
border: 1px solid blue;

Till början på sida

Referenser