Mehrzeiliges Layout mit 100% Höhe (aber ggf. innere Scrollbalken)

Status
Nicht offen für weitere Antworten.

Tobias Menzel

Erfahrenes Mitglied
Hallo liebe CSS-Cracks,

Folgendes anvisiertes Layout bereitet mir im Moment Kopfzerbrechen:

layout.gif

Der rote Rahmen markiert das komplette Browserfenster.

Die Bereiche A und D enthalten Header- und Footergrafiken in feststehender Höhe, wobei D immer am unteren Rand des Fensters "kleben" soll.

Im Bereich B befindet sich ein Objekt fester Größe (E, hier ein Flashfilm); im Bereich C wechselnde Textinhalte.

Wenn das Browserfenster vertikal verkleinert wird, soll (zumindest solange die mittlere Zeile höher als das Objekt E ist) kein vertikaler Scrollbalken im Browser zu sehen sein. Wird Bereich C kleiner als der Inhalt, soll nur in diesem Bereich vertikal gescrollt werden können (in der Grafik der gelbe Bereich als Scrollbalken; hier würde ich ein DIV mit overflow:auto setzen).

Tabellenlos habe ich es nicht browserübergreifend hinbekommen, den Footer D konstant am unteren Rand des Fensters zu lassen, während C D nicht überlappt.

Mein Ansatz war daher bisher folgender:
  • Browser im Quirksmode laufen lassen

  • body und html bekommen 100% Höhe

  • Eine Tabelle mit 100% Höhe anlegen, die drei Zeilen (in der Grafik rechts grün markiert) besitzt.

  • Zeilen A und D bekommen eine feste Höhe, die Zeile mit den Zellen B und C eine variable.

Dies funktioniert im IE recht gut; zumindest so lange ich den Flashfilm E nicht in der Zelle B einbette: Dann bekomme ich unabhängig von der Größe des Flashfilms einen vertikalen Scrollbalken (sprich: die Tabellenhöhe wird geringfügig höher als 100% des Fensters).

im Firefox funktioniert das innere Scrollen im Bereich C auf diese Weise nicht: die mittlere Zeile passt sich immer der Höhe des Inhalts an, so dass der Footer ( D ) teilweise aus dem sichtbaren Bereich des Fensters verschwindet.

Ich würde dieses Layout gerne zumindest für die "großen" Browser halbwegs zuverlässig umsetzen. Wenn jemand einen Tipp oder Ansatz hat, würde ich mich freuen!

Der Vollständigkeit halber hier noch einmal mein bisheriger Code:
HTML:
<table class="mainframe" cellpadding="0" cellspacing="0">
	<tr class="topframe">
		<td colspan="2">
			<img src="elements/topframe.jpg" width="100%" height="97" alt="" />
			<img src="elements/hr.jpg" width="100%" height="23" alt="" />
		</td>
	</tr>
	<tr class="content">
		<td class="menue">
			{FLASHOBJECT}
		</td>
		<td class="content">
			<div class="content">
				{CONTENT}
			</div>
		</td>
	</tr>
	<tr class="bottomframe">
		<td colspan="2"><img src="elements/bottomframe.jpg" width="100%" height="97"  alt="" /></td>
	</tr>
</table>

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

table.mainframe {
 display:   table;
 width:    100%;
 height:    100%;
 margin:    0px;
 padding:   0px;
}

tr.topframe {
 height:    1%;
}

tr.bottomframe {
 height:    1%;
}

tr.topframe td {
 vertical-align:  top;
}

tr.bottomframe td {
 vertical-align:  bottom;
}

tr.content {
 background-color: #FFFFFF;
}

td.content {
 margin:    0px;
 padding:   10px;
 text-align:   left;
 width:    100%;
 vertical-align:  top;
}

td.menue {
 text-align:   right;
 vertical-align:  top;
 width:    350px;
 height:    auto;
 padding:   0px;
 padding-top:  20px;
 border-right:  1px solid #006600;
}

div.content {
 margin:    0px;
 padding:   0px;
 width:    autp;
 height:    100%;
 overflow:   auto;
}

object, embed {
 display:   block;
 margin:    0px;
 padding:   0px;
}

img {
 display:   block;
 margin:    0px;
 padding:   0px;
}

Grüße,

Tobi
 
Hallo Maik,

zunächst einmal danke für den Tipp. :)

Mit JavaScript kann ich bei diesem Vorhaben nicht arbeiten, aber möglicherweise komme ich mit der Quirksmode-Variante hin. Ich werde mich mal an einer Umsetzung versuchen, und mich ggf. noch einmal melden.

Gruß
.
 
Hi Maik,

vielen Dank noch einmal für Deinen Ansatz: Ich habe es nun soweit hinbekommen.

Das einzige Manko wäre noch, dass der Menübereich (links) bei sehr kleinen Fenstern entweder abgeschnitten wird, oder (wie bei Deinem Link zu Stu Nicholls zu sehen) einen eigenen Scrollbalken bekommt.

Ideal wäre es gewesen, wenn der linke Bereich immer zu sehen wäre, und nur in diesem Fall Rollbalken im Browserfenster angezeigt würden (eher ein typisches Tabellenverhalten) - relevant wird das bei mir allerdings erst, wenn das Browserfenster vertikal kleiner als 700 Pixel ist.

Grüße,

Tobi
.
 
Ich bins nochmal,

zum Hintergrund: Es geht um die Website eines Kundens einer Agentur, mit der ich zusammenarbeite. Ich stelle das Grundgerüst für das Layout und mein PHP-Templatesystem, der Inhaber der Agentur erstellt die einzelnen Unterseiten mit Dreamveaver im Layout-Modus.

Abgesehen davon, dass der Quelltext auf diese Weise natürlich nicht validiert, dürften zumindest in aktuellen Browsern keine gravierenden Anzeigeprobleme auftreten. Im IE7 "flackert" der Inhaltsbereich (rechts) beim Scrollen, oder er verschwindet ganz, wenn man in den Bereich klickt.

Ein Link zu dem Problem: http://umwelttechnik-bornemann.de/neu/V2/?section=profil

Das Stylesheet für den Grundaufbau liegt hier: http://www.umwelttechnik-bornemann.de/neu/V2/styles/main.css

Die Lösung "Markup validieren" kommt hier leider nicht in Frage, da mein Auftraggeber nur im WYSIWHG-Modus arbeitet - mir wäre aber schon geholfen, wenn das DW-Markup eindeutig als Ursache des Problems definiert werden könnte (dann müsste die Seite wieder auf ein einfaches Tabellenlayout aufbauen).

Vielleicht gibt es aber eine einfache Lösung oder einen Workaround; von daher würde ich mich freuen, wenn Maik oder ein anderer einen Blick darauf werfen könnte.

Grüße,

Tobi
.
 
Hi,

Ich muss gestehen, ich sehe nun keine graviernde Abweichung zu dem Beispiel mehr:
CSS:
html {
	height:100%; 
	max-height:100%; 
	padding:0;
	margin:0; 
	border:0; 
	background:#fff; 
	font-size:76%; 
	font-family:georgia, palatino linotype, times new roman, serif;
	/* hide overflow:hidden from IE5/Mac */ 
	/* \*/ 
	overflow: hidden; 
	/* */ 
}

body {
	overflow:			hidden;
	max-height:			100%;
	padding:			0;
	margin:				0;
	border:				0;
}

#mainmenue {
	position:			absolute;
	top:				120px;
	left:				0px;
	bottom:				97px;
	overflow:			hidden;
	vertical-align:		top;
	border-right:		1px solid #006600;
}

#maincontent {
	position:			absolute;
	z-index:			3;
	top:				120px;
	left:				350px;
	bottom:				97px;
	right:				0;
	overflow:			auto;
}

* html #maincontent {top:0; left:0; right:0; bottom:0; height:100%; max-height:100%; width:100%; overflow:auto; position:absolute; z-index:3; border-top:100px solid #fff; border-bottom:50px solid #fff; border-left:200px solid #fff;}

Und der Doctype:
HTML:
<!-- Put IE into quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

Resultat: Der IE7 zeigt mit diesem Doctype keinen Scrollbalken mehr im Inhaltsbsreich (#maincontent) an. An irgend einer entscheidenden Stelle muss ich etwas übersehen haben, aber was, das ist mir nicht klar ...

Gruß
.
 
Meine Mittagspause ist bald rum, daher werd ich mir das heute Nachmittag mal in aller Ruhe anschauen. ;)
 
Sodele, da bin ich wieder.

Wenn ich deine Inhalte in Stu's "Grundgerüst" einbaue, gibt es die beschriebenen Probleme im IE7 nicht.

Hier mein Testdokument:

Code:
<!-- Put IE into quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title> stu nicholls | CSS PLaY | cross browser fixed header/footer/left column layout scrolling middle area </title>
<style type="text/css">
html {
height:100%;
max-height:100%;
padding:0;
margin:0;
border:0;
background:#fff;
/* hide overflow:hidden from IE5/Mac */
/* \*/
overflow: hidden;
/* */
}

body {height:100%; max-height:100%; overflow:hidden; padding:0; margin:0; border:0;}

#content {overflow:auto; position:absolute; z-index:3; top:100px; bottom:50px; left:350px; right:0; }

* html #content {top:0; left:0; right:0; bottom:0; height:100%; max-height:100%; width:100%; overflow:auto; position:absolute; z-index:3; border-top:100px solid #fff; border-bottom:50px solid #fff; border-left:350px solid #fff;}


#head {position:absolute; margin:0; top:0; left:0; display:block; width:100%; height:100px; background:url(clouds.jpg) #000; background-position:0 0; background-repeat:no-repeat; font-size:4em; z-index:5; overflow:hidden; color:#fff;}
#foot {position:absolute; margin:0; bottom:0; left:0; display:block; width:100%; height:50px; font-size:1em; z-index:5; overflow:hidden; background:rgb(76,76,76); color:#fff;}

#left {position:absolute; left:0; top:100px; bottom:50px; width:350px; z-index:4; overflow:auto; }

* html #left {height:100%; top:0; bottom:0; border-top:100px solid #fff; border-bottom:50px solid #fff; color:#fff;}
</style>
<link href="http://umwelttechnik-bornemann.de/neu/V2/styles/def.css" rel="stylesheet" type="text/css" />

<script type="text/javascript" src="http://umwelttechnik-bornemann.de/neu/V2/scripts/activateSWF.js"></script>
</head>

<body>
<div id="head"><img src="http://umwelttechnik-bornemann.de/neu/V2/elements/topframe.jpg" width="100%" height="97" alt="" />
<img src="http://umwelttechnik-bornemann.de/neu/V2/elements/hr.jpg" width="100%" height="23" alt="" /></div>
<div id="foot"><img src="http://umwelttechnik-bornemann.de/neu/V2/elements/bottomframe.jpg" width="100%" height="97"  alt="" /></div>

<div id="left">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="350" height="377" id="menue" align="middle">
                <param name="allowScriptAccess" value="sameDomain" />
                <param name="allowFullScreen" value="false" />
                <param name="movie" value="http://umwelttechnik-bornemann.de/neu/V2/elements/menue.swf" />
                <param name="quality" value="high" />
                <param name="bgcolor" value="#FFFFFF" />
                <param name="menu" value="false" />
                <param name="wmode" value="opaque" />
                <param name="flashvars" value="section=profil" />
                <embed src="http://umwelttechnik-bornemann.de/neu/V2/elements/menue.swf" wmode="opaque" menu="false" quality="high" flashvars="section=profil" bgcolor="#FFFFFF" width="350" height="377" name="menue" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
        </object>
        <script type="text/javascript">activateSWF(document, 'menue');</script>

</div>

<div id="content">
<div class="content">
                <table width="100%" border="0">
<table width="90%" border="0">
    <td width="13%"><span class="Überschrift"><img src="http://umwelttechnik-bornemann.de/neu/V2/bilder/profil_tb.jpg" width="75" height="50"></span></td>
    <td width="87%" valign="middle" class="Überschrift"><strong>Profil </strong></td>
  </tr>
  <tr>
    <td height="16" colspan="2" class="def">&nbsp;</td>
  </tr>
</table>
<table width="90%" border="0">
  <tr>
    <td colspan="2" valign="top"><p class="def Stil1">Fossile Brennstoffe sind teuer und gehören bald der  Vergangenheit an - soweit die allgemein bekannte Aussage.</p>
        <ul>
          <li class="def"><strong> Können Alternativen zur Energiegewinnung schon jetzt wirtschaftlich sein?</strong></li>
          <li class="def"><strong> Ist Sonnenenergie sinnvoll? </strong></li>
          <li class="def"><strong> Kann Erdwärme meinen Heizbedarf decken? <br>
          </strong></li>
          <li class="def"><strong>Spricht etwas gegen eine moderne Gasbrennwertanlage, oder gegen Hybridsysteme?</strong></li>
        </ul>
      <p>&nbsp;</p></td>
  </tr>
  <tr>
    <td width="50%" valign="top"><p class="def">Die Umwelttechnik  Bornemann GmbH ist ein neutraler Anbieter für umfassende Energie- und  Heizsysteme.&nbsp; Führende Hersteller wie z.B.  Tecalor &nbsp;stellen das technologische  Knowhow zur Verfügung, dadurch kann sich Umwelttechnik Bornemann auf die  Analyse, Beratung und Konfiguration konzentrieren. </p>
      <p class="def"><br>
        <img src="http://umwelttechnik-bornemann.de/neu/V2/bilder/energieausweis.jpg" width="300" height="223" /></p>
      <p class="def"><br>
        Das Ergebnis ist eine auf  Effizienz und Nachhaltigkeit ausgerichtete Energieversorgung, in Abhängigkeit  speziell ermittelter Bedarfsberechnungen.</p>
    <p class="def"> Es ist eben nicht nur eine bestimmte Lösung der goldene Weg,  sondern die intelligente Verschmelzung moderner Technologien &ndash; dies ist die  Kernkompetenz von Umwelttechnik Bornemann.</p></td>
    <td width="50%" valign="top"><p>&nbsp;</p></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
<p class="def"></p>

        </div>

</div>

</body>
</html>
 
Status
Nicht offen für weitere Antworten.
Zurück