30. juli 2008 - 11:07
Der er
48 kommentarer og 2 løsninger
Problem med to-spaltet div-layout (height)
Hej! Jeg har lavet et layout i div og css, men er stødt på et problem. left og right skal være lige lange uanset hvad. Dvs. hvis der er meget indhold i left, skal right bare blive tilsvarende længere og omvendt. Det kan jeg ikke hitte ud af :/ Nogen der lige kan kringle den? Desuden, er der nogen der ved hvordan man får et textarea til at justerer højden efter indholdet? #wrap{ margin:0 auto; width: 763px; border: 1px solid #FFFFFF; border-top: 0; border-bottom: 0; } #topstykke{ height: 70px; background-color: #D9D8CB; } #banner{ height: 149px; } #menu{ height: 33px; background: url(../graphics/menu_bg.jpg) repeat-x; } #right{ margin-left: 260px; background-color: #D9D8CB; padding-left: 20px; } #left{ float: left; width: 220px; padding: 20px; background-color: #9C9B8B; height: 100%; } #footer{ clear: both; height: 20px; background-color: #BEBDAF; border-top: 1px solid #FFFFFF; padding: 5px 10px 0 10px; } <div id='wrap'> <div id='topstykke'> </div> <div id='banner'> Topbanner </div> <div id='menu'> Menu </div> <div id='left'> Submenu </div> <div id='right'> Content </div> <div id='footer'> Footer </div> </div>
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
Ang. textarea, så kan du måske bruge følgende JavaScript-kode: <script type="text/javascript"> function resizeTextarea(o){ o.style.height = 10 + (o.value.split("\n").length * 12 * 1.3) + "px"; } </script> <textarea style="height:22px;overflow:hidden;font-size:12px" onkeyup="resizeTextarea(this)"></textarea> Ang. de 2 spalter, så tror jeg også, du skal bruge JavaScript til at løse det. Jeg er ikke sikker på, du kan gøre det i ren HTML/CSS.
Men det er vel bare at skrive: <script type="text/javascript"> window.onload = function(){ adjustHeight(document.getElementById("left"),document.getElementById("right")); } function adjustHeight(o1,o2){ if (o1.offsetHeight > o2.offsetHeight) o2.style.height = o1.offsetHeight + "px"; else o1.style.height = o2.offsetHeight + "px"; } } </script>
Slettet bruger
30. juli 2008 - 12:16
#3
Slettet bruger
30. juli 2008 - 12:23
#5
Det mest bøvlede pjeler at være hvis indholdet på siden ikke er ret langt og man så ønsker at diverse farver på kolonnerne rækker helt ned. Mn det kan lade sig gøre at lave uden brug af javascript. Hvilket jeg egentlig også foretrækker.
Når jeg smider følgende ind, får jeg en syntaks fejl: <script type="text/javascript"> window.onload = function(){ adjustHeight(document.getElementById("left"),document.getElementById("right")); } function adjustHeight(o1,o2){ if (o1.offsetHeight > o2.offsetHeight) o2.style.height = o1.offsetHeight + "px"; else o1.style.height = o2.offsetHeight + "px"; } } </script>
Nå ja, i linje 78, hvor der står "}". Den skal bare væk, så det bliver: <script type="text/javascript"> window.onload = function(){ adjustHeight(document.getElementById("left"),document.getElementById("right")); } function adjustHeight(o1,o2){ if (o1.offsetHeight > o2.offsetHeight) o2.style.height = o1.offsetHeight + "px"; else o1.style.height = o2.offsetHeight + "px"; } </script> Så virker det fint. Har også testet det.
Ja det fungerer! :) Mht. til resize funktionen - Jeg får følgende fejl: Streng konstanten blev ikke afsluttet. Og det er lige ved '\n' det kikser. Desuden må dette også gerne ske onload. Hvilket vel også er simpelt!?
Så bruger du den nok forkert, for det virker fint hos mig. Prøv evt. at vise koden. Du kan i øvrigt sætte det til at blive kørt onload ved at rette det andet script til: <script type="text/javascript"> window.onload = function(){ adjustHeight(document.getElementById("left"),document.getElementById("right")); resizeTextarea(document.getElementById("textareaets_id")); } function adjustHeight(o1,o2){ if (o1.offsetHeight > o2.offsetHeight) o2.style.height = o1.offsetHeight + "px"; else o1.style.height = o2.offsetHeight + "px"; } </script> Så skal du selvfølgelig bare rette "textareaets_id". :)
30. juli 2008 - 13:56
#10
Jeg får ikke længere fejlen. Men jeg kan stadig ikke få boksen til at resize. Jeg tror det skyldes at det ikke e ren helt plain box (se nedenstående link)
Men der er et lille problem med kolonne-højde løsningen. Se evt her:
http://86.58.155.197/luxweb/sites/temp1/index.php?id=1&edit=1
30. juli 2008 - 13:58
#12
Det har noget med det at gøre, ja. Det er et IFrame. 2 sek.
30. juli 2008 - 13:59
#13
Det med padding, så er det et problem ja. Når jeg aflæser højden med JavaScript, regnes padding med. Når jeg så sætter højden, så lægges padding til denne.
30. juli 2008 - 14:03
#14
Ville det så være smartest at trække paddingen fra igen? Selvom det ikk eer så flexibelt..
30. juli 2008 - 14:05
#15
Iframeproblemet kunne måske løses med: <script type="text/javascript"> window.onload = function(){ adjustHeight(document.getElementById("left"),document.getElementById("right")); resizeIFrame(document.getElementById("cms_ifr")); document.getElementById("cms_ifr").onkeyup=function(){resizeIFrame(document.getElementById("cms_ifr"))}; } function adjustHeight(o1,o2){ if (o1.offsetHeight > o2.offsetHeight) o2.style.height = o1.offsetHeight + "px"; else o1.style.height = o2.offsetHeight + "px"; } </script> Og så resizeTextarea()-koden: <script type="text/javascript"> function resizeIFrame(o){ o.style.height = o.contentWindow.document.getElementsByTagName("body")[0].offsetHeight + "px"; } </script> <textarea style="height:22px;overflow:hidden;font-size:12px"></textarea> Men det er lidt et skud i tågen.
30. juli 2008 - 14:08
#16
Ja, det ville det måske. Ellers kan du prøve at rette: function adjustHeight(o1,o2){ if (o1.offsetHeight > o2.offsetHeight) o2.style.height = o1.offsetHeight + "px"; else o1.style.height = o2.offsetHeight + "px"; } til: function adjustHeight(o1,o2){ var iPadding = 0; if(o1.offsetHeight > o2.offsetHeight){ iPadding = parseInt(o2.style.padding.toLowerCase().replace("px","")); o2.style.height = (o1.offsetHeight - iPadding) + "px"; }else{ iPadding = parseInt(o1.style.padding.toLowerCase().replace("px","")); o1.style.height = (o2.offsetHeight - iPadding) + "px"; } }
30. juli 2008 - 14:22
#17
contentWindow.document er null eller ikke et objekt, får jeg nu mht. til iframe! Mht. til adjustHeight virker det ikke selvom løsningen eller var smart :/ Jeg trækker bare paddingen fra manuelt :)
30. juli 2008 - 14:24
#18
Prøv evt. at fjerne: document.getElementById("cms_ifr").onkeyup=function(){resizeIFrame(document.getElementById("cms_ifr"))}; Måske er det fordi denne linje køres, inden IFramen er klar. Så skal du se, om det udvider sig, når du skriver i det.
30. juli 2008 - 14:28
#19
Nej, det er også rigtigt - man kan ikke hente padding, hvis det er sat med et eksternt CSS-dokument. :(
30. juli 2008 - 14:32
#20
30. juli 2008 - 14:32
#21
Hmm. Men du vil nok kunne gøre således :P function adjustHeight(o1,o2){ var iPadding = 0; if(o1.offsetHeight > o2.offsetHeight){ o2.style.height = (o1.offsetHeight) + "px"; o2.style.height = o1.offsetHeight - (o2.offsetHeight - o1.offsetHeight) +"px"; }else{ o1.style.height = (o2.offsetHeight) + "px"; o1.style.height = o2.offsetHeight - (o1.offsetHeight - o2.offsetHeight) + "px"; } }
30. juli 2008 - 14:33
#22
Hvad hvis du lige retter: document.getElementById("cms_ifr").onkeyup=function(){resizeIFrame(document.getElementById("cms_ifr"))}; til: document.getElementById("cms_ifr").onkeyup=function(){alert("onkeyup")}; Så skulle den fortælle os, om den kan mærke, når man trykker på en tast.
30. juli 2008 - 14:37
#23
den registrer ikke key up :S
30. juli 2008 - 14:38
#24
Kolonne problemet virkede med den nye løsningen.. genialt :)
30. juli 2008 - 14:45
#25
Så er det keyup, der er problemet. Ok. Prøv at rette: document.getElementById("cms_ifr").onkeyup=function(){resizeIFrame(document.getElementById("cms_ifr"))}; til: alert("contentWindow eksisterer: "+document.getElementById("cms_ifr").contentWindow); alert("contentWindow.document eksisterer: "+document.getElementById("cms_ifr").contentWindow.document); document.getElementById("cms_ifr").contentWindow.document.getElementsByTagName("body")[0].onkeyup=function(){parent.resizeIFrame(document.getElementById("cms_ifr"))};
30. juli 2008 - 14:46
#26
Så skal den komme med 2 alerts, når siden loades. Hvad siger de?
30. juli 2008 - 14:52
#27
Desværre.. Er det mig der fucker up? <script type='text/javascript'> function resizeIFrame(o){ o.style.height = o.contentWindow.document.getElementsByTagName('body')[0].offsetHeight + 'px'; alert('contentWindow eksisterer: '+document.getElementById('cms_ifr').contentWindow); alert('contentWindow.document eksisterer: '+document.getElementById('cms_ifr').contentWindow.document); document.getElementById('cms_ifr').contentWindow.document.getElementsByTagName('body')[0].onkeyup=function(){parent.resizeIFrame(document.getElementById('cms_ifr'))}; } </script> <script type='text/javascript'> window.onload = function(){ adjustHeight(document.getElementById('left'),document.getElementById('right_edit')); resizeIFrame(document.getElementById('cms_ifr')); } function adjustHeight(o1,o2){ var iPadding = 0; if(o1.offsetHeight > o2.offsetHeight){ o2.style.height = (o1.offsetHeight) + 'px'; o2.style.height = o1.offsetHeight - (o2.offsetHeight - o1.offsetHeight) +'px'; }else{ o1.style.height = (o2.offsetHeight) + 'px'; o1.style.height = o2.offsetHeight - (o1.offsetHeight - o2.offsetHeight) + 'px'; } } </script>
30. juli 2008 - 14:54
#28
Ja, lidt. ;) Se 30/07-2008 14:05:19 hvad jeg lægger i window.onload-funktionen. Det skal vist være: <script type='text/javascript'> function resizeIFrame(o){ o.style.height = o.contentWindow.document.getElementsByTagName('body')[0].offsetHeight + 'px'; } window.onload = function(){ adjustHeight(document.getElementById('left'),document.getElementById('right_edit')); resizeIFrame(document.getElementById('cms_ifr')); alert('contentWindow eksisterer: '+document.getElementById('cms_ifr').contentWindow); alert('contentWindow.document eksisterer: '+document.getElementById('cms_ifr').contentWindow.document); document.getElementById('cms_ifr').contentWindow.document.getElementsByTagName('body')[0].onkeyup=function(){parent.resizeIFrame(document.getElementById('cms_ifr'))}; } function adjustHeight(o1,o2){ var iPadding = 0; if(o1.offsetHeight > o2.offsetHeight){ o2.style.height = (o1.offsetHeight) + 'px'; o2.style.height = o1.offsetHeight - (o2.offsetHeight - o1.offsetHeight) +'px'; }else{ o1.style.height = (o2.offsetHeight) + 'px'; o1.style.height = o2.offsetHeight - (o1.offsetHeight - o2.offsetHeight) + 'px'; } } </script>
30. juli 2008 - 14:55
#29
Men så har du nok også testet onkeyup-tingen forkert. Prøv lige allerførst med: <script type='text/javascript'> function resizeIFrame(o){ o.style.height = o.contentWindow.document.getElementsByTagName('body')[0].offsetHeight + 'px'; } window.onload = function(){ adjustHeight(document.getElementById('left'),document.getElementById('right_edit')); resizeIFrame(document.getElementById('cms_ifr')); document.getElementById("cms_ifr").onkeyup=function(){alert("onkeyup")}; } function adjustHeight(o1,o2){ var iPadding = 0; if(o1.offsetHeight > o2.offsetHeight){ o2.style.height = (o1.offsetHeight) + 'px'; o2.style.height = o1.offsetHeight - (o2.offsetHeight - o1.offsetHeight) +'px'; }else{ o1.style.height = (o2.offsetHeight) + 'px'; o1.style.height = o2.offsetHeight - (o1.offsetHeight - o2.offsetHeight) + 'px'; } } </script>
30. juli 2008 - 15:01
#30
tegnet ')' var ventet
30. juli 2008 - 15:03
#31
har fundet den fejl. Nu kommer contentWindow.document er null eller ikke et objekt igen
30. juli 2008 - 15:04
#32
Ja, linjen: document.getElementById('cms_ifr').contentWindow.document.getElementsByTagName('body')[0].onkeyup=function(){parent.resizeIFrame(document.getElementById('cms_ifr'))}; skal være: document.getElementById('cms_ifr').contentWindow.document.getElementsByTagName('body')[0].onkeyup=function(){parent.resizeIFrame(document.getElementById('cms_ifr')))}; Men du bør nok prøve den sidste først. Tror du afprøvede den forkert før. Hvis dén virker, er den langt bedre end den, du prøver nu.
30. juli 2008 - 15:05
#33
Hmm.. Vi må debugge. Hvad siger den til: alert(document.getElementById("cms_ifr")); ? Og til: alert(document.getElementById("cms_ifr").contentWindow); Og: alert(document.getElementById("cms_ifr").contentWindow.document); Og: alert(document.getElementById("cms_ifr").contentWindow.document.getElementsByTagName("body")[0]);
30. juli 2008 - 15:13
#34
den siger: [object] og undefinied og contentWindow.document er null eller ikke et objekt igen og contentWindow.document er null eller ikke et objekt igen
30. juli 2008 - 15:18
#35
Vis mig lige, hvor du skriver det. Altså hele JS-koden.
30. juli 2008 - 15:19
#36
<script type='text/javascript'> function resizeIFrame(o){ o.style.height = o.contentWindow.document.getElementsByTagName('body')[0].offsetHeight + 'px'; } window.onload = function(){ adjustHeight(document.getElementById('left'),document.getElementById('right_edit')); alert(document.getElementById('cms_ifr').contentWindow.document.getElementsByTagName('body')[0]); } function adjustHeight(o1,o2){ var iPadding = 0; if(o1.offsetHeight > o2.offsetHeight){ o2.style.height = (o1.offsetHeight) + 'px'; o2.style.height = o1.offsetHeight - (o2.offsetHeight - o1.offsetHeight) +'px'; }else{ o1.style.height = (o2.offsetHeight) + 'px'; o1.style.height = o2.offsetHeight - (o1.offsetHeight - o2.offsetHeight) + 'px'; } } </script>
30. juli 2008 - 15:27
#37
Hm. Det forstår jeg ikke lige..
30. juli 2008 - 15:30
#38
Hvad med: <script type='text/javascript'> function resizeIFrame(o){ o.style.height = o.contentWindow.document.getElementsByTagName('body')[0].offsetHeight + 'px'; } window.onload = function(){ adjustHeight(document.getElementById('left'),document.getElementById('right_edit')); document.getElementById("cms_ifr").onload=function(){ alert(document.getElementById('cms_ifr').contentWindow.document.getElementsByTagName('body')[0]); } } function adjustHeight(o1,o2){ var iPadding = 0; if(o1.offsetHeight > o2.offsetHeight){ o2.style.height = (o1.offsetHeight) + 'px'; o2.style.height = o1.offsetHeight - (o2.offsetHeight - o1.offsetHeight) +'px'; }else{ o1.style.height = (o2.offsetHeight) + 'px'; o1.style.height = o2.offsetHeight - (o1.offsetHeight - o2.offsetHeight) + 'px'; } } </script>
30. juli 2008 - 15:37
#39
Hverken fejl eller alert
30. juli 2008 - 15:37
#40
Hmm. Så: <script type='text/javascript'> function resizeIFrame(o){ o.style.height = o.contentWindow.document.getElementsByTagName('body')[0].offsetHeight + 'px'; } window.onload = function(){ adjustHeight(document.getElementById('left'),document.getElementById('right_edit')); document.getElementById("cms_ifr").window.onload=function(){ alert(document.getElementById('cms_ifr').contentWindow.document.getElementsByTagName('body')[0]); } } function adjustHeight(o1,o2){ var iPadding = 0; if(o1.offsetHeight > o2.offsetHeight){ o2.style.height = (o1.offsetHeight) + 'px'; o2.style.height = o1.offsetHeight - (o2.offsetHeight - o1.offsetHeight) +'px'; }else{ o1.style.height = (o2.offsetHeight) + 'px'; o1.style.height = o2.offsetHeight - (o1.offsetHeight - o2.offsetHeight) + 'px'; } } </script>
30. juli 2008 - 15:38
#41
Ellers er jeg blank. :)
30. juli 2008 - 15:38
#42
Jeg har nemlig selv gjort det masser af gange. Men måske er der noget, der spiller ind i WYSIWYG-koden, som vi ikke har taget højde for..
30. juli 2008 - 15:40
#43
Ah, nu ser jeg ordentligt efter i koden. "cms_ifr" skal åbenbart være "cms_ifr_ifr". Ellers er det textareaet og ikke iframet, som vi har fat i. Det syntes jeg eller ikke, der stod før. Så det er forklaringen.
30. juli 2008 - 15:40
#44
Så prøv: <script type='text/javascript'> function resizeIFrame(o){ o.style.height = o.contentWindow.document.getElementsByTagName('body')[0].offsetHeight + 'px'; } window.onload = function(){ adjustHeight(document.getElementById('left'),document.getElementById('right_edit')); resizeIFrame(document.getElementById('cms_ifr_ifr')); document.getElementById("cms_ifr_ifr").onkeyup=function(){alert("onkeyup")}; } function adjustHeight(o1,o2){ var iPadding = 0; if(o1.offsetHeight > o2.offsetHeight){ o2.style.height = (o1.offsetHeight) + 'px'; o2.style.height = o1.offsetHeight - (o2.offsetHeight - o1.offsetHeight) +'px'; }else{ o1.style.height = (o2.offsetHeight) + 'px'; o1.style.height = o2.offsetHeight - (o1.offsetHeight - o2.offsetHeight) + 'px'; } } </script>
30. juli 2008 - 15:43
#46
Nej, det er sådan her man gør det, hvis det skal virke i alle browsere, og det kan også sagtens komme til at virke, hvis vi fortsætter som nu. =)
30. juli 2008 - 15:43
#47
Prøv lige at lægge JS-koden ud igen og sig til, når jeg kan se det.
30. juli 2008 - 15:46
#48
således
30. juli 2008 - 15:54
#49
Jeg er desværre nødt til at smutte nu. Men jeg siger 1000-tak for hjælpen for denne gang :) Hvis du løser problemet, ser jeg frem til at høre fra dig! Og du får naturligvis også pointne hermed
Vi tilbyder markedets bedste kurser inden for webudvikling