Avatar billede jansoz Nybegynder
10. oktober 2008 - 18:19 Der er 12 kommentarer og
1 løsning

Bokse passer ikke med matematikken

Jeg har prøvet at lave nogle bokse styret af CSS ligesom et kinesisk æskesystem.
Den store boks er 965 px bred; inde i den ligger der fire andre hvor to er 120 px brede og to andre 725 px brede, alle under float:left.
Problemet er bare at matematikken og den måde jeg forventer, ikke passer med den måde som disse bokse bliver vist i virkeligheden uanset om det er IE 7, MF 3 eller Chrome 0.2.
Er der nogen der kan give en forklaring?
Her kommer koderne til CSS og HTML:

/* CSS Document */

div#box5    {
    float:left;
    width:965px;
    height:90px;
    background-color:#9933CC;
}

div#box51    {
    float:left;
    width:120px;
    height:80px;
    background-color:#006699;
}

div#box52    {
    float:left;
    width:725px;
    height:60px;
    background-color:#CCCC66;
}

div#box53    {
    float:left;
    width:725px;
    height:30px;
    background-color:#996699;
}


div#box54    {
    float:left;
    width:120px;
    height:120px;
    background-color:#33FF00;
}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>test af boks</title>
<link href="1.css" rel="stylesheet" type="text/css" />
</head>

<body>

<div id="page">

<div id="box5">

<div id="box51">
box 51</div>

<div id="box52">
box 52</div>

<div id="box53">
box 53</div>

<div id="box54">
boks 54</div>

</div>



</div>

</body>
</html>
Avatar billede olebole Juniormester
10. oktober 2008 - 21:15 #1
<ole>

Forklaringen må du søge hos din matematiklærer - koden opfører sig lige efter bogen i de browsere, jeg har testet i  =)

Hvordan havde du forventet, det skulle se ud?

/mvh
</bole>
Avatar billede olebole Juniormester
10. oktober 2008 - 21:18 #2
Vil det hjælpe på forestillingerne, hvis du clear'er elementernes float? F.eks:

<div id="page">

<div id="box5">

<div id="box51">
box 51</div>

<div id="box52">
box 52</div>

<div id="box53">
box 53</div>

<div id="box54">
boks 54</div>
<div style="height:0px;overflow:hidden;clear:both">&nbsp;</div>
</div>

<div style="height:0px;overflow:hidden;clear:both">&nbsp;</div>

</div>
Avatar billede jansoz Nybegynder
28. oktober 2008 - 21:10 #3
Jeg forventede at box5 skulle indeholde alle de andre bokse på en sådan måde at box51 ligger helt til venstre, box52 oven på box53 til højre for box 51, og endelig box54 helt til højre ud for box52 og box53. Det jeg oplever, er at box54 ligger forskudt nedad neden for box52 nærmest som om box52 er for bred og skubber box54 nedad.

Jeg prøvede din clear, men det syntes jeg ikke hjalp.
Avatar billede jansoz Nybegynder
28. oktober 2008 - 21:11 #4
Jeg har forbedret nogle ting i koden, men resultatet er det samme her som ovenfor:

<body>

<div id="box5">

<div id="box51">
box 51
</div>

<div id="box52">
box 52
</div>

<div id="box53">
box 53
</div>

<div id="box54">
box 54
</div>

</div>


</body>

div#box5    {
    float:left;
    width:965px;
    height:90px;
    background-color:orange;
}

div#box51    {
    float:left;
    width:120px;
    height:90px;
    background-color:#006699;
}

div#box52    {
    float:left;
    width:725px;
    height:60px;
    background-color:#00FF00;
}

div#box53    {
    float:left;
    width:725px;
    height:30px;
    background-color:#996699;
}

div#box54    {
    float:left;
    width:120px;
    height:90px;
    background-color:#33FF00;
}
Avatar billede olebole Juniormester
29. oktober 2008 - 09:21 #5
Floatede elementer fylder jo ikke noget i dokumentets normal flow, så der skal clear'es først:

<div id="box53">
box 53
</div>

<div id="box54">
box 54
</div>

<div style="clear:both;height:0;overflow:hidden">&nbsp;</div>

</div>
Avatar billede jansoz Nybegynder
29. oktober 2008 - 20:03 #6
Jeg har prøvet at lægge koden ind, men uden at det ændrer noget.

Jeg forstår ikke hvad du mener med at "Floatede elementer fylder jo ikke noget i dokumentets normal flow," for float har ikke noget med fyld at gøre, men et måde at tilrettelægge nogle elementer i sidens flow og give dem netop det flow at de burde placere sig viden siden af hinanden.
Avatar billede roenving Novice
29. oktober 2008 - 22:48 #7
Et floatet element fylder intet i dokumentets flow og vil derfor ikke forhindre andre elementer i at optage den samme plads !-)
Avatar billede jansoz Nybegynder
29. oktober 2008 - 23:03 #8
Jeg er enig med roenving. Men hvad forklarer så at min box54 ikke vil blive inde i box5 i højre side?
Matematikken er jo sådan:
Box5: width 965 px
Box51 w 120 px + box52 box53 w 725px + box54 w 120px = w 965 px = box5
Jeg kan regne, kan CSS?
Avatar billede roenving Novice
29. oktober 2008 - 23:19 #9
Hvis der ikke er plads til et floatet element i float-retningen, vil det fylde ud _nedenunder_ det element, det ellers ville have floatet op af, så hvis du vil arbejde med elementer i forskellig højde er floats ikke en option !-)
Avatar billede zips Juniormester
30. oktober 2008 - 00:38 #10
Hvis du nu flytter din div id="54" op mellem div id="51" og div id="52" passer din matematik, så det er noget med float som gør at div id="54" ikke vil op på plads, prøv dette i stedet hvor jeg har lagt en div omkring din 52 og 53

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Text matematikken</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<style type="text/css">
<!--
div#box5    {
    float:left;
    width:965px;
    height:90px;
    background-color:orange;
}

div#box51    {
    float:left;
    width:120px;
    height:90px;
    background-color:#006699;
}

div#box52    {
    float:left;
    width:725px;
    height:60px;
    background-color:#00FF00;
}

div#box53    {
    float:left;
    width:725px;
    height:30px;
    background-color:#996699;
}

div#box54    {
    float:left;
    width:120px;
    height:90px;
    background-color:#33FF00;
}
div#box55    {
    float:left;
    width:725px;
    height:90px;
    background-color:#00FF00;
}
-->
</style>

</head>
<body>

<div id="box5">

<div id="box51">box 51</div>

<div id="box55">
<div id="box52">box 52</div>
<div id="box53">box 53</div>
</div>

<div id="box54">box 54</div>

</div>
</body>
</html>
Avatar billede jansoz Nybegynder
30. oktober 2008 - 20:28 #11
Jeg synes at zips kommer med godt svar fordi det løser problemet. Det er dog en lappeløsning som man jo normalt kun tager i anvendelse når det drejer sig om at få IE til at makke ret.

Et andet sted fik jeg det svar at tilføje margin-top:-60px til bod54:

div#box54    {
    float:left;
    width:120px;
    height:90px;
    background-color:gray;
    margin-top:-60px;

Det løser også problemet uden at forstyrre opbygningen med en ekstra boks. Men i begge tilfælde er der intet indlysende der får en til at tænke på netop de to løsninger.

Til roenvig vil jeg svare at jeg netop har beregnet nøje at der er plads. Men måske kan CSS ikke regne?

Zips må gerne kvittere med et svar!
Avatar billede zips Juniormester
30. oktober 2008 - 20:31 #12
Her er et svar :)
Avatar billede zips Juniormester
30. oktober 2008 - 20:43 #13
Tak for point :)
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