Søger du en specifik kategori?

 



Oprettet ons. d. 14. juli 2010 kl. 11:31

FrederikBache
FrederikBache (5.251 point)
webvaerk.dk
Guidens karaktér
1
2
3
4
5

100% højde med CSS i alle browsere

I denne guide vil jeg tage fat i en klassiker, men ikke desto mindre et problem, som mange stadig kæmper med: at få et element til at have 100% højde.
Er du utålmodig får du her løsningen med det samme (demo):


html, body{
    height:100%;
    padding:0;
    margin:0;
}

div.fullheight{
    height:100%; /* For IE6 */
    min-height:100%; /* For andre browsere */
}


Til de nysgerrige vil jeg dog gerne kigge på de grundlæggende regler om højde og bredde, der gør at dette virker som det gør.

Box-modellen
Første skridt på vejen til fuld forståelse af højde og bredde i browsere kommer med forståelse af box-modellen. Box-modellen opstiller regler for bredde, padding, margin og borders for et block-element.

http://webvaerk.dk/wp-content/uploads/2010/05/Screen-shot-2010-05-24-at-08.00.59.png

Box-modellen illustrerer at et block-level element fylder ligeså meget som:

margin+padding+borders+width = bredde
margin+padding+borders+height = højden

Sættes et elements bredde derfor til 300px og padding til 10px (på hver side) vil elementet fylde 320px i bredden.

Procentvis bredde og højde
Et andet vigtigt punkt er hvordan procentvise bredder og højder opfører sig. Procenterne henviser ikke til siden, som man måske kunne tro, men henviser til bredden/højden på det omsluttende element. Dvs. har det omsluttende element height=300px, så vil height=50% være 150px.

Det omsluttende element er det "nærmeste" block-element der omslutter elementet.


<html>
  <body>
    <div>
      <p>...</p>
    </div>
  </body>
</html>


Således er p-taggets omsluttende element div-elementet. Dettes omsluttende element er body-elementet, osv.

Fuld bredde
Block-elementer vil helt automatisk fylde ligeså meget i bredden, som det element der omslutter den. Således gælder:

<em>margin+padding+borders+width = omsluttende elements width</em>

Det betyder at block-element der er omsluttet af body, automatisk vil fylde hele body-elementets width. Dvs. ønsker du et element skal fylde hele browserens bredde, skal margin, padding og border på body elementet sættes til 0.


body {
  margin:0;
  padding:0;
}


Fuld højde
Højde opfører sig anderledes end bredde. Hvor bredde automatisk tilpasser sig til sit omsluttende element, tilpasser højde sig til elementets eget indhold. Således er et block-element aldrig højere end sit indhold, medmindre andet er angivet.

Html-elementet vil således aldrig være højere end body-elementet. Body-elementet vil ikke være højere end indholdet på siden. Det er derfor du ikke kan sætte et elements højde til 100%, ved at skrive height:100%, fordi du på denne måde sætter højden på elementet til det samme som body's højde.

Løsningen er derfor først at sikre at html-elementer fylder hele højden af browseren. Dette gøres således:


html {
  height:100%;
}


Dette vil virke, da html-elementets omsluttende element fylder hele højden af browseren. Derefter kan body-elementet sættes til samme højde:


body {
  height:100%;
}


Dermed er body-elementet ligeså højt som browseren, og vi kan nu give vores block-elementer fuld højde.


div.fullheight {
  height:100%;
}


Det eneste vi nu mangler at tage højde for, er situationen, hvor indholdet i div.fullheight fylder så meget at elementet ikke er højt nok. I dette tilfælde ønskes det at en scrollbar vises.

Dette løses med CSS-attributten min-height. Min-height definerer som navnet antyder en mindste-højde. Dvs fylder indholdet mere end min-height, vokser boksen bare. Min-height overskriver desuden height, hvis denne er sat.

Men ak, min-height virker ikke i IE6, men vi er heldige. Height virker nemlig i IE6, fuldstændig som min-height virker i andre browsere. Så løsningen på alle vores kvaler er således:


html, body{
    height:100%;
    padding:0;
    margin:0;
}

div.fullheight{
    height:100%; /* For IE6 */
    min-height:100%; /* For andre browsere */
}


Og på denne måde endte vi ved starten.

Demo
Du kan prøve det hele i denne demo

Skrevet ons. d. 14. juli 2010 kl. 22:08| #1

Synes det er en fin guide og det giver selvfølgelig et umiddelbart resultat - men der hvor jeg synes problemet oftest opstår er når man forsøger at implementere det i noget praktisk - eksempelvis mellem en header og/eller footer blok; i sin nuværende form, vil guiden således skubbe footer/fullheight blokken ned under det aktuelle view fordi header/footer højden tillægges fullheigt blokken.
Hvis du kunne supplere med et eksempel mere, hvor en 100% høj blok ikke skubbes på grund af headere/footers, så giver jeg en stjerne mere i min karaktergivning - og jeg efterlyser ikke et alternativ til sticky footer, men en acceptabel løsning på at smide en 100% høj blok ind mellem elementer - som man eksempelvis kunne med tabellerne.
Men ellers en god guide med et virksomt eksempel og god kode der kan efterprøves.

Skrevet ons. d. 14. juli 2010 kl. 23:12| #2

FrederikBache (5.251 point)
webvaerk.dk
Hey Repox, god pointe. Har lavet en demo, som løser dette problem:

http://webvaerk.dk/demo/fullheight/test2.html

Bemærk at jeg ud over de ekstra features, har flyttet height:100% reglen ud i en specifik regel kun for IE6.

Skrevet fre. d. 16. juli 2010 kl. 14:29| #3

mike1963 (7.215 point)
Udmærket - jeg havde lige det gamle problem med IE6 og z-index.

Hvis ikke alt er erklæret position:absolute, vil IE6 ikke lege med ...

Og som du skriver - først skal alle padding/margin sættes 0,  dernæst kan man overskrive igen ...

Og tak for en fin demo ;o)

3 stjerne

Skrevet lør. d. 17. juli 2010 kl. 10:28| #4

Men det bliver jo først vanskeligt når man vil bruge 100% OG border/margin/padding.

Hvordan gør man dét ?

Se iøvrigt en meget underholdende diskussion om CSS her:
http://www.randyrants.com/ (...)

PS: Pyt med iE6 (og mosaic)
Folk som anvender forældede browsere er VANT til at det meste ser underligt ud : )

Skrevet ons. d. 28. juli 2010 kl. 14:52| #5

pkdkk (8.610 point)
www.spartilbud.dk
Tak ;), det løste lige et problem!

Skrevet tor. d. 12. august 2010 kl. 13:18| #6

jokkejensen (36.240 point)
#2 : height skal altid kun ramme ie6.. Sætter du en container til 100% height i moderne browsere, og fylder mere indhold i end højden, så vises det uden for containeren.

Så undtagelsen skal også i første eksempel.

#4 : Ja du er nok nødsaget neste et div, hvor du så kan styre din padding/margin. Med mindre du kan udtrykke det i procent for højde og bund..

.fullheight{height: 80%; padding: 10% 0;}

/J

Skrevet fre. d. 13. august 2010 kl. 15:42| #7

Hej for det første en fed tutorial, men har et simple spørgsmål(:

css koden ser således ud:

html, body{
    height:100%;
    padding:0;
    margin:0;
    font-family: Verdana,helvetica,arial,sans-serif;
    font-size:11px;
}

h1{
    font-size:26px;
    font-weight:normal;
}

div.fullheight{
    height:100%; /* For IE6 */
    min-height:100%; /* For andre browsere */
    background:#e3e3e3;
    padding:0;
    width:600px;
    border-right:1px solid #888;
    border-left:1px solid #888;
    margin:auto;
}

div.fullheight div{
    padding:10px;
}

Men forstår ikke dette stykke
div.fullheight div{
    padding:10px;
}

hvorfor ikke bare intate padding:10px;

Her?

div.fullheight{
    height:100%; /* For IE6 */
    min-height:100%; /* For andre browsere */
    background:#e3e3e3;
    padding:0;
    width:600px;
    border-right:1px solid #888;
    border-left:1px solid #888;
    margin:auto;
}

MVH Christian

Skrevet fre. d. 13. august 2010 kl. 15:57| #8

jokkejensen (36.240 point)
det er alle divs inden i..

Hvis han siger height:100% + 20px padding, kommer der scroll.

/J

Skrevet fre. d. 13. august 2010 kl. 17:48| #9

Okej, men har et billed som skal repeate men til sidst stopper det, og teksten ryger ned under billedet):

Sådan her ser min kode ud:

html, body{
    height:100%;
    padding:0;
    margin:0;
}

div.fullheight{
        position:absolute;
        background-image:url('images/frame_sites.png');
        background-repeat:repeat-y;
    height:100%;
    min-height:100%;
    padding:0;
        margin-left:-400px;
        left:50%;
    width:800px;
}

div.fullheight div{
    padding:10px;
}

Og html koden ser således ud:

<html>
<head>
<title>Site - Forside</title>
<link href="position.css" rel="stylesheet" type="text/css">
</head>

<body bgcolor="#d3d3d3">
<div class="fullheight"></div>


</body>
</html>

Skrevet søn. d. 15. august 2010 kl. 02:56| #10

jokkejensen (36.240 point)
du må ikke sige height: 100% til body.. Det låser den i andre browsere end ie6.

Så ex:

html, body, .fullheight
{
height: auto !important; /* Moderne browsers /*
height: 100%; /*IE6*/
min-height: 100%;
}

Og slet så alle andre height: angivelser i dit dokument.

/J
/J

Skrevet fre. d. 10. september 2010 kl. 14:11| #11

Bamma (3.545 point)
Synes det er en god guide, og vil helt sikkert bruge det som ref. i fremtiden.
Det er jo meget normalt i sine første designs at man vile have en fyldt helt ud side :)

Skrevet lør. d. 18. september 2010 kl. 19:00| #12

CaffeLatze (2.810 point)
Hej!
Her er et eksempel som benytter sig af nogle af de samme principper. http://www.xs4all.nl/ (...)
Jeg vil også anbefale at der i det allerførste eksempel indsættes "height: auto !important" !important får IE6 (og vidst IE generelt?) til at ignorere linjen. Linjen er rigtig god sammen med "min-height:"

Skrevet lør. d. 18. september 2010 kl. 19:01| #13

CaffeLatze (2.810 point)
Ups! Havde ikke set, at dette allerede var blevet nævnt... Men det er et godt link :o)

Skriv en kommentar



Mest populære guides

Guidens karakter
!!!Karaktér: 3
12 stemmer
31/01 - 2011
Af: heinzdmx

Dropbox - gratis online lagerplads

Jeg vil i denne guide forklare lidt om hvad Dropbox er og også hvordan du får mest mulig plads på Dropbox. Dropbox er kort sagt en service hvor du har dine data lagt til backup på både nettet og din egen computer.
Guidens karakter
!!!Karaktér: 4
33 stemmer
02/02 - 2009
Af: jkrons

Dato- og tidsberegninger i Excel

En introduktion til simple beregninger med dato og tid i Excel. Opdateret med afsnit om beregning af tillæg.
Excel  |  Læs »
Guidens karakter
!!!Karaktér: 4
21 stemmer
06/11 - 2011
Af: fromsej

Sådan fjerner du virus og malware

Udviklingen går stærkt på "skidt"fronten, så vi har sammensat en ny og effektiv programpakke til fjernelse af det.
Virus  |  Læs »

Log ind

   

   

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger