Gloss & Stripes

About Programming, Mac, Design and Everything that's somehow Arty or Open Source.

CSS Box Model Hack-Alternative [de]

Schon oft in der Webstandards-Mailinglist diskutiert und in Blogs gepostet:
evolt.org – Top 10 CSS Tricks you may not know

Ergänzend zu evolt.org Ten CSS Tricks:
eine korrigierte und verbesserte Version von Tantek, die ich auch irgendwie lehrreicher finde.


Der CSS Box Model Hack von Tantek Celik wird derzeit von Webdevelopern benutzt, um einen Rendering-Fehler in älteren Browsern als dem IE6 auszugleichen, in dem die Größenangaben für padding und border zur inneren statt zur äußeren Gesamtbreite eines Elements addiert werden.

Eine gewöhnliche Stylesheet-Regel für das Markup
<div id="myBox">...</div>
könnte in etwa so aussehen:

#myBox{
    width: 300px;
    border: 5px;
    padding: 10px;
}

Daraus resultiert für das DIV-Element #myBox eine Gesamtbreite von 330px (300px Breitet + zweimal 5px Rahmen + zweimal 10px-Padding), dargestellt von allen Browsern; außer Vorgängerversionen des IE6 (In jenen Browsern würde die Gesamtbreite 300px betragen, die dann auch die Werte für padding und border beinhaltet. )

Der Box Model Hack von Tantek hilft zwar bei dem Problem, die CSS-Regeln können aber bei umfangreicheren Stylesheets schnell unübersichtlich werden.
Mit einer einfachen Alternative, die ich auf evolt.org entdeckt habe, läßt sich das Problem des falschen Renderings des Box-Modells gleich ganz umgehen:

#myBox{
    width: 300px;
}

#myBox div{ border: 5px; padding: 20px; }

Das dazugehörige Markup sieht dann folgendermaßen aus:

<div id="myBox"><div>...</div></div>

Wie man sieht wird in das ‘eigentliche’ DIV-Tag ein weiteres DIV eingebettet, daß dann mit den gewünschten padding und border Werten formatiert wird.

Die Box hat nun die gewünschte Breite von 300px; unabhängig mit welchem Browser das Dokument betrachtet wird.

Zur Veranschaulichung gibt’s hier eine Live-Demo.

Nun kann man sich streiten, welche Style-Definition Vor- bzw. Nachteile hat.
Beim Vergleich der CSS-Regeln fällt auf, daß die Alternative zu Tantek’s Hack mit nur drei Attribut-Selektoren weniger Codeaufwand darstellt; andererseits muss im Markup noch ein zusätzliches DIV-Tag eingefügt werden.

Andere Web-Entwickler wiederum arbeiten evtl. ungern mit solchen ‘Hacks’ bzw. mit der Verwendung von eigentlich nicht benötigten Attribut-Selektoren (voice-family). Die andere Hälfte ist der Meinung, lieber Hacks in den CSS zu verwenden, als im Markup selbst.

Hin und her: Letztenendes ist es eine Frage des eigenen Programmierstils oder der Vorgaben der verwendeten Semantik im Markup, welche Variante man verwendet.

Dennoch sehe ich immer mehr CSS-basierende Layouts, die für den eigentlichen Content jeder DIV-Box eine outer sowohl als auch eine inner-Regel (+ein ‘inneres’ DIV-Tag) definieren, um den Content layoutgerecht handhaben zu können. (Paddings, um bspw. Textinhalt vom Box-Rand zu lösen sollen ja nicht das halbe Site-Layout sprengen.)

Daher halte ich die Alternative zum Box Model Hack für sinnvoll, da durch die zweite Regel die Formatierung der (inneren) DIV-Box getrennt von der Größe und Position der äußeren gehandhabt werden kann.

Related Posts

Posted in Developing,

Comments are closed.

Who is this?

freshlabs journal is the bi-lingual weblog and digital playground of Tim Isenheim, designer and webdeveloper from Hamburg, Germany. More →

  • Download Summersun, a sunny theme for WordPress
  • Download WP SIMILE Timeline, a lifestream plugin for WordPress

My weekly charts

My Last.fm page

Topics

Archives

Tag Cosmos

3D ajax Apple blogging browser comedy comments contest copenhagen css Design dom firefox flash fuckedup gallery google html interface javascript music mythbusters offline opensource osx photo photoshop php plugin powerbook programming projects psp skype Software spam studyabroad switch video w3c wallpaper webdesign webstandards westciv Wordpress

Full Tag Cloud