Avatar billede Slettet bruger
29. december 2009 - 18:19 Der er 8 kommentarer og
1 løsning

CSS positioning (Absolute, Relative & float)

Hej,

Jeg er igang med at få en bedre forståelse for hvordan CSS positioning virker primært med brug af properties som absolute, relative, float osv.

Jeg har lavet et mindre design med bokse men kan ikke helt få det som jeg gerne vil have. Jeg har følgende <div> bokse i min HTML kode:

<div id="main">

<div id="banner">Banner.</div>

<div id="navigation">The navigation.</div>

<div id="focusarea">Focusarea.</div>

<div id="focusarea2">Fokusarea2.</div>

<div class="clear"></div>

<div id="posts">Posts.</div>

</div>

Problemet ligger i at boksen "posts" ikke kommer til at ligge lige under boksen "Focusarea" hvis jeg har fyldt rigtig meget indhold i "Fokusarea2" boksen ved siden af. Er der meget indhold i "Fokusarea2" boksen bliver "posts" nemlig skubbet ned så bunden aligner med bunden af "Fokusarea2" boksen hvilket jeg ikke ønsker. Det skyldes formentlig den "clear" jeg har lagt ind for at få "posts" ned på næste linie som den jo også skal.

Jeg håber det er en mindre ting der skal rettes i CSS'en og jeg ikke skal ændre så meget. Jeg har prøvet at løse det ved at bruge position:absolute og position:relative men kan ikke rigtig få det til at funke. Håber det kan løses forholdsvist simpelt uden at der skal oprettes andre classes. Det er vigtigt at min CSS er kompatibel med de største browsere hvilken den er nu.

Min CSS ser således ud:

#main {
    margin: 20px auto;
    padding: 0;
    width: 1024px;
    border:3px solid gray;
    background-color:#fff;
    color:#000;}

#banner {
    margin:5px;
    padding:10px;
    width:993px;
    height:100px;
    border:0px;
    background-color:#333;
    color:#FFF;}

#navigation {
    margin:5px;
    padding:10px;
    width:993px;
    border:0px;
    background-color:#333;
    color:#FFF;}

#focusarea {
    float:left;
    margin:0px 5px;
    padding:10px;
    width:708px;
    height:200px;
    border:0px;
    background-color:#333;
    color:#FFF;}

#focusarea2 {
    float:left;
    margin:0px;
    padding:10px;
    width:260px;
    border:0px;
    background-color:#333;
    color:#FFF;}

.clear { /* A CSS class for the property */
  clear:both;}

#posts {
    margin:5px 5px;
    padding:10px;
    width:708px;
    border:0px;
    background-color:#333;
    color:#FFF;}
Avatar billede Slettet bruger
29. december 2009 - 18:59 #1
OBS: Det er desuden vigtigt at alt indhold holder sig inde i min "main" div som ligesom er rammen omkring hele sitet. Dvs. at baggrunden/main div udvider sig iogmed der bliver fyldt indhold i mine div containers.
Avatar billede Slettet bruger
29. december 2009 - 19:00 #2
Ku' man få et link til siden hvor fejlen opstår?
Det gør det en god del lettere at rette.
Avatar billede Slettet bruger
29. december 2009 - 20:02 #3
Self. :): http://creative.dk/CSS/index.html

Problemet er som jeg nævner "posts" boksen som ikke ligger sig lige under "Focusarea". Det er samtidig vigtigt at alle div containers forbliver inde i "main" div'en så "main" div'en udvider sig alt efter hvor meget indhold der er i de andre div'er. Main div'en er ligesom rammen omkring det hele. Håber du kan se løsningen og forslag til forbedringer er også velkommen så jeg forstår at positionere elementerne rigtigt.
Avatar billede Slettet bruger
29. december 2009 - 21:17 #4
Den letteste løsning er vist denne:

<div class="clear"></div> lægges nederst i #main og følgende CSS lægges ind i stylesheet'et:

#post {
    float: left;
}

#focusarea2 {
    float: right;
    margin-right: 5px;
    margin-bottom: 5px;
}
Avatar billede Slettet bruger
29. december 2009 - 22:53 #5
Takker det virkede. :) Kan jeg få lidt forklaring på et par områder:
- Jeg kan så forstå at min placering af "clear" skulle være til sidst? Men hvad er årsagen til dette og hvornår bruger man som regel "clear"? (kan ikke helt se logikken).
- Hvordan kan det være at "float: right" virker på focusarea2 men ikke "float: left"?
Avatar billede Slettet bruger
30. december 2009 - 18:47 #6
Jeg sad lang tid og prøvede at skrive, hvad float og clear var. Det lykkedes ikke. Så prøvede jeg at tegne det. Heller ikke det magtede jeg. Så her kommer i stedet en lidt mere interaktiv forklaring:

http://jacobbundgaard.dk/misc/eksperten/floatnclear.html

Du skal være velkommen til at kigge i koden, men brug ikke noget over body-tagget. Det er ret løst kodet.
Avatar billede Slettet bruger
30. december 2009 - 23:56 #7
Jeg takker mange gange. Det er et rigtig godt eksempel du har lavet der til at forklare clear og float og har gemt den til det sidder helt fast. :) En ting jeg bemærkede er at du bruger "clear:both" hver gang. Man kan f.eks. også vælge "clear:left".

Så hvis jeg forstår det rigtigt så i tilfælde af jeg har 3 kolonner og jeg har et element i den miderste- og højre kolonne og anvender clear:left på det miderste element, så kan der ikke ligge noget element i venstrekolonnen helt til venstre (det vil blive skubbet ned på næste linie)?

Opretter du svar sender jeg points.
Avatar billede Slettet bruger
31. december 2009 - 01:37 #8
Jeg er glad for at det hjalp dig :)

Ja, det er fyldstændig korrekt. Clear kan bruges med 'both', 'left' og 'right', og i dit eksempel vil elementet i venstre kolonne ganske rigtigt blive skubbet ned på næste linje.
Avatar billede Slettet bruger
31. december 2009 - 16:46 #9
Takker! Og godt nytår! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester