kostenloser Webspace werbefrei: lima-city


Div-größe anpassen

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    So, mal wieder eine wahrscheinlich bescheuerte Frage von mir.

    Ich habe 3 Div-Elemente, welche vertikal übereinander stehen sollen. Die größe des obersten und des untersten soll feststehen, (beispielsweise 100px) das mittlere Div-Element soll nun an die Fenstergröße angepasst werden. Problematik dabei ist, dass die Größe des Fensters variabel sein soll (also man kann es größer und kleiner ziehen) und dabei trotzdem immer (nur) den Raum zwischen den beiden anderen Div's ausfüllen soll. (ähnlich wie es beispielsweise bei einem Table-Element recht einfach zu realisieren wäre)

    Die weitere Problematik besteht darin, dass in das mittlere Div-Element ein dynamischer Inhalt soll. Dieser soll dann ggf. in dem Div gescrollt werden. (overflow:auto?)

    Wenn ich versuche, dies mit einem Table zu lösen, akzeptiert er das "overflow:auto" nur, wenn eine feste größe gesetzt wurde. Also bekomme ich bei
    <table>
    	<tr>
    		<td style="height:100px;">Oberer Inhalt</td>
    	</tr>
    	<tr>
    		<td style="overflow:auto;">Mittlerer Inhalt</td>
    	</tr>
    	<tr>
    		<td style="height:100px;">Unterer Inhalt</td>
    	</tr>
    </table>
    das Problem, dass die Mitte mit dem Inhalt mitwächst. Dies soll natürlich nicht so sein.

    Kennt jemand eine elegante Methode, sowas mit HTML, css und wenn es unbedingt sein muss Javascript zu lösen?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wenn ich das so richtig verstanden habe, willst du so Pseudo-Frames erstellen bei der Header und Footer mitscrollt. Du kannst ja Header und Footer `fixed` positionieren... Dann scrollen sie mit.
    <div id="header" />
    <div id="content" />
    <div id="footer" />
    #header, #footer { height: 100px; position: fixed; left: 0; width: 100%; }
    #header { top: 0; }
    #footer { bottom: 0; }
    #content { padding: 100px 0; } /* Damit der Inhalt nicht vom #header bzw #footer verdeckt wird */
    `position: fixed;` wird von allen modernen Browsern unterstützt. (außer natürlich IE6-, aber der kann ja nicht als moderner Browser durchgehen)
    Ryan
  4. karlsve

    Moderator Kostenloser Webspace von karlsve

    karlsve hat kostenlosen Webspace.

    ryanblack schrieb: Wenn ich das so richtig verstanden habe, willst du so Pseudo-Frames erstellen bei der Header und Footer mitscrollt. Du kannst ja Header und Footer `fixed` positionieren... Dann scrollen sie mit.
    &lt;div id="header" /&gt;
    &lt;div id="content" /&gt;
    &lt;div id="footer" /&gt;
    #header, #footer { height: 100px; position: fixed; left: 0; width: 100%; }
    #header { top: 0; }
    #footer { bottom: 0; }
    #content { padding: 100px 0; } /* Damit der Inhalt nicht vom #header bzw #footer verdeckt wird */
    `position: fixed;` wird von allen modernen Browsern unterstützt. (außer natürlich IE6-, aber der kann ja nicht als moderner Browser durchgehen)
    Ryan


    Naja mein IE 8 machts auch nicht mit und das versteh nicht da er es ja eigentlich machen sollte^^

    Aber sonst voll und ganz zutreffend.
    Eine nicht ganz so schöne aber mögliche alternative wäre vllt. es mit '%' zu machen was jedoch die höhe des header und footer schwierig macht. Sonst versuch es doch mit max-height um das ganze auf eine maximale größe zu begrenzen?!

    MfG
    karlsve
  5. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    ryanblack schrieb: Wenn ich das so richtig verstanden habe, willst du so Pseudo-Frames erstellen bei der Header und Footer mitscrollt. Du kannst ja Header und Footer `fixed` positionieren... Dann scrollen sie mit.
    &lt;div id="header" /&gt;
    &lt;div id="content" /&gt;
    &lt;div id="footer" /&gt;
    #header, #footer { height: 100px; position: fixed; left: 0; width: 100%; }
    #header { top: 0; }
    #footer { bottom: 0; }
    #content { padding: 100px 0; } /* Damit der Inhalt nicht vom #header bzw #footer verdeckt wird */
    `position: fixed;` wird von allen modernen Browsern unterstützt. (außer natürlich IE6-, aber der kann ja nicht als moderner Browser durchgehen)
    Ryan

    Hm, das sah auf den ersten Blick nicht schlecht aus. Nur funktioniert es leider auch nicht ganz so, wie geplant. Durch das padding verlängert er das content-element offenbar um die 100+100px weiter nach unten. (zumindest bei Firefox) Aber danke für den Vorschlag ;)

    Scheinbar bleibt einem da nichts anderes übrig, als auf ein Frameset umzusteigen - auch wenn ich die mega hässlich finde. :x

    Naja mein IE 8 machts auch nicht mit und das versteh nicht da er es ja eigentlich machen sollte^^

    Aber sonst voll und ganz zutreffend.
    Eine nicht ganz so schöne aber mögliche alternative wäre vllt. es mit '%' zu machen was jedoch die höhe des header und footer schwierig macht. Sonst versuch es doch mit max-height um das ganze auf eine maximale größe zu begrenzen?!

    MfG
    karlsve
    Das Problem mit den '%' ist, dass die header- und footer-höhen ja fest stehen sollen - also bei sagen wir mal 100px. '%' würde das ganze Bild wieder zerreissen. Das Problem mit der max-height ist, dass ich ja keine Maximale größe habe, welche ich da einsetzen könnte.

    Das Fenster wird beispielsweise auf 300x300px geöffnet - nun kann der User das Fenster ja auch maximieren. schon muss ich das content-element mit einer höhe von 800px (-oder was weiss ich) haben. Da ist nach oben hin ja kaum eine Grenze.

    Wie schon gesagt: Im Grunde soll es sich verhalten wie eine Tabelle, wo nur die obere und untere Zeile eine feste größe haben. Nur dass er halt, wenn der Inhalt in der Mitte zu groß wird scrollbar sein soll.

    Beitrag zuletzt geändert: 26.7.2009 0:43:31 von nerdinator
  6. nerdinator schrieb:
    Hm, das sah auf den ersten Blick nicht schlecht aus. Nur funktioniert es leider auch nicht ganz so, wie geplant. Durch das padding verlängert er das content-element offenbar um die 100+100px weiter nach unten. (zumindest bei Firefox) Aber danke für den Vorschlag ;)
    Hast du etwa die Höhe von `#content` auf 100% gesetzt? Ist das nötig? Man könnte die Höhe von `#content` einfach `auto` lassen... Dann gibt es das Problem nicht, dass es immer 200px zu groß ist.

    Ryan
  7. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    ryanblack schrieb:
    Hast du etwa die Höhe von `#content` auf 100% gesetzt? Ist das nötig? Man könnte die Höhe von `#content` einfach `auto` lassen... Dann gibt es das Problem nicht, dass es immer 200px zu groß ist.

    Ryan
    Das Problem ist, wenn ich die Größe des '#content' nicht fest angebe, scrollt der bei 'overflow:auto' nicht mehr, was ja recht wesentlich für mein Problem ist.

    Um noch zu verdeutlichen, was ich möchte (vielleicht wird dadurch die Fragestellung etwas eindeutiger):
    Ich möchte im '#header' eine überschrift haben, im '#footer' eine eingabezeile und im '#content' soll dann eine unbekannte Menge von Daten welche dann erst eingelesen werden wieder gegeben werden.(wie in einer Shoutbox ;) )
    Wenn mehr Daten vorhanden sind, als in den '#content' passen, soll er das halt scrollbar machen und immer nach unten scrollen. Wobei das nach unten scrollen bereits via Javascript bewerkstelligt ist - lediglich das 'scrollbar machen' bereitet mir Probleme.

    Nach einem Bekannten, den ich zu dem Thema befragt habe, gibt es dazu keine Lösung, da es wohl am Sinn von Div-Elementen vorbei geht - oder so ähnlich.

    Wenn jemand eine Lösung hat, wäre ich trotzdem glücklich, wenn mir die jemand mitteilt ;)
  8. nerdinator schrieb:
    Das Problem ist, wenn ich die Größe des '#content' nicht fest angebe, scrollt der bei 'overflow:auto' nicht mehr, was ja recht wesentlich für mein Problem ist.
    Wenn du height auf `auto` belässt und `overflow` nicht auf `auto` schaltest und #header & #footer `fixed` positioniert hast, dann werden die Scrollbalken des Browser Viewports automatisch angezeigt, wenn #content aus dem Rahmen geht. Wenn man den Viewport scrollt, dann scrollen #header & #footer nicht mit. (sie sind ja `fixed` positioniert) Perfekte Pseudo-Frames.

    Ryan
  9. nerdinator schrieb:
    Wenn jemand eine Lösung hat, wäre ich trotzdem glücklich, wenn mir die jemand mitteilt ;)


    Ist das hier nicht genau das was Du suchst?
    http://www.cssplay.co.uk/layouts/bodyfix.html
    http://www.cssplay.co.uk/layouts/basics.html



    Beitrag zuletzt geändert: 29.7.2009 2:19:13 von simuliertes
  10. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    simuliertes schrieb:
    nerdinator schrieb:
    Wenn jemand eine Lösung hat, wäre ich trotzdem glücklich, wenn mir die jemand mitteilt ;)


    Ist das hier nicht genau das was Du suchst?
    http://www.cssplay.co.uk/layouts/bodyfix.html
    Genau das ist es ;) Nun muss ich mal durchschauen, wie die das machen und mal gucken, ob ich das raubkopiert bekomme ^^

    Danke :)
  11. nerdinator schrieb:
    simuliertes schrieb:
    nerdinator schrieb:
    Wenn jemand eine Lösung hat, wäre ich trotzdem glücklich, wenn mir die jemand mitteilt ;)


    Ist das hier nicht genau das was Du suchst?
    http://www.cssplay.co.uk/layouts/bodyfix.html
    Genau das ist es ;) Nun muss ich mal durchschauen, wie die das machen und mal gucken, ob ich das raubkopiert bekomme ^^

    Danke :)


    pff um diese Uhrzeit noch wach, tztztz
    Hab grad nochmal editiert.
    Folgender Link macht es wohl einfacher es zu kopieren:
    http://www.cssplay.co.uk/layouts/basics.html
  12. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    Also wenn ich das richtig sehe, ist das prinzip ganz einfach:
    #top{
    	position:absolute;
    	top:0px;
    	height:100px;
    }
    #content{
    	position:absolute;
    	top:100px;
    	bottom:100px;
    	overflow:auto;
    }
    #bottom{
    	position:absolute;
    	bottom:0px;
    	height:100px;
    }
    Oder sehe ich das falsch? Oo

    EDIT: Ich sehe das wohl richtig. Zumindest Firefox tut, was er soll. Alle anderen eigentlich auch. Nur IE ist noch nicht getestet...

    Beitrag zuletzt geändert: 29.7.2009 2:48:48 von nerdinator
  13. nerdinator schrieb:
    Also wenn ich das richtig sehe, ist das prinzip ganz einfach:
    #top{
    	position:absolute;
    	top:0px;
    	height:100px;
    }
    #content{
    	position:absolute;
    	top:100px;
    	bottom:100px;
    	overflow:auto;
    }
    #bottom{
    	position:absolute;
    	bottom:0px;
    	height:100px;
    }
    Oder sehe ich das falsch? Oo

    EDIT: Ich sehe das wohl richtig. Zumindest Firefox tut, was er soll. Alle anderen eigentlich auch. Nur IE ist noch nicht getestet...


    Weil's mich auch interessiert habe ich mal eine komplett-Lösung gebastelt die bei mir in ff,Opera 9,ie 6 und Safari 3.2.2 funktioniert.

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <head>
    	<title>Ein Test mit dynamischem Content</title>
    <script type="text/javascript">
    function machmirvieltext (txt,anzahl)
    {
    	for (b=1;b<=anzahl;b++)
    	{
    		document.write('['+b+'] '+txt);
    	}
    }
    </script>
    <style type="text/css">
    div {border: 1px solid red;}
    html, body  {
    	height:100%; /* fix height to 100% for IE */
    	max-height:100%; /* fix height for other browsers */
    	/* hide overflow:hidden from IE5/Mac */ 
    	/* \*/ 
    	overflow:hidden; /*get rid of scroll bars in IE */
    	/* */ 
    	}
    	/* ALLE BROWSER */
    #content {
    	overflow:auto; 
    	position:absolute; 
    	top:123px; /* wie in #top */
    	bottom:55px; /* wie in #bottom */
    	left:0px; /* ganz links,weil keine navi... */
    	right:0px; 
    	}
    	/* EXTRAWURST FUER IE */
    * html #content {
    	height:100%; 
    	width:100%; 
    	top:0px; 
    	left:0px; 
    	border-top:123px solid #fff; 
    	border-bottom:55px solid #fff; 
    	border-left: 10px solid #fff; /*Rand angleichen, nicht unbedingt notwendig*/
    	z-index: 3;/*Muss kleiner sein als der z-index von top & bottom*/
    	}
    	
    	/* KOPF */
     #top{ 
     top: 0px;
     position:absolute;
     height:123px;
     overflow:hidden;
     z-index: 5;}
       /*FUSS*/
    #bottom {
     bottom: 0px;
     position:absolute;
     height:55px;
     overflow:hidden;
     z-index: 4;
     }
    
    </style>
    </head>
    
    <body>
    <div id="top" >
    <script type="text/javascript">machmirvieltext ('Kopf<br>',30)</script>
    </div>
    <div id="content">
    <script type="text/javascript">machmirvieltext ('Mitte<br>',40)</script>
    </div>
    <div id="bottom">
    <script type="text/javascript">machmirvieltext ('Fu&szlig;<br>',30)</script>
    </div>
    
    </body>
    </html>


    Wie ich das sehe ist der Trick eher das html & body eine 100%-Höhe+overflow:hidden haben, was verhindert das die Gesamte Seite Scrollbar gemacht wird...
  14. Autor dieses Themas

    nerdinator

    Kostenloser Webspace von nerdinator, auf Homepage erstellen warten

    nerdinator hat kostenlosen Webspace.

    Super, danke simuliertes ;)

    Problem also gelöst - Thread kann geschlossen werden ;)
  15. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!