Avatar billede kgp43 Nybegynder
03. juli 2004 - 13:49 Der er 15 kommentarer og
1 løsning

Kan ikke sætte 100% height i divs (inden i divs)

Hejsa,

Jeg har en højre og venstre menu inde i et div. Har fået dem placeret okay, men højden passer ikke. Vil gerne have en 100% height. Så hvis den ene har mere content end den anden, så bliver den anden bare forlænget (som her hos eksperten).

Har lavet følgende:

default.css:
/* ----- MAIN ----- */
#main {
position: relative;
width: 760px;
margin-top: 90px;
margin-left: auto;
margin-right: auto;
border: 1px solid #CCCCCC;
}

/* ----- LEFT MENU ----- */
#leftmenu {
float:left;
width: 150px;
height: 100%;
left: 0;
background-color: #005B79;
padding-top: 20px;
}
/* ----- RIGHT MENU ----- */
#rightmenu {
float:right;
width: 150px;
height: 100%;
left: 0;
background-color: #005B79;
padding-top: 20px;
}


index.php:
<div id="container">
<div id="logo-div">
<div id="logo"><img src="/img/logo_fishing_tackle.gif"></div>
</div>
<div id="main">
<div id="leftmenu">
<p>123</p>
<p>123</p>
</div>
<div id="rightmenu">
<p>123</p>
<p>123</p>
<p>123</p>
<p>123</p>
</div>
<div style="clear:both"></div>
</div>
</div>

- eksempel kan ses her: www.tackleprices.com
Avatar billede roenving Novice
03. juli 2004 - 13:56 #1
Den simpleste teknik er at have en baggrund i container-div'en, og lade menuerne være gennemsigtige, så kan indholdet (med baggrund !-) udvide sig alt det, det skal være, farven vil jo være baggrunden på containeren ...

Men hvis du skal kunne have det sådan at menuerne kan være længere end indholdet skal du over i noget java script:

<script type="text/javascript">
var elms = ['leftmenu','main','rightmenu'];

function synchronizeDivs(){
  var maxH = 0;
  for(i=0;elms.length>i;i++){
    maxH = Math.max(maxH,document.getElementById(elms[i]).offsetHeight);
  }
  for(i=0;elms.length>i;i++){
    document.getElementById(elms[i]).style.height=maxH + 'px';
  }
}
window.onload = synchronizeDivs;
</script>
Avatar billede kgp43 Nybegynder
03. juli 2004 - 14:03 #2
Forstår ikke hvad du mener.

Menuerne skal ikke være længere end den div de er indeni (main), de skal bare have samme længde (slutte samme sted). Når leftmenu har mere content end rightmenu, så skal rightmenu bare fylde ud, så den rammer bunden af "main" (den hvor leftmenu ender).
Avatar billede roenving Novice
03. juli 2004 - 14:04 #3
-- og problemet er, at du ikke kan sætte en højde, hvis der ikke er en højde på main-div'en ...
Avatar billede kgp43 Nybegynder
03. juli 2004 - 14:05 #4
Et godt eksempel er edbpriser. Venstre menu har mindre indhold, men den slutter stadig hvor højre (eller midten) ender.
Avatar billede kgp43 Nybegynder
03. juli 2004 - 14:11 #5
"Den simpleste teknik er at have en baggrund i container-div'en, og lade menuerne være gennemsigtige"

jamen, vil det ikke resulterer i det samme? da divsene ikke har samme længde/højde?
Avatar billede kgp43 Nybegynder
03. juli 2004 - 14:13 #6
Jeg brugte dit script, det er bare lidt forvirrende at det ikke er muligt med css.
ligger du et svar
Avatar billede roenving Novice
03. juli 2004 - 14:19 #7
>>14:11:00

Det er sjældent problemet, at menuerne er længere end indholdet, derfor skulle ideen være, at indholdet havde sin egen div, som så havde en baggrund, som dækkede over main-div'ens baggrundsfarve, som så kunne slå igennem i menuerne !-)

-- og som jeg påpegede er problemet, at 100% forholder sig til en eksplicit angivet højde, og ikke vil tage sig af, at et indhold eventuelt udvider højden ...

Jeg overvejede faktisk om jeg skulle prøve at foreslå en løsning, hvor udgangspunktet kunne være skærmhøjden (altså html,body{height:100%} og det samme på container og main !-), men havde ikke indtrykket af, at det var det du kunne bruge ...

-- velbekomme '-)
Avatar billede kgp43 Nybegynder
03. juli 2004 - 14:26 #8
Vil det sige at du ville have en ekstra divs til left og right menu (med baggrundsfarven). Indholdet (med divs) bliver så sat ind i disse divs? Hvordan får du så de nye divs til at have den samme længde? får du ikke det samme problem som nu?
Avatar billede roenving Novice
03. juli 2004 - 15:01 #9
Nej, nu har du din main-div, hvor leftmenu og rightmenu floater til hhv. venstre og højre, og så er der så plads til indholdet imellem ...

Hvis tricket skal bruges, skal der sættes en ekstra div ind til at udfylde hullet mellem menuerne, og denne div kunne så have en baggrund ...

Se på dette:

<style type="text/css">
#main {
position: relative;
width: 760px;
margin-top: 90px;
margin-left: auto;
margin-right: auto;
border: 1px solid #CCCCCC;
background-color: #005B79;
}

/* ----- LEFT MENU ----- */
#leftmenu {
float:left;
width: 150px;
height: 100%;
left: 0;
background: transparent;
padding-top: 20px;
}
/* ----- RIGHT MENU ----- */
#rightmenu {
float:right;
width: 150px;
height: 100%;
left: 0;
background: transparent;
padding-top: 20px;
}
#indhold {
height: 100%;
background: #fff;
padding-top: 20px;
}
</style>
<div id="container">
<div id="logo-div">
<div id="logo"><img src="www.tackleprices.com/img/logo_fishing_tackle.gif"></div>
</div>
<div id="main">
<div id="rightmenu">
<p>123</p>
<p>123</p>
<p>123</p>
<p>123</p>
</div>
<div id="leftmenu">
<p>123</p>
<p>123</p>
</div>
<div id="indhold">
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
Indholdet på siden<br>
</div>
<div style="clear:both"></div>
</div>
</div>
Avatar billede kgp43 Nybegynder
03. juli 2004 - 18:26 #10
Perfekt :)

Takker for hjælpen
Avatar billede roenving Novice
03. juli 2004 - 18:52 #11
-- og jeg takker for point ;~}
Avatar billede kgp43 Nybegynder
04. juli 2004 - 18:54 #12
we have a problem Huston :P

Når indholdet i menuerne bliver længere end center, så går der ged i det.
Se her: www.tackleprices.com
Avatar billede kgp43 Nybegynder
04. juli 2004 - 19:26 #13
Skal jeg så over og anvende dit script?
Er det muligt at smide scriptet i en js fil? og så bare include filen (Så jeg slipper for koden)
Avatar billede roenving Novice
04. juli 2004 - 19:40 #14
Det er konsekvensen, ja ...

-- og der er ikke det fjerneste i vejen for at du smider scriptet i .js-fil !-)

Husk bare at der ikke må være html-tags i en sådan, så <script> og </script> skal fjernes ...

-- og hvis du bibeholder indhold-div'en skal start-linjen tilrettes:

var elms = ['leftmenu','indhold','rightmenu'];
Avatar billede kgp43 Nybegynder
04. juli 2004 - 19:56 #15
Kan ikke rigtig få det til at virke.
Den kommer med en error. Sådan ser min .js fil ud (den bliver includeret som alm php filer):

// JavaScript Document
var elms = ['leftmenu','frontpage_center_content','rightmenu'];

function synchronizeDivs(){
  var maxH = 0;
  for(i=0;elms.length>i;i++){
    maxH = Math.max(maxH,document.getElementById(elms[i]).offsetHeight);
  }
  for(i=0;elms.length>i;i++){
    document.getElementById(elms[i]).style.height=maxH + 'px';
  }
}
window.onload = synchronizeDivs;
Avatar billede roenving Novice
04. juli 2004 - 20:20 #16
Inkluder den som .js-fil:

<script type="text/javascript" src="sync.js"></script>
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