Dynamische Menulänge zum InhaltArtikel

HTML-Layout-Power mit JavaScript und CSS


Keine gute Lösung: Tabellen, das Pseudoraster für Designer
Es gibt Momente, da kommt man mit reinem (X)-HTML und CSS nicht weiter: Noch heute weigern sich beispielsweise viele Webdesigner auf die Verwendung von Tabellen für Webdesigns zu verzichten.

Das hat gute Gründe: Bisher lassen in HTML nur Tabellenzellen Beziehungen in Höhe und Breite zueinander zu. Andere Blockelemente (z.B.
) ziehen sich in der Regel nur so lang wie der Inhalt es benötigt. Oft möchte man aber 2 nebeneinanderstehende Blöcke gleich lang darstellen, um so ein bündiges Design zu ermöglichen.

Zwar ermöglich der HTML-Standard durch das CSS-Attribut display die Deklarierung von Tabellen-Elementen in beliebigen HTML-Tags, jedoch ist dies für den Einsatz in XML gedacht um Datensätze tabellarisch aufzubereiten und nicht um diese für die Websiterasterung zu missbrauchen.

dheight_firefox.png

Das Ziel: Das Menü erstreckt sich genausolang wie der Content. Das eigentlich längere Menü erhält einen Scrollbalken. Wichtig: Das Menü muss sich dynamisch an die Höhe des Content-Bereichs anpassen.


Das W3C hinkt hinterher
Es gibt jedoch auch ein Formatierungsziel, an dem jede Tabelle und jede CSS-Eigenschaft scheitert.

Es handelt sich hierbei um die dynamische Anpassung der Länge einer Spalte mit der einer anderen, so dass beide stets gleich lang sind. Hierbei soll die eine Spalte jedoch maximal so lang sein wie die andere. Ist sie länger, soll ein Scrollbalken den Inhalt zugänglich machen. Hier muss ein kleines javascript dem Browser und dem HTML-Standard auf die Sprünge helfen.

Praxisbeispiel
In der Praxis stellt sich das Problem wie folgt dar: 2 div-Container, einer für das Menü, einer für den Content, sollen stets gleich lang sein. Hierbei möchten wir auf den Einsatz von Tabellen verzichten um so volle Kontrolle über die Anordnung des Codes zu haben (um z.B. im Quellcode den Inhalt vor das Menü zu positionieren).

dheight_firefox_no_js.png

Ohne das dynamic height Script wird jeder Container so lang gezogen wie er es benötigt - und zerreisst somit das gesamte Layout.


Die div-Container werden mittels des float-Attributes nebeneinander positioniert. Nun soll der Menü-Container stets so lang gestreckt werden, dass er die gleiche Höhe erhält wie der Content-Container. Gleichzeitig soll verhindert werden, dass das Menü länger wird als der Content. Stattdessen soll es bei gleichbleibender Höhe einen Scrollbalken anbieten. Spätestens hier würde auch die Tabellenvariante versagen.

Wir müssen also dynamisch die Höhe des Content-Containers feststellen und dem Menü-Container zuweisen. Gleichzeitig erzwingen wir im Menü via overflow einen Scrollbalken.

Der HTML-Code:
HTML


<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>Dynamic Height Script by pc-intern.com</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" href="lib/screen.css" type="text/css" />

Antwort hinzufügen

Dein Name:

editor-maximize editor-minimize mark manage-attachments clear-textarea process-stop

Smileys deaktivieren?

Spam Protection

Code Bit

reply
Kommentar von Guest @ Sunday, 07. May 2006 @ 17:11:26
Ein schönes Beispiel für die Flexibilität von CSS, auch wenn es für die Erfüllung dann doch noch etwas JS benötigt. Mit einer Tabelle wäre sowas wohl gar nicht möglich gewesen.

Leider gibt es auch Layouts, wo man (zumindest ohne Probleme mit alten Browsern zu bekommen) nicht auf Tabellen verzichen kann. Ich habe vor einiger Zeit tagelang versucht, das Layout von http://prodlik-olbrich.de/ in CSS zu gießen, aber alle Versuche wollten immer in irgendeinem Browser nicht funktionieren. dry.gif Teilweise geht es bisher wohl noch nicht immer ohne Tabellen auch wenn sie natürlich sehr unschön sind.

Noch ein kleiner Tipp: Wenn du das overflow:scroll; durch ein overflow:auto; ersetzt, zeigt Opera auch keine horizonale Scrollbar an und du kannst auch für die anderen Browser, die das bisher nicht standardisierte overflow-x/y interpretieren, dieses weglassen. Das auto macht genau das, was du mit den drei Eigenschaften konstruiert hast. Auch ältere Browser machen mit auto weniger Probleme als mit scroll, wo teilweise der ganze Inhalt verschwindet oder nicht scrollbar ist.

Die Standardeinstellung für JS ist übrigens auch im IE "an", auch wenn "aus" aus Sicherheitsgründen besser wäre. tongue.gif Andererseits ist es aber auch gut, weil nur so kann man als Webautor dem IE gutes Benehmen beibringen ohne die ganzen CSS-Bugs des IE und die passenden Hacks dazu im Kopf zu haben: http://dean.edwards.name/IE7/

Sie sind nicht eingeloggt.