problemer med højder i CSS

Tags:    css

Hej

Jeg vil gerne have lidt hjælp og forklaring til, hvorfor mine <div></div> ikke vil tage height efter indholdet på min side

Fold kodeboks ind/udCSS kode 


Problemerne jeg har er med: #container og #bund

Problemet med #container er at den ikke vil tage højde efter indholdet i den

Problemet med #bund er at den ikke vil tage højde efter baggrundsbilledet.

Jeg synes selv selv det hele ser rigtigt ud, men jeg MÅ have overset noget åbenlyst !



7 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Dit problem er et meget almindeligt problem i hjemmeside verdenen. Det kan løses meget simpelt ved at tilføje et element med "clear:both;" efter alle dine elementer som flyder til venstre (eller til højre). Normalt tænker jeg på dette som en bjælke som holder siden nede.

Lad os sige din kode så sådan her ud:
Fold kodeboks ind/udHTML kode 


Så tilføjer du bare en div efter det sidste kasse-element, som har stylen clear:both; altså sådan her:
Fold kodeboks ind/udHTML kode 


Hvis jeg forstod problemet korrekt, kan det løses på denne måde i hvert fald :P.



Den med baggrundbilledet er fordi at det faktisk reelt set ikke er noget "indhold", fordi det ikke er et image, men et baggrundsbillede. Derfor er der ikke noget indhold i din bund som får den til at fylde det som baggrundsbilledet.
Sæt derfor en højde på.

Din #container
har du vel smidt en masse indhold ind i?



Den med baggrundbilledet er fordi at det faktisk reelt set ikke er noget "indhold", fordi det ikke er et image, men et baggrundsbillede. Derfor er der ikke noget indhold i din bund som får den til at fylde det som baggrundsbilledet.
Sæt derfor en højde på.

Din #container
har du vel smidt en masse indhold ind i?


Ja, den indeholder faktisk alle alt indhold på siden, men den kan åbenbart ikke "se" de and <div>'er !

Fold kodeboks ind/udHTML kode 


Jeg mener også at huske, at alt virkede efter hensigten indtil jeg begyndte på at lave #indhold og #bund

Jeg har lavet en højde til #bund (efter din anbefaling) og nu kan hele billedet ses, men der er stadig problemer med #container




Har du overvejet at det er på grund af dine float:left? Din container har ikke float på, og er derfor ikke helt renderet på samme måde.



Indlæg senest redigeret d. 23.08.2013 09:16 af Bruger #17215
Har du overvejet at det er på grund af dine float:left? Din container har ikke float på, og er derfor ikke helt renderet på samme måde.


Hej

Da, jeg læste dit svar var min første tanke; hvis jeg sætter en float: left; på #container, så vil den jo flyde til venstre ! ! ! - hvilket den jo ikke skal gøre, da den jo er centreret vertikalt på siden ved brug af margin-left: auto; og margin-right: auto;

Jeg prøvede dog alligevel, at gøre som du skrev og resultatet var præcis som jeg forudså: #container flød til venstre og samtidig, så foldede den sig ud.

Da jeg læste dit forrige indlæg:

Den med baggrundbilledet er fordi at det faktisk reelt set ikke er noget "indhold", fordi det ikke er et image, men et baggrundsbillede. Derfor er der ikke noget indhold i din bund som får den til at fylde det som baggrundsbilledet.
Sæt derfor en højde på.


gik jeg ind og sov på det alt imens jeg grublede over en løsning. Jeg kom frem til, at jeg ville hente billedet via index.html (så er det vel ikke et baggrundsbillede mere ?) og på den måde skabe noget indhold i #bund.

Jeg gjorde som beskrevet, men resultatet er stadig det samme: <div>'en er stadig klappet sammen !

Da, mit forsøg med at hente billedet via index.html heller ikke resulterede i det ønskede resultat, så er jeg selv helt løbet tør for idéer.



Problemet med dine floats er at så snart du sætter dem til at have float så "hopper de ud af" #container div fordi de ikke længere renderes sammen med de "normale" div elementer på siden.

Det er fordi float-elementer er der ikke taget hensyn til når der beregnes højde for de overliggende elementer (parents), hvis det overliggende element's overflow er sat til visible. Default er overflow altid sat til visible, medmindre du har udspecificeret andet.
Dette er de regler der er gældende fra CSS2 specifikationen.

Prøv at sætte "overflow: auto" (bedste løsning) eller "overflow: hidden" på din #container. Så tages indholdet med som en del af beregning af højden.
Alternativt kan du selv sætte den til noget fra start (height, min-height, max-height), men dette vil ikke have en betydning hvis indholdet ændrer sig.

Den før omtalte (bedste løsning) kan dog have problemer i IE7, og kan derfor have behov for at benytte løsningen der kommer herefter.

Eventuelt læs op på clear: both fordi dette er en udfordring du vil støde på når du arbejder med float, og derfor skal kende omtalte løsning.

Denne løsning vil også kunne hjælpe dig ved at du indsætter en "spacer" efter dine float elementer.
<div class="spacer" style="clear: both;"></div>
Problemet med denne er den har ikke nogen semantisk værdi ud over at være en css-hack til dit layout.
Dette kan faktisk erstattes af style="display: inline-block".

Mener faktisk også du kan løse det hvis du sætter #container til "position: absolute", eller "position: fixed", men kan ikke præcist huske det.

Håber det løser det for dig :)



Indlæg senest redigeret d. 23.08.2013 14:33 af Bruger #17215
Dit problem er et meget almindeligt problem i hjemmeside verdenen. Det kan løses meget simpelt ved at tilføje et element med "clear:both;" efter alle dine elementer som flyder til venstre (eller til højre). Normalt tænker jeg på dette som en bjælke som holder siden nede.

Lad os sige din kode så sådan her ud:
Fold kodeboks ind/udHTML kode 


Så tilføjer du bare en div efter det sidste kasse-element, som har stylen clear:both; altså sådan her:
Fold kodeboks ind/udHTML kode 


Hvis jeg forstod problemet korrekt, kan det løses på denne måde i hvert fald :P.

Hej Emil

Tak for din løsning - den virker jo !

Jeg fornemmer, at dit forslag til løsning af problemet, sikkert var din første indskydelse (ja, det ved jeg ikke en sk!d om det rent faktisk forholder sig sådan !) og derfor vil jeg gerne spørge dig om der måske var en anden løsning ?

Lad os nu sige at jeg havde til opgave, at re-designe udseendet af en eksisterende webside, men ikke måtte tilføje nyt HTML til websiden, så ville din løsning ikke være gangbar !

Jeg undre mig også over, at problemet tilsyneladende kun opstår når #bund er inkluderet - hvis jeg disabler den, så klapper #container <div>'en ikke sammen.

Hvilket for mig til at formode, at fejlen må ligge hos den spade/klovn/CSS-coder wanna be, som sidder foran skærm og tastatur (dvs. mig :$ )



t