04
02

Tutorial: Gestaltungsraster im Webdesign II.

“…and second, grids mat­ter a lot in infor­ma­tion design. Now you know why I’m so crazy for them.”

Nach­dem ich im ers­ten Teil ver­sucht habe zu erklä­ren, wie Ras­ter­grö­ßen ent­ste­hen, soll es in die­sem Teil nun um die Anwen­dung des Gestal­tungs­ras­ters gehen. Ich bin mir unsi­cher, wie weit ich hier nun ins Detail gehen soll. Die­ses Tuto­rial setzt ein soli­des Grund­wis­sen über CSS vor­raus. Ich kann und möchte hier keine Grund­la­gen zur Posi­tio­nie­rung von HTML Ele­men­ten klä­ren, ich möchte nur zei­gen, wie man ein Ras­ter bei der Posi­tio­nie­rung von Ele­men­ten, ein­hal­ten kann.

Damit kom­men wir auch gleich zur Metho­dik die­ses Teils. Für die ganz Unge­dul­di­gen gibt es am Ende des Arti­kels, zwei Beispiel-Seiten. Für alle ande­ren werde ich nun Schritt für Schritt vor­ge­hen. Ich werde das Prin­zip, an Bei­spiel eines p-Blocks erläu­tern. Ich muss nicht jeden klei­nen Abschnitt mei­ner Seite erläu­tern, um das Sys­tem zu erklä­ren. Wer die­ses Tuto­rial gele­sen hat, wird fast alles was es hier zu sehen gibt, eben­falls rea­li­sie­ren kön­nen.

Grund­sätz­li­ches

An die­ser Stelle sei eine kleine Kor­rek­tur zum ers­ten Teil ange­bracht. Um die Sache hier nun leich­ter erläu­tern zu kön­nen, werde ich das Ras­ter für die­sen Teil etwas ändern. Mein Beispiel-Raster besitzt von nun an abso­lute gleich­mä­ßige Abstände. Damit redu­zie­ren sich die äuße­ren 30 Pixel, zu 20 Pixeln. Wieso, warum und wes­halb, wird sich um Laufe die­ses Tex­tes selbst erklä­ren. Damit sieht mein Beispiel-Raster nun fol­gen­der­ma­ßen aus:

Alle 3 Spal­ten sind 224 Pixel breit, und besit­zen 20 Pixel breite Abstände zu bei­den Sei­ten. Dar­aus ergibt sich eine Gesamt­breite von 752 Pixeln. Diese 752 Pixel sind als Breite des DIVs zu defi­nie­ren, wel­ches spä­ter die Inhalte ent­hal­ten soll.

Infografik: Raster-Maße

Zwei Werte machen die Posi­tio­nie­rung auf dem Ras­ter aus: Breite der Ele­mente, sowie Abstand der Ele­mente, zu einer der äuße­ren Kan­ten. Mit die­sen bei­den Grö­ßen, kann ich somit jedes HTML Ele­ment, auf das Ras­ter legen. Der ele­gan­tere Ansatz, ist nur mit dem äuße­ren Abstand (Mar­gin) zu arbei­ten. Im Ide­al­fall, defi­niert sich somit die Breite des Ele­ments von selbst. Lei­der ist dies nur die Theo­rie. In vie­len prak­ti­schen Fäl­len, wird man nicht drum rum kom­men, die Breite zusätz­lich fix zu defi­nie­ren. Beson­ders der gute alte Inter­net Explo­rer, möchte immer noch einen Wert für die Breite (width) viele sei­ner HTML-Elemente haben.

p-Block über Spalte 1 und 2

Ein kur­zer Blick auf die ers­ten Styles für das p-Tag die­ses Style­s­heets:

p {
font: normal .8em Arial, Verdana, Helvetica, sans-serif;
line-height: 140%;
width: 468px;
margin: 0 0 0 244px;
padding: 3px 0 12px 0;
}

Wie man sieht, bin ich mit die­ser CSS For­ma­tie­rung, auf Num­mer sicher gegan­gen. Wich­tig sind wie eben schon geschrie­ben nur die Anga­ben mar­gin und width. Die fol­gende Gra­fik soll zei­gen, wie ich den p-Block defi­nie­ren möchte.

Illustration p-Block Links

Wie defi­niert sich der hier dar­ge­stellte p-Block nun genau? Auch hier gibt es wie­der ver­schie­dene Mög­lich­kei­ten. Fest steht, die­ser Block soll eine Breite von exakt 468 Pixeln besit­zen. Diese 468 Pixel ent­ste­hen aus der Breite von 2 Spal­ten inklu­sive einem Zwi­schen­raum: 224 * 2 + 20 = 468. Diese Breite kann man nun im CSS defi­nie­ren: width: 468px;. Nichts ande­res habe ich getan.

Skizzen zum Raster

Skiz­zen zur Ver­sion 5

Was nun noch fehlt, ist die genaue Posi­tion. Für mich ist es logi­scher, zur Posi­tio­nie­rung von Ele­men­ten, immer von Links aus zu zäh­len, soll hei­ßen der Null-Punkt des Ras­ters ist immer die linke obere Ecke. Dies ist kein Zwang, denn CSS erlaubt dank Floats und Margins, eben­falls eine Posi­tio­nie­rung rela­tiv zur rech­ten Seite.

Der p-Block der obe­ren Gra­fik besitzt nun einen lin­ken Abstand von 20 Pixeln und einen rech­ten Abstand von 244 Pixeln. Diese Zah­len sind nun mit Margin-Werten im CSS zu defi­nie­ren.

p {
width: 468px;
margin:0 264px 0 0;
}

/* oder auch */

p {
width: 468px;
margin:0 0 0 20px;
}

Beide obe­ren CSS Anga­ben füh­ren theo­re­tisch zum exakt glei­chen Ergeb­nis. In bei­den Fäl­len ist die Breite und die Posi­tion fest defi­niert. Span­nend wird es, wenn man beide Optio­nen kom­bi­niert und sich somit die Angabe der Breite spa­ren kann.

p {
margin:0 264px 0 20px;
}

Durch beide Mar­gin­werte defi­niert sich die Breite des Ele­ments auto­ma­tisch. Die­ses kleine Detail ist essen­zi­ell, möchte man spä­ter sein Ras­ter um eine Spalte ver­än­dern. Somit reicht eine Ände­rung die­ser Margin-Werte aus, um statt 3 dann 4 Spal­ten zu ver­wen­den. Für den Fall, dass eine wei­tere Spalte dazu­kommt, muss man nur 244 Pixel (eine zusätz­li­che Spalte samt Zwi­schen­raum) zum rech­ten Margin-Wert addie­ren. Fer­tig.

p-Block über Spalte 2 und 3

Illustration p-Block Rechts

Mein p-Block soll wie­der 468 Pixel breit sein, also wie­der über 2 Spal­ten lau­fen. Dies­mal aller­dings möchte ich den Block über Spalte 2 und 3 lau­fen las­sen, Spalte 1 soll über­sprun­gen wer­den. Wie defi­niert sich nun Spalte 2 und 3? Das Ele­ment muss einen lin­ken Abstand von 264 (20+224+20) Pixeln besit­zen und 468 (224*2+20) Pixel breit sein:

p {
width: 468px;
margin: 0 0 0 264px;
}

Spart man sich die Angabe der Breite, so kommt ein zusätz­li­cher Margin-Wert hinzu, in die­sem Fall wie­der 20 Pixel (also ein Spal­ten­ab­stand), auf der äuße­ren rech­ten Seite.

p {
margin: 0 20px 0 264px;
}

1 Spalte floa­ten

Jetzt soll­ten die ein­fa­chen Mög­lich­kei­ten, Ele­mente anzu­ord­nen erklärt sein. Die Frage die noch offen ist, wie man die Ele­mente, 1-Spalte breit, neben­ein­an­der stellt. Mein Anwen­dungs­bei­spiel dafür ist zum Bei­spiel die Suche, oder das Archiv auf die­ser Seite.

Illustration p-Blöcke floated

Zwei kleine Pro­bleme erge­ben sich nun. Zum einen habe ich bis jetzt nur Ele­mente unter­ein­an­der posi­tio­niert, nun soll es aber neben­ein­an­der statt fin­den und dadurch kommt man um Floats nicht mehr herum. Dies erzwingt wei­ter­hin die Angabe von fes­ten Breite, allein mit Margins kommt man hier nicht wei­ter. Wel­che Werte brau­che ich also? Mein Block wird 224 Pixel breit und muss einen Mar­gin Wert von 20 Pixeln besit­zen. Da dies nor­male p-Elemente wer­den, die den­noch anders posi­tio­niert wer­den sol­len, ver­wende ich eine CSS-Klasse, statt des nor­ma­len p-Tags, wie oben.

p.floats {
width: 224px;
float: left;
margin: 0 0 0 20px;
}

Das Ganze lässt sich logi­scher­weise auch pro­blem­los zur rech­ten Seite floa­ten, dann wan­dert der Margin-Wert natür­lich zur ande­ren (rech­ten) Seite.

p.floats {
width: 224px;
float: right;
margin: 0 20px 0 0;
}

Nun ver­weise noch­mal auf die kleine Kor­rek­tur am Anfang die­ses Tuto­ri­als.

Um die Sache hier nun leich­ter erläu­tern zu kön­nen, werde ich das Ras­ter für die­sen Teil etwas ändern. Mein Beispiel-Raster besitzt von nun an abso­lute gleich­mä­ßige Abstände. Damit redu­zie­ren sich die äuße­ren 30 Pixel, zu 20 Pixeln. Wieso, warum und wes­halb, wird sich um Laufe die­ses Tex­tes selbst erklä­ren.

Wieso hab ich das Ras­ter ver­än­dert? Um eben die gefloa­te­ten p-Blöcke zu ermög­li­chen. Mit dem alten Ras­ter wär dies nicht nur mit einer CSS Klasse mög­lich, denn da hätte der Mar­gin Wert des ers­ten Float-Elements 30 Pixel sein müs­sen, der der fol­gen­den Ele­mente aber 20. Um exakt diese Situa­tion zu ver­mei­den, braucht es abso­lut glei­che Spal­ten­ab­stände, auch bei den äußers­ten Spal­ten.

Bei­spiel Sei­ten

Zum Abschluss die­ses Teils, gibt es zwei ein­fa­che Test-Seiten, eine für 800, eine für 1024 Pixel. Das Grund­ras­ter ist bei bei­den gleich, beim 1024er, kommt nur eine wei­tere Spalte hinzu. Ich möchte damit zei­gen, wie ein­fach es ist, sol­che Ände­run­gen umzu­set­zen, wenn man auf ein strik­tes Ras­ter baut. Hier ein Mar­gin Wert, da eine Brei­ten­an­gabe ver­än­dert und schon ist das Lay­out für die höhere Auf­lö­sung ange­passt.

Im geplan­ten letz­ten Teil die­ser Serie, werde ich ver­su­chen, das Ras­ter fle­xi­bel funk­tio­nie­ren zu las­sen. Eine per­fekte Lösung fehlt mir aber noch. Im Prin­zip sieht man schon jetzt, dass ein Ras­ter, pri­mär auf ganz weni­gen CSS Wer­ten beruht, wieso soll dies also nicht auch mit rela­ti­ven Wer­ten funk­tio­nie­ren? Teil II. ist hier­mit fer­tig.

8 Kommentare

Für diesen Eintrag wurden die Kommentare geschlossen.

  • #1
  • So, 23. April 2006
  • ben_ schrieb:

Oho! Das ist bes­ser gewor­den als ich es erwar­tet habe. Sehr gut ana­ly­siert, struk­tu­riert und prä­sen­tiert. Aus­ser­dem kommt das hier im Tuto­rial ja aus­ge­spro­chen Schlank und schlüs­sig daher. (Da frag ich mich schon fast, womit due deine 1600 Zei­len CSS gefüllt hast.)

Was das Tuto­rial beson­ders schön zeigt, ist, dass Ras­ter nur von einer Handvoll-Zahlen defi­niert wer­den, und sich der Rest auto­ma­tisch ergibt, was eine auto­ma­ti­sche Gene­rie­rung zumin­dest theo­re­tisch erlaubt.

Ich lasse gerade von einem mei­ner Stu­den­ten eine Haus­ar­beit über das Thema schrei­ben um danach einen For­ma­lis­mus zu erstel­len, der es erlaubt Layout-Raster für’s Web über ein Backend in einem CMS zu erstel­len. Ich werd, dann noch­mal Feed­back geben, sobald es Fra­gen oder was imple­men­tier­tes zu zei­gen gibt.

Tau­send Dank!

Neben­bei: von oben links aus zu Posi­tio­nie­ren ist druch die ein­ge­präg­ten Leseg­wohn­hei­ten auch nur sin­nig.

Webmaster

(Da frag ich mich schon fast, womit due deine 1600 Zei­len CSS gefüllt hast.)

Das frag ich mich auch hehe, mein Feh­ler war, das alte Style­s­heet umop­ti­miert zu über­neh­men, so dass ich Styles von Ver­sion 3 mit­schleppe. Wenn der Relaunch hier fer­tig ist, werd ich das Style­s­heet in Ruhe kom­pri­mie­ren, nur momen­tan ist es mir noch etwas zu ris­kant spon­tan die alten Sachen zu löschen.

Beson­ders die Link-Styles sind teil­weise 3-fach und 4-fach defi­niert. Ich gelobe Bes­se­rung. Gruß

  • #3
  • Di, 25. April 2006
  • ben_ schrieb:

He! Waren die “Skiz­zen zur Ver­sion 5″ vor zwei Tagen auch schon in dem Arti­kel, oder hab ich lang­sam Alz­hei­mer? ;)

Webmaster

Mist erwischt, mein Plan die Leser lang­sam aber sicher in den Wahn­sinn zu trei­ben, ist dahin. Skiz­zen sind seit ges­tern drin. Gebe ein paar Gründe an, such dir einen aus: a) wollte en Ein­trag optisch auf­lo­ckern b) war zu faul die Bil­der vor Sams­tag fer­tig zu machen, c) hab ver­ges­sen die Akkus der Digi-Cam zu laden. Ehr­lich gesagt, war es eine Kom­bi­na­tion aus die­sen drei Sachen :)

  • #5
  • Di, 20. Februar 2007
  • Andislav schrieb:

Es gibt im IE eine ein-pixel Ver­schie­bung eini­ger Ele­mente nach rechts (oder nach links?) - ja ja - ich weiss “tot dem IE” aber ich finde sowas trotz­dem unschön. Wenn mich mein Auge nicht täuscht sehe ich diese Ver­schie­bung auch auf die­sen Sei­ten und nicht nur bei mei­nen Grid-Testseiten (IE6).

Weiss jemand wie der Bug genau heisst und ob man es umge­hen kann?

  • #6
  • Di, 20. Februar 2007
  • Andislav schrieb:

Habs selbst gefun­den. Es scheint der “IE 3 pixel gap” zu sein. Hier steht was es ist und wie man es weg­ha­cken kann. http://www.perun.net/2004/07/09/3-pixel-abstand/

Habt ihr wahr­schein­lich nicht gese­hen weil ihr MAC-user seid?

Für mich kommt die Grid Lösung auf Absatz-Basis damit lei­der nicht in Frage - ich wollte eigent­lich eine Lösung ohne Hacks.

Webmaster

Mit Blick in die Zukunft bzw. auf IE7, sollte man Hacks wie die “3px-Gap” über­den­ken. Der Mar­k­an­teil von IE6 sinkt erstaun­lich schnell. Kommt natür­lich immer auf das jeweile Pro­jekt an, aber wer heute eine Seite gestal­ten möchte, die noch in 12 Mona­ten ohne große Mehr­ar­beit aktu­ell ist, der sollte tap­fer IE6 weni­ger Beach­tung schnen­ken. Was man an zusätz­li­chen Frei­hei­ten gewinnt, über­wiegt die alten Ein­schrän­kun­gen doch sehr.

  • #8
  • So, 12. August 2007
  • HaJo schrieb:

“Mit Blick in die Zukunft bzw. auf IE7, sollte man Hacks wie die “3px-Gap” über­den­ken. Der Mar­k­an­teil von IE6 sinkt erstaun­lich schnell.”

Eine ebenso gewagte wie lei­der (!) fal­sche Aus­sage. Der Blick auf z.B. Web­hits zeigt, daß wenigs­tens die Hälfte aller User immer noch mit IE6.x unter­wegs ist. So ungern ich das auch selbst mache, wer Wert dar­auf legt, daß seine Sei­ten mög­lichst von allen Usern feh­ler­frei gese­hen wer­den, der MUSS den IE6 berück­sich­ti­gen - und dies auch noch auf abseh­bare Zeit. Trau­rich abba wahr :-)

So hilft es dem Web­sei­ten­er­stel­ler nur, seine Seite auf Mac und Win mit allen gän­gi­gen Brow­sern zu tes­ten und die IE-Bugs (auch der 7er hat garan­tiert wel­che…) zu berück­sich­ti­gen.