17
05

Diagramme im Web - zweiter Teil

Ich mach es kurz für heute. Was wir hier sehen ist ein 100% freis­ka­lier­ba­res Bal­ken­dia­gramm, mit leicht geän­der­ter Aus­rich­tung als das letzte. Was hier so ein­fach aus­sieht, hat dies­mal wirk­lich etwas mehr Zeit in Anspruch genom­men, dank einer nicht wirk­lich funk­tio­nie­ren­den ver­ti­ka­len Aus­rich­tung bei CSS-Formaten.

Wert 1
46%
Wert 2
24%
Wert 3
89%
Wert 4
62%
Wert 5
29%

Ich bin zufrie­den mit dem Ergeb­nis. Lei­der ist das Markup dies­mal etwas kom­pli­zier­ter gewor­den, pri­mär eben weil im CSS schlecht bis gar­nicht ver­ti­kal zu posi­tio­nie­ren ist. Pro­blem war, dass ich mit CSS nur sehr schwer an einer Grund­li­nie (in die­sem Falle der Defi­ni­ti­ons­liste) aus­rich­ten kann, die Bal­ken in die­ser Art Dia­gramm aber eben nach oben wach­sen sol­len und nicht nach unten. Der Trick besteht dies­mal darin, dass was optisch als Bal­ken wahr­ge­nom­men wird, nicht auf dem eigent­lich Wert der Liste zu legen. Was hier als Bal­ken gese­hen wird, ist das Ergeb­nis von über­la­ger­tem dt und dd-Tag der Defi­ni­ti­ons­liste.

Gra­fik zum bes­se­ren Ver­ständ­nis vom Markup des Dia­gramms

Markup-Grafik Balkendiagramm

Die Farbe des Bal­ken bringt also dies­mal das dt-Tag und das dd-Tag deckt die­ses ab. Um nun den dar­zu­stel­len­den Wert zu erzie­len bekommt das dd-Tag dies­mal eine Höhe, wel­che 100% minus des dar­zu­stel­len­den Wer­tes ent­spricht. Im Quell­code sieht das dann so aus:

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

Zwar erscheint nun mit pas­sen­dem CSS der Bal­ken, aber die ein­zel­nen Werte und die Bezeich­nung sind noch depla­ziert. Hier kommt nun zusätz­li­ches Markup in Form von span-Tags hinzu. Lei­der habe ich keine andere Lösung gefun­den, die völ­lige Ska­lier­bar­keit garan­tiert, aber dazu gleich mehr. Der Quell­code samt span-Tags sieht dann so aus.

<dt><span>Wert 4</span></dt>
<dd style="height:38%;"><span>62%</span></dd>

span

Die span-Tags nutze ich nun um die Werte dank z-index nach vorn zu holen und an die rich­tige ver­ti­kale Stelle zu schie­ben. Posi­tio­nie­rung und Bema­ßung die­ses Dia­gramms fin­det nur mit Prozent-Werten statt, was eben den Vor­teil hat, dass ich spä­ter die Liste ins­ge­samt (dl-Tag) egal wie bema­ßen kann und der Inhalt sich immer per­fekt anpasst, egal ob das Dia­gramm 200 oder 2000 Pixel hoch/breit sein soll, alles passt sich auto­ma­tisch an. Wer hier liesst wird sich sicher­lich rudi­men­tär mit CSS aus­ken­nen. Ver­ti­kale Anpas­sung ist in dem Fall kein Pro­blem. Anspruchs­vol­ler dage­gen die Hori­zon­tale, da sich eben auch die Anzahl der Bal­ken ändert. Es gibt ein paar Schlüs­sel­werte:

.content dl.data-2 dt,
.content dl.data-2 dd {
width:12%;
}
.content dl.data-2 dd {
margin:0 0 0 -12%;
}
.content dl.data-2 dt {
margin:0 0 0 4.7%;
}

Die 12% ent­spre­chen jeweils der Breite und dem nega­ti­ven Mar­gin beide Ele­mente der Liste. Die 4.7% sind der hori­zon­tale Abstand zwi­schen den Bal­ken des Dia­gramms. Ich wünschte ich könnte eine schöne mathe­ma­ti­sche Her­lei­tung des Wer­tes brin­gen, aber irgend­wie ist diese bei der Arbeit am Dia­gramm ver­lo­ren gegan­gen.

Wich­tig ist den­noch, dass man grund­le­gend zäh­len sollte wie­viele Werte dar­zu­stel­len sind, das ganze ver­dop­peln, Wert notie­ren und die 100% durch Wert-X tei­len. Somit bekommt man einen recht guten Wert für die Breite der Bal­ken. Die 100% erge­ben dann jeweils X-Anzahl Bal­ken und X-Anzahl Zwi­schen­räume. In mei­nem Bei­spiel 512+54.7=83,5. Wie man sieht habe ich in mei­nem Bei­spiel noch etwas Luft nach oben.

Vor- und Nach­teile

Pro­ble­ma­tisch hier­bei ist eine Ver­tei­lung der Stil­de­fi­ni­tio­nen auf CSS und Inline-Elemente. Dadurch erhält man bei wech­sel­nen­den Wer­te­men­gen auch immer jeweils sepa­rate CSS-Klassen bzw. IDs. Jedes Dia­gramm bekäme sein eige­nes CSS-Format, was eigent­lich dem Sinn von CSS etwas ver­frem­det.

Dem gegen­über steht jedoch eine Dar­stel­lung von Diagramm-Werten, die auch ohne CSS erschließ­bar blei­ben und sich leicht für jedes andere Medium for­ma­tie­ren las­sen.

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: