Homepage selbermachen 7.852 Themen, 35.619 Beiträge

Drei-Spalten-Layout erstellen

Special-J / 6 Antworten / Baumansicht Nickles

Hallo allesamt,

ich bin schon lange dabei mir ein benutzerdefiniertes XHTML/CSS-Layout mit einem Header, Footer und dazwischen 3 Inhaltsspalten zu erstellen, wobei die Spalte in der Mitte flexibel in der Breite sein sollte.

Mein Grundgerüst habe ich mithilfe von Yaml (http://builder.yaml.de/##drop12) erstellt, aber irgendwie will es nicht klappen.
D.h. dass mein Layout nicht konstant in der Höhe bleibt, wenn zB eine der 3 Spalten länger ist als die anderen beiden, ziehen sich diese nicht mit und bleiben so lang, wie es der Inhalt es zulässt.

Habt ihr viellciht eine Idee oder einige CSS-Tipps?
Wäre dankbar dafür :)

bei Antwort benachrichtigen
Zaphod Special-J „Drei-Spalten-Layout erstellen“
Optionen
bei Antwort benachrichtigen
Special-J Zaphod „http://www.css4you.de/wslayout1/ex0010.html HTH, Z.“
Optionen

Sorry, aber das hilft mir leider nicht weiter. Mein Layout habe ich größtenteils schon fertig. Sieht alles wunderbar aus und kompatibel zu allen Browsern, doch wenn eine Spalte länger ist als die anderen es sind.

Hier ist ein kleines Beispiel, wie es eigentlich aussehen sollte:
http://specialjs.sp.funpic.de/example/example.html

Dieses von Yaml-generierte Beispiel zeigt, dass wenn mehr Inhalt in einer der 3 Spalten hinzugefügt wird, die Hintergründe der anderen 2 Spalten mitlaufen (was bei mir nicht klappt).

Ich hoffe, ich war deutlich genug :)

bei Antwort benachrichtigen
xafford Special-J „Sorry, aber das hilft mir leider nicht weiter. Mein Layout habe ich...“
Optionen

Das kannst Du umgehen, indem Du die 3 Spalten in einen gemeinsamen Container setzt und diesem Container einen passenden Hintergrund verpasst, also z.B. einen 1px hohen Streifen aus den 3 Spaltenfarben in der jeweiligen Breite und diesen mit background-repeat:repeat-y wiederholen lässt.

Um zu erzwingen, dass der umfassende Container wirklich so groß angezeigt wird wie die längste, enthaltene Spalte musst Du ihm noch per CSS das Attribut position:absolute mitgeben, denn sonst orientiert er sich (zumindest in IE und Mozilla) nicht an der Größe der enthaltenen Spalten.

Das CSS sollte dann also ungefähr so aussehen:

div#container
{
background-image:url("dein/bild.gif");
background-repeat:repeat-y;
position:absolute;
}

div.column
{
float:left;
}

div#column1
{
width:150px;
}

div#column2
{
width:350px;
}

div#column3
{
width:200px;
}

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Special-J xafford „Das kannst Du umgehen, indem Du die 3 Spalten in einen gemeinsamen Container...“
Optionen

Die 3 Spalten befinden sich bei mir auch in einem gemeinsamen Container, der widerrum nicht "absolut" ist; wenn ich dies aber tue, landet die Fußzeile bei mir oben unter dem Header, der relative zur gesamten Homepage geschaltet ist.
Wenn man das Problem mit der Fußzeile aber ignoriert, werden die 3 Spalten unterhalb immer noch nicht so angezeigt wie gewünscht.

Hier mein ungefährer Code:

CSS:
html { height: 100%; }
* html #page_margins { height:100%; }
/* Der Außenabstand der Homepage: */
#page_margins {
min-width:740px;
max-width:100em;
margin: 0 auto;
height: auto;
min-height:100%;
position:relative;
}
/* Sub-Container: */
#page { padding-bottom: 57px; }
#header { position:relative; width:100%; }
#container { margin:0; padding:0; width:100% }
/* die 3 Spalten: */
#col1 { float: left; width: 200px; } /* links */
#col2 { float:right; width: 200px; } /* rechts */
#col3 { width:auto; margin: 0 200px } /* mitte */
#footer {
position:relative;
min-width: 740px;
max-width: 100em;
margin: -57px auto 0; /* wird von #page_margins abgezogen, damit es am unteren Rand bleibt */
}
#header, #container, #footer { clear:both;}

XHTML:
<div id="page-margins">
<div id="page">
<div id="header">Inhalt</div>
<div id="container">
<div id="col1">Navigation</div>
<div id="col2">Sidebar</div>
<div id="col3">Content</div>
</div>
</page>
</div>
<div id="footer">Fusszeile</div>

PS: Der meiste Code wurde von Yaml übernommen, bis auf die Breiten-/ Höhenangaben etc. (damit das ganze auch in anderen Browsern kompatibel bleibt)

bei Antwort benachrichtigen
xafford Special-J „Die 3 Spalten befinden sich bei mir auch in einem gemeinsamen Container, der...“
Optionen

Hmmm, wann hast Du denn das Tag "</page>" erfunden? ;O)...

Du musst aufpassen, dass Du nicht ein Webdesigner-Vergehen (Tabellen-Layouts) gegen ein anderes Tauscht (DIV-Soup).

Bevor wir aneinander vorbei reden sollten hier mal was ich verstanden habe wie dein Layout aussehen soll:

Du willst eine zentrierte Darstellung deiner Seite im Browser mit einer variablen Breite (also keine feste Inhaltsbreite, sondern abhängig von der Größe des Browserfensters).

Du willst oben einen Seitenkopf mit voller Breite und variabler Höhe.

Du willst unten einen Seitenfuß mit voller Breite und variabler Höhe.

Du willst, dass der Inhalt die linke und rechte Spalte nicht umfließt, sondern dass alle Spalten mit Hintergrund über die komplette Höhe dargestellt werden.

Falls das alles so weit zutrifft hätte ich da auf die Schnelle nur eine Lösung für. Schau Dir mal das Beispiel unter folgender Adresse an:

www.xafford.de/column.html

Bis auf den renitenten IE6 sieht es unter allen Browsern so aus, wie ich meine dass Du es planst. Allerdings ist mir auf die Schnelle noch keine passende Lösung für den IE6 eingefallen.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Special-J xafford „Hmmm, wann hast Du denn das Tag erfunden? O ... Du musst aufpassen, dass Du...“
Optionen

Ok, damit wir am Ball bleiben, hier erstmal ein Screenshot des Prototyps meiner Homepage (das ich gerade hochgeladen habe):

http://s7.directupload.net/file/d/1559/bapwnyzs_jpg.htm

Wie du siehst, soll die obere Leiste (header) eine feste Höhe, aber in der Mitte eine flexible Breite haben; und das selbe gild für die Fußzeile (footer).
Die Spalten rechts und links haben keine "richtigen" Hintergrund, nur eben einen border, der sie umfließt. Und wie du sehen kannst geht dieser nicht bis zum Boden, da rt nicht voll beschrieben ist.

Das ganze hat nichts mit Tabellenlayout zutun und sollte möglichst in allen Browser gleich aussehen; von IE5 bis IE7, Firefox, Mozilla, Opera usw.

bei Antwort benachrichtigen