29
07

barcode

Balken-Diagramme im Web-Design 2.0

Balken-Diagramme im Web-Design 2.0

Das Tuto­rial zum Bal­ken­dia­gramm gehört zu den stil­len Klick­fal­len der Seite. Über Google kamen dann doch mehr Besu­cher auf die Seite, als gedacht. Ein Kom­men­tar hat das Thema wie­der aktu­ell wer­den las­sen und ist für mich Anlass, das Thema mal zu über­ar­bei­ten. Ich prä­sen­tiere Bal­ken­dia­gramm 2.0 oder so ähnlich.

Ich bleibe bei der HTML-Struktur. Eine Defi­ni­ti­ons­liste bie­tet sich hier mehr an, als eine nor­male Liste, die ich bei ande­ren Lösun­gen oft sehe. Es gibt aller­dings vor und Nach­teile, beson­ders mit Blick auf Inter­net Explo­rer, der jedoch schnel­ler und schnel­ler an Popu­la­ri­tät ver­liert. Eine Defi­ni­ti­ons­liste hat den gro­ßen Vor­teil gleich zwei HTML-Tags für einen Wert zu bie­ten. In einer nor­ma­len Liste wird zusätz­lich oft mit spans-Tags gear­bei­tet, um mehr Struk­tur zu bekom­men. Eine dl-Liste braucht sowas nicht. Der große Nach­teil lässt sich aber nicht ver­schwei­gen. In einer dl-Liste exis­tie­ren zwar zwei sepa­rate Tags, aber diese sind nicht logisch mit­ein­an­der vom Rest der Liste abge­trennt. Kein Pro­blem für moderne Brow­ser, aber IE kommt wie­der und wie­der durch­ein­an­der, wenn man ein­zelne Ele­mente der Liste floa­tet. Wenn ich Vor- und Nach­teile abwiege, blei­ben klar mehr Argu­ment für eine dl-Liste übrig. Drum ändern sich am HTML fast nichts.

“D’oh”

Der größte Makel mei­ner bis­he­rin­gen Lösung war der Unter­schied zwi­schen ech­tem Wert der Liste und Brei­ten­wert des HTML-Elements. Wenn ein Ele­ment einen Wert von 89% dar­stel­len soll, dann sollte es auch 89% breit sein. Alles andere ist unlo­gisch und war nur ein Her­um­ar­bei­ten um das eigent­li­che Pro­blem. Die­ser Makel ist nun beho­ben. DD-Tags sind nun so breit, wie der Wert den sie dar­stel­len sol­len.

<dl class="data-1">
<dt>Wert 1</dt>
<dd style="width:46%;">46%</dd>

<dt>Wert 2</dt>
<dd style="width:24%;">24%</dd>

<dt>Wert 3</dt>
<dd style="width:89%;">89%</dd>

<dt>Wert 4</dt>
<dd style="width:62%;">62%</dd>

<dt>Wert 5</dt>
<dd style="width:29%;">29%</dd>

<dt>Wert 6</dt>
<dd style="width:81%;">81%</dd>

<dt>Wert 7</dt>
<dd style="width:41%;">41%</dd>

<dt>Wert 8</dt>
<dd style="width:72%;">72%</dd>

<dt>Wert 9</dt>
<dd style="width:19%;">19%</dd>

<dt>Wert 10</dt>
<dd style="width:56%;">56%</dd>
</dl>

Zwei­tes Pro­blem war bis­her der mög­li­che Platz für das Label. Hier habe ich zwei Flie­gen mit einer Klappe erwischt. Zum einen sind Label und Wert nun so posi­tio­niert, dass sie völ­lig (fast) unab­hän­gig von­ein­an­der posi­tio­niert wer­den, was zum Zwei­ten dem Label end­los viel Platz ver­schafft.

Skizze Diagramm Aufbau

Die Details sind wich­tig, aber es sind wenige. Label (dt) und Wert (dd) sind nun überein­an­der posi­tio­niert, Z-Index sei Dank. Trick­reich ist nur eine Sache und zwar die Ein­rü­ckung der Schrift des Labels, zwar im CSS doku­men­tiert, aber hier noch exli­zit erwähnt. Lin­ker Margin-Wert und Breite des dt-Elements, ent­spre­chen sum­miert dem nega­ti­ven lin­ken Mar­gin des dd-Elements. In mei­nem Bei­spiel sind es 25% (24% width + 1% margin-left). Die Pro­zent­zah­len zei­gen es schon, das Dia­gramm ska­liert mit der Breite einer Seite mit.

Es exis­tiert noch ein win­zi­ger Feh­ler, oder viel­leicht sogar zwei. Bor­der und pad­ding des dd-Elements fügen dem Wert ein paar Pixel in der Breite hinzu, die kom­bi­niert mit dem dar­zu­stel­len­den Wert, immer ein paar Pixel mehr dar­stel­len, als eigent­lich rich­tig wäre. Ich nenne es mal “künst­le­ri­sche Frei­heit” und effek­tiv sind es in mei­nem Bei­spiel jeweils 6 Pixel zu viel, ein Wert der zu ver­schmer­zen ist.

CSS3

So ein Dia­gramm schreit förm­lich nach neuen CSS3 Werk­zeu­gen. Neue Pseudo-Selektoren las­sen jeden ein­zel­nen Wert im Dia­gramm adres­sie­ren, ohne zusätz­li­ches HTML in die Liste zu schrei­ben. Optisch las­sen sich abge­run­dete Ecken, wie auch Ver­läufe inte­grie­ren.

Solide

Schaue ich mir alle Feh­ler und Stär­ken der Lösung an, komme ich zu einem sehr soli­den Ergeb­nis. Das HTML ist sehr sau­ber und ent­spricht der Seman­tik einer Defi­ni­ti­ons­liste, der Feh­ler­quo­ti­ent liegt im Rah­men, es gibt genug Frei­hei­ten für CSS und die Lösung ska­liert rela­tiv gut auf gän­gi­gen Brow­sern. Es soll nur ein Vor­schlag sein, einer der sich wun­der­bar erwei­tern lässt, um seine Schwä­chen aus­zu­mer­zen. Ideal wäre ein zusätz­li­ches Tag im dt-Tag, um den Inhalt abso­lut zu posi­tio­nie­ren, rela­tiv zum dt-Tag. So bekommt man völ­lige Frei­heit bei Länge der Label und Rela­tion zum dar­zu­stel­len­den Wert. Lange Labels für kleine Werte sind ein Pro­blem, dass sich so lösen lässt.

Kommentar schreiben
safari bug

Vorschau:

HTML ist in Kommentaren zugelassen. Erlaubt sind die HTML-Tags:
<a href>, <i>, <p>, <strong>, <em>, <ul>, <ol>, <li>, <blockquote>.
Alle themenfremden oder persönlichkeistverletzenden Beiträge werden gelöscht, also immer schön sachlich argumentieren.

schrieb: