Umstellen von Tabellen auf DIV´s

Status
Nicht offen für weitere Antworten.

Promaetheus

Mitglied
Ich habe bisher immer mit Tabellen und OHNE (ja ich weiss ich sollte mich schämen) DOCTYPE gearbeitet. Das hatte den grossen Vorteil dass ich ganz simpel ein 3-spaltiges Layout mit 100% Höhe erstellen konnte. Nun wollte ich mich jedoch der Zeit anpassen und das Ganze mittels DIV´s lösen, denke aber dass das unmöglich wenn man nicht auf JavaScript oder ähnliches zurückgreift.

Hier habe ich ein Beispiel-Layout mit Tabellen, welches absolut simpel und kurz ist (Beispiel online: TABELLEN):
Code:
<html>

<head>
<title>3-spaltiges Layout mit 100% Höhe</title>
</head>

<body topmargin="0">
  <table border="0" cellpadding="10" cellspacing="0" width="700" height="100%" align="center">
    <tr>
      <td width="100%" colspan="3" height="150" bgcolor="#808080" align="center">Header</td>
    </tr>
    <tr>
      <td height="100%" bgcolor="#FF0000" valign="top">Linke Spalte</td>
      <td height="100%" bgcolor="#FFFF00" valign="top">Inhalt, bzw. mittlere Spalte</td>
      <td height="100%" bgcolor="#009933" valign="top">Rechte Spalte</td>
    </tr>
    <tr>
      <td width="100%" colspan="3" height="50" bgcolor="#666666" align="center">Footer</td>
    </tr>
  </table>
</body>

</html>

Ich hatte dann versucht das Ganze mittels DIV´s und CSS zu lösen, komme jedoch auf keinen grünen Zweig damit das Ganze genau so dargestellt wird, sprich über 100% der Höhe wenn wenig Text vorhanden ist, sich jedoch anpasst wenn mehr Text darinsteht.

Gibt es überhaupt eine "normale" Lösung mit DIV´s und CSS um diese Problematik zu behandeln?

Ich habe mal versucht eine Lösung mit DIV´s anzustreben, jedoch bekomme ich die 100% nicht in den Griff (Beispiel online DIV´s):
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>

<head>
<style>
*{
	padding: 0;
	margin: 0;
	border: 0px none;
}
html, body {
 	height: 100%;
	background: #FFFFFF;
	text-align: center;
}

#container {
	width: 700px;
	margin: 0 auto;
	text-align: left;
  	position: relative;
  	min-height: 100%;
	height: auto !important;
	height: 100%; /* IE */
	background: #FFFFFF;
}

#header {
	padding: 10px;
	line-height: 150px;
	background: #808080;
	text-align: center;
}

#box_links {
	float: left;
        clear: left;
	background: #FF0000;
        width: 150px;
}

#box_mitte {
        float: left;
  	padding: 0 2em 60px 2em;
  	background: #FFFF00;
}

#box_rechts {
	float: right;
        clear: right;
	background: #009933;
}

#footer {
  	width: 100%;
  	line-height: 50px;
  	background: #666666;
  	position: absolute;
  	bottom: 0;
	text-align: center;
}
</style>
</head>

<body>
<div id="container">
  <div id="header">Header</div>
  <div id="box_links">Linke Spalte</div>
  <div id="box_mitte">Inhalt, bzw. mittlere Spalte</div>
  <div id="box_rechts">Rechte Spalte</div>
  <div id="footer">Footer</div>
</div>

</body>

</html>
 
Zuletzt bearbeitet:
Du möchtest einen DIV haben, welcher eine Höhe von über 100% hat? Wieso das denn, dann muss man ja sogar scrollen, wenn wenig Text auf der Seite ist.
So wie du es hast, stimmt es schon!
Code:
html, body {
  	 height: 100%; /* wichtig */
}
#box{
    	 min-height: 100%;
  	 height:auto !important; /* moderne Browser */
  	 height:100%; /* IE */
}
Ich bin noch nie auf diese Idee gekommen, aber kannst ja mal Werte über 100% ansetzten. Oder wenn es eh riesig sein soll, nimm doch Angaben ohne Prozent?

Sollte ich dich missverstanden haben, sorry!
 
Ich denke du hast mich missverstanden. Vergleich mal meine beiden Beispiele "Tabellen" vs. "DIV´s". Dann siehst du was ich meine. Im Tabellenbeispiel hat die Seite immer eine Mindesthöhe von 100%. In den DIV´s auch, ABER: Der "Mittelteil", ergo die 3 Spalten sind in der Tabellenlösung in 100% Höhe, sprich die Seite ist immer schön ausgefüllt. In der DIV-Lösung sind die 3 DIV-Spalten nur so hoch wie der Inhalt des jeweiligen DIV´s (Der Rest, sprich das was fehlt ist der blaue Anteil). DAS möchte ich umgehen, bzw. vermeiden. Am besten siehst du den Unterschied wenn du beide Seiten (Online Beispiele) miteinander vergleichst: TABELLEN vs. DIV´s
 
Zuletzt bearbeitet:
Ich habe das Problem gelöst. Nun verwende ich einfach für den "freien" Platz, sprich die fehlende Resthöhe der DIVs ein Hintergrundbild: LÖSUNG

Ein einziges Problem habe ich nun. Ich wollte nun nachträglich die DIVs so formatieren dass der Text nicht so am Rand klebt. Meine Lösung wäre padding gewesen. Sonderbarerweise wird dann aber nicht nur der Text eingerückt, sondern auch das DIV um den Betrag vergrössert. Ich dachte padding würde einfach nur den Textabstand zum Rahmen definieren?!
 
Zuletzt bearbeitet:
Du musst den Bereich innen um "padding" verkleinern.

Die Dimensionierung von Elementen wird durch das Box-Modell der CSS 2-Spezifikation eindeutig festgelegt.
Die Dimensionen des Inhaltes werden durch die Werte der Eigenschaften width und height bestimmt.
Zu diesen Werten werden die Werte von padding und border-width dazugerechnet, um die Größe eines Elementes zu berechnen.
Quelle: http://carsten-protsch.de/zwischennetz/doctype/box_model_bug.html

Wird ein Element mit einer Breite von 200 Pixel, einer Höhe von 100 Pixel und einem Innenabstand
und Rahmen von je 20 Pixel Stärke auf allen Seiten definiert, beträgt die tatsächliche Breite letztendlich
280 Pixel (20 für border-left, 20 für padding-left, 200 für width, 20 für padding-right und 20 für border-right),
die Höhe 180 Pixel (20 für border-top, 20 für padding-top, 100 für height, 20 für padding-bottom und 20 für
border-bottom). Ein zusätzlich definierter Außenabstand müsste zu diesen Werten nochmals addiert werden.
Quelle: http://de.selfhtml.org/css/formate/box_modell.htm
 
Danke vielmals. Also wäre es wohl das einfachste anstatt rumzurechnen einfach ein DIV ins DIV einzubauen mit einem spezifischen padding. Dann stört das auch nicht eine eventuelle Dynamik.
 
Danke vielmals. Also wäre es wohl das einfachste anstatt rumzurechnen einfach ein DIV ins DIV einzubauen mit einem spezifischen padding. Dann stört das auch nicht eine eventuelle Dynamik.
Hi,

entweder greifst du zu einer Verschachtelung, um dem inneren Element den gewünschten Innenabstand mit auf dem Weg zu geben, oder du orientierst dich einfach an der gängigen CSS-Boxmodell-Regel.

mfg Maik
 
Ich werde mich dann wohl für das Modell mit der Verschachtelung entscheiden, da ich im vorhinein nie weiss wieviel padding dann gut aussieht und man eventuell probieren muss. Das wäre dann eine Bastelei und einfacher mit der Verschachtelung zu regeln.
 
Status
Nicht offen für weitere Antworten.
Zurück