• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

container floaten und unten ausrichten für Säulendiagramm

S

sysop

Guest
Ich möchte ein Säulendiagramm mit css generieren. Dazu habe ich mir eine Diagrammfläche als Container erstellt und möchte dort die Balken positionieren. Dazu verwende ich eine Funktion, die mir mit php die Höhe der Balken errechnet. Klappt alles wunderbar, bis auf die Positionierung, die Balken werden immer OBEN bündig positioniert (Die Container verlaufen also immer von Oben nach Unten, Oben Bündig: (Siehe Screenshot 1). Ich bekomme die Balken nicht unten Bündig ausgerichtet, wo liegt mein Fehler.

Hier mal der HTML-Code für 3 Diagrammbalken:
HTML:
<div class="diagfl">
  <div class="diagbalk" title="14.11.2011 [11:32]&nbsp;von&nbsp;Ich" style="height:90%; background-color: #f1c1d2;"><strong>9</strong></div>
  <div class="diagbalk" title="14.11.2011 [11:32]&nbsp;von&nbsp;Ich" style="height:70%; background-color: #80e38c;"><strong>7</strong></div>
  <div class="diagbalk" title="14.11.2011 [11:32]&nbsp;von&nbsp;Ich" style="height:60%; background-color: #aea7e7;"><strong>6</strong></div>
</div>
CSS-Code
Code:
    .diagfl
    {
        margin-top:4em;
        margin-bottom:1em;
        width:48em;
        height:30em;
        background-color: #999999;
        padding:2em;
    }

    .diagbalk
    {
        float:left;
        text-align:center;
        font-size:8px;
        width:18px;
        height:100%;
        margin-left:5px;
        margin-top:5px;
        position:relative; bottom:0;
    }

    .diagbg
    {
        background-color: #999999;
    }

Es scheinen sich float und position nicht zu vertragen und float schaltet die css Angabe position einfach aus.

Das Ganze wird über eine Funktion zusammengebastelt und es sind natürlich mehrere Säulen. Ich helfe mir, indem ich zuerst einen Container in 100% Höhe erstelle und darüber dann einen weiteren Container mit Höhe = Differenz 100% - Balkenhöhe). Das liefert mir dann Grafik 2. Aber Container über Container kann ja nicht dir Lösung sein.


Falsch Anhang anzeigen 2286 Richtig Anhang anzeigen 2287

Der Vollständigkeit halber hier noch die ganze PHP-Funktion, die das Diagramm derzeit richtig erstellt.
PHP:
function diagramm($werte)
{
    global $config,$lng;

    $cnt = 0;
    echo "<div class=\"diagfl\">\n";

    for($i = (count($werte) - 1); $i >= 1; $i--)
    {
    
      $minus = 10 - $werte[$i][2];
      if($minus >= 5) $color = 'FFFFFF';
      elseif($minus == 4) $color = 'aea7e7';
      elseif($minus == 3) $color = '80e38c';
      elseif($minus == 2) $color = 'def4e1';
      elseif($minus == 1) $color = 'f1c1d2';
      else $color = 'ffaaaa';

      echo '<div class="diagbalk" title="'.date($config['date_format'],$werte[$i][3])."&nbsp;".$lng['by']."&nbsp;".get_user($werte[$i][4]).'" style="background-color: #'.$color.';'.$config['bewertung_border'].'">'."\n";
      echo '<div style="height:'.($minus * 10).'%; background-color:#999999; position:relative; bottom:0;"></div>'."\n";
      echo '<div style="height:1%; position:relative; bottom:15px;">'.$i.'</div>';
      if($minus < 10)
      {
        echo '<strong>'.$werte[$i][2].'</strong></div>'."\n";
      }
      else
      {
        echo '</div>'."\n";
      }
      $cnt ++;
      if($cnt == 22) break; // nur die letzten 22 Werte anzeigen
    }
    echo "</div>\n";
}
 
Die relative Position bezieht sich immer auf die ursprüngliche Position, d.h. bottom:0 heißt, du positioniert das Element um null Pixel von unten der ursprünglichen Position. Das ist nicht das was du wilst.

Das einfachste dürfte sein, wenn du denn Container absolut positionierst und die Elemente ebenfalls (diese sind dann relativ zum Container).

HTML:
<!DOCTYPE html>
<html>
  <head>
  <title></title>
          <style type="text/css">
    .diagfl
    {
        position:absolute;
        margin-top:4em;
        margin-bottom:1em;
        width:48em;
        height:30em;
        background-color: #999999;
        padding:2em;
    }

    .diagbalk
    {
        text-align:center;
        font-size:8px;
        width:18px;
        height:100%;
        position:absolute;
        bottom:0;
    }

    .diagbg
    {
        background-color: #999999;
    }</style>
  </head>
  <body>
 <div class="diagfl">
  <div class="diagbalk" title="14.11.2011 [11:32]&nbsp;von&nbsp;Ich" style="left:10px;height:90%; background-color: #f1c1d2;"><strong>9</strong></div>
  <div class="diagbalk" title="14.11.2011 [11:32]&nbsp;von&nbsp;Ich" style="left:32px; height:70%; background-color: #80e38c;"><strong>7</strong></div>
  <div class="diagbalk" title="14.11.2011 [11:32]&nbsp;von&nbsp;Ich" style="left:54px;height:60%; background-color: #aea7e7;"><strong>6</strong></div>
</div>
 </body>
</html>
 
Zurück
Oben