Ich dachte, ich probiere mal ein paar gängige Mehrspalten-Layout-Stile mit fließender Breite aus, die mit CSS notorisch schwierig sind.
Eine Möglichkeit, ein fließendes Mehrspaltenlayout zu realisieren, ist die Einstellung der Spalten mit Prozentwerten. Zum Beispiel, indem eine linke Spalte mit 19 % Breite und eine rechte Spalte mit 80 % Breite gefloatet werden (weniger als 100 % verhindert, dass sie sich gegenseitig überlappen und herunterfallen). Ich mag diese Methode überhaupt nicht. Sie verhindert, dass man pixelbasierte Abstände auf diesen Spalten hat (problematisch), was zu zusätzlichen divs führt. Noch schlimmer ist, dass die "Gutter" (Abstände) zwischen diesen beiden Spalten wachsen und schrumpfen, sodass am schmalsten Fenster des Browsers 1 % zu schmal ist und am breitesten zu breit.
Eine weitaus bessere Technik für fließende Breiten (vorausgesetzt, Sie sind damit einverstanden, dass nur eine Ihrer Spalten die "fließende" ist) ist, sich überhaupt nicht auf Prozentwerte zu verlassen, sondern stattdessen Min- und Max-Breiten für eine einzelne Spalte zu verwenden. Tatsächlich ist diese einzelne Spalte keine wirkliche Spalte, sondern die gesamte Breite des Layouts. Der Inhalt darin kann durch Abstände von den Rändern weggedrückt werden, was Platz für absolut positionierte Seitenleisten schafft.
Diese Technik hat zahlreiche Vorteile
- Keine Floats bedeuten ein viel weniger fragiles Layout. Keine Sorgen über Spalten, die sich ausdehnen und den Inhalt, den sie enthalten, sprengen
- Abstände zwischen den Spalten können konsistent gesteuert werden
- Generell Pixel-basiert, was pixelbasierte Abstände/Ränder ermöglicht
Für eine sehr gute Zusammenfassung der hier wirkenden Theorien, siehe Dan Rubins Absolute Columns. Diese sind sehr ähnlich, nur mit der Idee, sie auf fließende Breiten auszudehnen.

Siehe die Demos
IE 6
Ich bin sicher, die meisten von Ihnen haben sofort an all die Probleme mit IE 6 gedacht. Wir wissen ganz genau, dass min/max-Breite in IE 6 nicht funktionieren wird. Und top/left/bottom oder height: 100 % für diese Seitenleisten werden auch nicht funktionieren. Was also tun wir?
Es gibt eine Reihe von Möglichkeiten, damit umzugehen, Sie müssen nur die genaue Situation auf Ihrer eigenen Website beurteilen, um zu entscheiden, wie. Vielleicht stört es Sie nicht, wenn min-max-Breite nicht funktioniert (alles, was in IE 6 passiert, ist, dass die max-Breite 100 % und die min-Breite 0 % ist). Vielleicht sind Ihre Seitenleisten nicht unterschiedlich gefärbt, sodass es Ihnen egal ist, ob sie bis zum Ende reichen oder nicht.
Ich denke, die eleganteste Lösung für den Umgang mit IE 6 (wie Dan in seinem Absolute Columns Artikel vorgeschlagen hat) ist das Dean Edwards IE7.js Skript. Werfen Sie einfach dieses kleine Juwel in den Kopfbereich und Ihre Probleme sind gelöst
<!--[if lt IE 7]>
<script src="//ie7-js.googlecode.com/svn/version/2.0(beta3)/IE7.js" type="text/javascript"></script>
<![endif]-->
Testen
Ich habe mir das in IE 6 und höher sowie in allen anderen beliebten Browsern, die ich installiert habe, angesehen und es hat überall funktioniert. Wenn Sie jedoch Probleme feststellen, lassen Sie es mich wissen und wir können Lösungen erarbeiten.
*Halb und Halb nutzt Prozentwerte und passt nicht wirklich zur Theorie der anderen Beispiele (ist aber trotzdem potenziell nützlich).
Na Chris?!
Ich komme gerade erst auf deine Seite und wollte dir sagen, dass ich sie mag und du einen tollen Job machst. Danke für all die Infos :)
Ich wollte nur meine persönliche Meinung zu deinen Beispiel-Layouts und anderen ähnlichen im Web äußern.
Ich denke, es ist sehr wichtig, wenn man diese Techniken anwendet, genau auf seine Typografie zu achten
a) Wortanzahl pro Zeile
b) Zeilenhöhe (Durchschuss)
c) Schriftgröße
Offensichtlich beeinflussen all diese Faktoren (und wahrscheinlich mehr) die Lesbarkeit Ihrer Seite. Es ist ein Muss, dass wir diese berücksichtigen, bevor wir den Text einfach "fließen" lassen.
Ich würde gerne Ihr Feedback dazu hören.
AG
Absolut, all diese Dinge sind wichtig. Wörter pro Zeile können in einer fließenden Umgebung leicht zu einem Problem werden. Das ist ein weiterer Grund, warum die Verwendung von min- und max-Breiten ideal ist, da man diese so einstellen kann, dass nur passende Längen zugelassen werden.
Durch die Verwendung von em-Einheiten anstelle von Prozent ist dies durch einige Berechnungen leicht möglich.
Zunächst einmal **muss die Zeilenhöhe keine Einheit angegeben haben**. Sie können Ihre p { line-height: 1.5; } geben und sie wird vom Browser berechnet.
Schriftgrößen können ebenfalls berechnet werden, solange Sie darauf achten, die Breiten der übergeordneten divs zu verfolgen. Dasselbe kann dank max-width für die Zeilenlänge getan werden.
Für weitere Informationen zu fließenden Gittern und Berechnungen, siehe den Artikel Fluid Grids von ALA
@koew – Ich wollte gerade die ALA 1em = 16px Formel vorschlagen. Es ist gute Ware und erfordert nicht viel Herumfummeln mit IE-Browsern.
Oder Sie könnten den 62,5%-Trick verwenden: Setzen Sie die Schriftgröße Ihres Körpers auf 62,5 %. Dann wird 1,0em als 10px, 1,3em als 13px, 2,5em als 25px berechnet. Es ist ein guter Trick, wenn Sie nicht an em-Berechnungen gewöhnt sind und trotzdem Dinge pixelig haben möchten.
Wow, das ist wirklich großartig, danke Chris (wann schläfst du eigentlich). Ich benutze das IE7.js Skript schon seit einer Weile und ich finde, es funktioniert wirklich großartig, viel besser als Herumfummeln mit IE6 und darunter. Außerdem haben Sie die zusätzliche Befriedigung zu wissen, dass Sie diejenigen bestrafen, die immer noch IE6 verwenden, indem Sie sie die zusätzliche Datei herunterladen lassen.
Danke für die Layout-Packs, mach weiter so :)
Was passiert, wenn Sie mehr Text in der fließenden Spalte haben? Die Seite wird komplett kaputt gehen.
Die Lösung wird wahrscheinlich sein: overflow:auto; wie im Dan Rubin Artikel.
Ich habe das Problem mit fließenden Spalten auf sehr einfache Weise gelöst, indem ich einfach alles um die fließende Spalte herum blockiert habe :)
Hier ist die Lösung: Emastic Templates
Einige wirklich schöne Methoden dort. Ich war nie ein großer Fan von fließenden Layouts, aber sicherlich, wenn Sie min/max-Breite verwenden, können Sie einige der größeren Probleme eines reinen Prozentansatzes leicht angehen (wie z.B. die Layout-Brüche, die auf wirklich hochauflösenden Bildschirmen auftreten).
Der feste/fließende Ansatz ermöglicht das Beste aus beiden Welten, um für eine feste Breite zu gestalten, aber auch für diejenigen, die durch kleinere Fenster oder auf ungewöhnlich niedrig aufgelösten Bildschirmen ansehen.
Ich habe das vor einiger Zeit versucht und hatte Probleme unter IE……
Ich habe auch bemerkt, dass man einen strikten Doc-Type haben musste.
Ich erinnere mich an einen Artikel von A list aprt http://www.alistapart.com/articles/fluidgrids, während ich deinen gelesen habe. Danke Chris.
IE7.js ist fantastisch. Das einzige kleine Problem bei der Verwendung wie hier ist, dass das Layout bricht, wenn der Benutzer JavaScript deaktiviert hat. Natürlich ist das irrelevant, wenn Sie es verwenden, um ein Layout zu entwerfen, das in IE6 sowieso nicht möglich wäre :-P
CSS-Anfängerfrage, bezogen auf das [Fest – Fließend – Fest] 3-Spalten-Beispiel
Momentan ist die mittlere Spalte fließend.
#main-content { position: absolute; right: 0; top: 0; width: 160px; bottom: 0;
background: white; padding: 0 10px }
Was wäre die CSS für #main-content, um sie fest zu machen?
d.h.: um **alle 3 Spalten fest** zu bekommen?
Danke für die Hilfe!
Um diese fest zu machen, setzen Sie einfach eine BREITE anstelle von MIN und MAX Breite.
Hallo Chris,
Entschuldigung, mein Fehler in meiner obigen Nachricht…
Momentan ist die CSS-Definition für die "fließende" mittlere Spalte:
#main-content { padding: 0 190px; background: white; }
Wie würde die obige CSS-Definition aussehen,
um die mittlere Spalte (Inhalt) fest zu machen?
d.h.: genau wie die 2 Seitenleisten (links & rechts) jetzt fest sind.
Benötige alle 3 Spalten mit "fester" Breite…
Danke!!
Setzen Sie die Breite am #page-wrap, das hätte ich sagen sollen.
Tolle Tipps Chris~
Es gibt ein Problem mit diesen Layouts allerdings…
Da Sie absolute Positionierung für die Seitenleisten verwenden, was passiert, wenn der zentrale Inhalt niedriger ist als die Seitenleiste? Der Footer rutscht mit dem fließenden zentralen Inhalt nach oben, wodurch die Seitenleisten durchscheinen.
Ich schreibe gerade einen Artikel über etwas Ähnliches, den ich wahrscheinlich nächste Woche veröffentlichen werde, und ich würde wirklich gerne Ihre Meinung dazu hören.
Ich habe eine min-height (mit *html Hack mit einer gesetzten Höhe für IE6) auf einem Container verwendet, der die Seitenleisten und den zentralen Inhalt umschließt.
Auf diese Weise, wenn der zentrale Inhalt nicht viel Inhalt hat (zum Beispiel eine Fehlerseite mit einem Satz), rutscht der Footer immer noch nicht über die Seitenleisten hinaus. Das hat für mich bei früheren Projekten funktioniert :-)
-Soh
Hallo Soh,
Der absolut sichere Weg wäre, overflow: auto; auf den Seitenleisten zu setzen, damit sie nicht unten herausragen, sondern stattdessen eine Scrollleiste für Überläufe erhalten.
Ein anderer Weg wäre die Höhe der Inhalte mit JavaScript und das Setzen von #page-wrap auf mindestens diese Höhe.
Ich konnte sehen, dass die min-height auf dem Wrapper in einigen Situationen funktionieren würde, aber dieser Wert ist eher willkürlich und nicht völlig narrensicher. Es sei denn, ich verstehe es nicht richtig. Ich kann es kaum erwarten, Ihre Sichtweise zu sehen!
Guter Punkt Chris. Ich stimme zu, dass dies keine narrensichere Lösung ist~
Bei JavaScript
Ich hatte einen Vorfall, bei dem ich die Höhe der Seitenleiste + des Zentrums berechnet habe und die maximale Höhe der beiden gefunden habe und diese Höhe dem Wrapper zugewiesen habe, aber als wir ein Akkordeon zum Inhalt hinzufügten, schien es die maximale Höhe berechnet zu haben, ohne den zusammengeklappten Inhalt zu berücksichtigen. Was dann passierte, war, dass wir nach dem Laden riesigen Weißraum am unteren Rand hatten. Vielleicht war das JS fehlerhaft (sehr gut möglich), aber es schien mir schon früher auf Probleme gestoßen zu sein.
Aber jedenfalls, wie immer gute Arbeit, Chris :-)
Schön!
Ich habe gerade das feste fließende feste ausprobiert. Gibt es eine Möglichkeit, die Seite vertikal skalieren zu lassen, wenn mehr Inhalt in die Seitenleisten eingefügt wird? Momentan quillt es unten heraus und sieht ziemlich hässlich aus?
Abgesehen davon wirklich großartige Arbeit Chris :-)
Hallo Chris,
Ich bin kein großer Fan von fließenden Layouts, aber ich mag wirklich, was J.R.V. http://www.jrvelasco.com/ gemacht hat. Wie nennt man ein solches Layout?
Für mich ist das der einzige Weg, wie fließende Layouts Sinn machen.
Danke für einen schönen Artikel.
sieht für mich so aus, als würde er ein Grid-System CSS-Framework verwenden…
Danke für die Layout-Packs… Ich brauche das mehr als ein CSS-Framework…
Ich denke, ich stimme Farid oben bezüglich des fließenden Layouts von J.R.V. zu. Normalerweise ist der Inhalt fließend und die Seitenleiste fest, aber er macht das Gegenteil und es funktioniert (zumindest für ihn).
Fließender Inhalt kann zu langen Textzeilen führen, die schwer zu lesen sind…
Danke Mann, sehr nützlich!
Schön!
Dieses IE 7 Skript scheint für eines meiner Projekte lebensrettend zu sein. Vielen Dank für die Informationen!
Danke dafür, besonders für das IE7-Skript; genau das, was ich im Moment brauche :]
Ich arbeite an einer Website, bei der der IE-Fix nicht zu funktionieren scheint. Die Seiten sehen in IE8, Firefox und Safari gut aus, aber nicht in IE7 und darunter.
Könnten Sie bitte nachsehen und sehen, warum der DIV #homeContent (http://test.rwrightarchitects.com/) den "margin-top"-Wert ignoriert und den DIV an den Anfang der Seite verschiebt.
Danke
Raj
Vergessen Sie es. Ich habe etwas recherchiert und festgestellt, dass die Verwendung von Padding anstelle von Margin das Problem behoben hat.