Per CSS zwei Spalten gleich hoch gestalten beim Einsatz von Responsive Design

Heute habe ich mich mit einem interessanten CSS-Problem beschäftigt, dass vielleicht noch ein paar mehr Leute beschäftigt:

Wir hatten auf der Startseite zwei Spalten innerhalb des Hauptcontents, welche in ihrer Größe unabhängig voneinander sind und bei denen sich der Inhalt immer wieder verändern kann und damit auch keine Aussage getroffen werden kann, welche Spalte höher sein wird. In der ersten Version waren beide Spalten einfach mit float nebeneinander angeordnet, aber dadurch schloßen sie nicht auf der gleichen Höhe ab.

Der HTML-Code Aufbau


<div class="content">
.
.
.
<div class="content-bottom">
< div class="column left">
< /div>
< div class="column right">
< /div>
</div>
</div>

Innerhalb der beiden inneren divs befindet sich der eigentliche Inhalt mit mehren Überschriften, Links und Textabschnitten.

Ein Problem, viele Lösungswege

Grundsätzlich gibt es an mehrere Möglichkeiten dieses Problem zu lösen und gibt dazu auch einige sehr gute Übersichtspost mit unterschiedlichen Möglichkeiten und ihren Vor- und Nachteilen. Doch in meinem speziellen Fall fielen viele Möglichkeiten aus der Auswahl heraus, denn

  • Der Inhalt der Spalten ist dynamisch und die Höhe somit nicht vorher bestimmbar
  • Die Seite nutzt ein Responsive Design und muss somit in jeder Breite gut aussehen
  • Alle Breiten sind in % angegeben und dies ist z.b. mit Border nicht nutzbar

Dadurch waren Möglichkeiten, die mit Bildern arbeiten ausgeschlossen, da diese beim verkleinern nicht ideal sind und Lösungen mit negativem Padding-bottom finde ich persönlich recht unschön, dadurch vielen auch solche aus dem Rennen. Auch wollte ich keine weiteren unnötigen Elemente ins HTML einführen um ein CSS-Problem zu lösen oder den Inhalt in einen HTML-Table bauen.

Die Lösung? Display:table

Ich habe mich dann dazu entschlossen mit display:table-cell zu arbeiten. Hiermit stellt man das Verhalten von HTML Tables im CSS nach um gewisse Vorteile der Tables nutzen zu können ohne sie semantisch falsch im HTML Code nutzen zu müssen. Im konkreten Fall bedeutet dass, dass äußere div-Element im CSS display:table bekommt und die inneren Elemente display:table-cell. Teilweise liest man, dass man noch zusätzlich ein div mit display:table-row braucht aber es funktioniert definitiv auch ohne!

Im CSS haben wir somit


.content {
width:100%;
max-width:1000px
}
.content-bottom {
display:table;
width:100%;
}
.column {
display:table-cell;
width:46.9387755%; //übrig von dem alten Code
}

Das nächste Problem: einen Abstand zwischen den Spalten

Damit waren die Element gleich hoch (nachdem der Code noch etwas aufgeräumt wurde) aber er spannte auch die gesamte 100% Breite – es sollen aber zwei Spalten mit Abstand zwischen den Spalten sein, welche eine andere Farbe haben als der Hintergrund (und Abstand). Durch den Einsatz von display:table kann man nicht mit margin arbeiten, sondern muss sich dem von HTML-Tables bekannte border-spacing bedienen. Der große Nachteil: Zum einen kann man nur mit Pixel-Werten arbeiten, nicht mit prozentualen Breiten und zum anderen wird es auf alle Kanten des Table angewandt: somit auch oben und unten und viel wichtiger: links und rechts! Da die Spalten aber links und rechts mit dem Element oben drüber Kantengleich abschließen sollte und diese 100% der Breite nutzt, wurde es Zeit in die Trickkiste zu greifen…
Nach einigem Überlegen viel mir ein, dass ich das umliegende div (content-bottom) einfach Breiter als 100% machen konnte und somit die inneren Elemente auf gleiche Breite wie die restliche Seite zu bringen.


.content {
width:100%;
max-width:980px;
overflow:hidden;
}
.content-bottom {
display:table;
width: 104.0816327%; //bei einer Breite von 980px für den Inhalt entspricht dies 1020px
overflow: auto;
border-spacing: 20px;
}
.column {
display:table-cell;
width:50%;
}

Somit waren die Elemente gleich breit wie der restliche Inhalt und haben die gleiche Höhe, egal wie hoch die einzelnen Elemente werden. Damit in den kleineren breiten keine Scroll-Balken am unteren Rand entstehen, hat das .content-div noch ein overflow:hidden bekommen, wodurch der überliegende, inhaltsleere Bereich von .content-bottom einfach verschwindet und keine Scrollbalken auslöst.

Browser-Support

Der Browser-Support für display:table ist erstaunlich gut: alle aktuellen Browser unterstützen es und selbst IE versteht ab Version 8 damit umzugehen. IE6 berücksichtigen wir zum Glück nicht mehr, für IE7 habe ich aber über den *-Hack einfach den alten Code für die Breiten und float:left eingebaut, so dass der Inhalt genauso wie vorher erscheint und die Boxen nur nicht gleich hoch sind.

Gedanken zu Google+

Einer von tausenden Posts zum neuen Dienst von Google an diesem Wochenende – aber trotzdem will ich meine Gedanken dazu niederschreiben.

Google’s dritter Versuch ein soziales Netz aufzubauen vereint Elemente aus dem Versuch mit Google Buzz (der Feed sieht ähnlich aus) und Wave (rate welche Freunde schon eine Einladung haben…) und ist dabei doch um ein Vielfaches einfacher zu nutzen als beide zusammen.

Ich mag Google+ bisher, keine Frage. Die Freundeslisten sind einfach anzulegen, dass Design ist ordentlich und aufgeräumt und es ist einfach Inhalte mit Leuten zu teilen. Soweit, so gut – aber mir fehlt die Möglichkeit meine Kontakte von facebook und twitter direkt finden zu können. Jeder Social Web Dienst hat diese Integration – nur Google natürlich nicht, vermutlich, weil es die direkten Konkurrenten sind. Doch für die Benutzer ist es mühsam… Mir fehlt leider auch eine Übersicht, welche meiner Kontakte aus dem Adressbuch in Gmail bereits bei Google+ sind – auch das wäre für mich schonmal ein guter Hinweis. Nur wiederspricht das natürlich der Art, wie sich Google anscheinend das Einladen von Leuten vorstellt: Durch Posts, die man mit Freunden teilt, selbst wenn sie nicht bereits bei Google+ sind – wollen sie jedoch antworten, müssen sie sich für Google+ registrieren. Sneaky – nur will ich nicht Freunde, die nicht bei Google+ sind mit Messages zuspamen….

Aber natürlich ist Google+ erstmal sowieso nur eine Beta, viel wird sich noch tun (hoffe ich mal ;) )und ob es sich durchsetzen kann, muss sich auch noch zeigen. Viele vergleichen Google+ natürlich mit facebook – für mich leben die beiden jedoch parallel, nicht entweder oder. Ja, ich gehöre tatsächlich zu den Menschen, die auf facebook nur private Kontakte haben und nur Menschen, die ich tatsächlich schon einmal im richtigen Leben kennen gelernt habe. Shocking, ich weiß.

Google+ hingegen eignet sich besser dazu eine halb offene Plattform zu sein mit seinen Kreisen – hier kann ich sowohl öffentlichen Content platzieren oder ihn einfach für eine Teilgruppe meiner Bekanntschaften nutzen. Das würde bei facebook natürlich auch gehen, ich nutze facebook aber einfach nicht so. Aber natürlich wird es letztendlich davon abhängen, wie die meisten Leute die beiden Plattformen nutzen – und facebook hat natürlich den Vorteil, dass die meisten Freunde und Menschen bereits registriert sind und einen gewissen Lock-in erreicht hat.

But only time will tell…

eBooks ausleihen in der städtischen Bücherei

Es hört sich am Anfang unwirklich an – eBooks ausleihen in der städtischen Bücherei. Man bekommt sowieso kaum eBooks und dann ausgerechnet in der Bücherei? Dem Ort, in dem man seit Jahren keinen Fuß gesetzt hat und den man mit staubigen Büchern aus den 70er Jahren verbindet?
Aber es ist tatsächlich so. Es gibt einen Zusammenschluss von städtischen Büchereien, die ein Onlineportal, OnLeihe, gegründet haben und über das man sich mit einem Login, den man bei der eigenen Bücherei bekommt einloggen kann.
Zusagen ich war überrascht, dass unsere Bücherei hieran teilnimmt, ist noch untertrieben. Aber tatsächlich gehört sie mit dazu. Also bin ich am Freitag in die Bücherei und habe mir einen neuen Mitgliedsausweis ausstellen lassen (ich war das letzte Mal mit ca. 13 in der Bücherei) und mir erklären lassen, wie ich Bücher online ausleihen kann.
Gesagt, getan. Ich habe abends direkt zwei Bücher ausgeliehen. Beide leider nur am PC lesbar und nicht auf dem iPad (für das es auch ein Extra-App gibt) oder einem eReader (muss ePub unterstützten, also leider nicht auf dem kindle). Aber immerhin (als Software für das DRM wird Adobe Digital Editions verwendet, so dass die Dateien entweder hierin oder in Adobe Reader X geöffnet werden können).
Die Auswahl ist natürlich noch nicht so riesig. Der Bereich Belletristik weißt 1.900 Titel für meine Bücherei auf, aber dafür gibt es auch viele Sachbücher (fast 5.000) und sogar Audiobooks und Magazine zum ausleihen.
Das Ausleihen ist dabei kostenlose – bei uns in der Stadt ist auch weiterhin der Büchereiausweis kostenlos, so dass mich das alles gar nichts kostet. Die meisten Bücher sind digital einmal zu haben und wenn sie bereits verliehen sind muss man warten, bis sie zurück gegeben werden. Also ganz so wie bei den normalen Büchern. Zurück gegeben werden ausgeliehene Bücher automatisch nach 14 Tagen – das sollte in den meisten Fällen reichen ein Buch zu lesen und wenn nicht, kann man es ja einfach irgendwann noch einmal ausleihen.
Wirklich eine praktische Sache und wirklich ein Grund mal wieder auf die städtische Bücherei zuzugreifen!

Drei kurze Wii-Spiele Empfehlungen zu Weihnachten

Man merkt, dass es schwer auf Weihnachten zu geht, es kommen jetzt wieder Mengen an neuen Spielen raus und ich wollte mal kurz ne Empfehlung für drei Wii Spiele aussprechen:

1) Super Mario All-Stars – 25. Jahre Jubiläumsausgabe

Super Mario All-Start ist damals für das SNES erschienen und enthält 4 Mario-Spiele aus der NES Zeit, also die vier ersten Mario-Spiele. In dem Fall, Super Mario 1 bis 3 und Super Mario 2: The Lost Levels – da muss man wissen, dass was im Westen als Super Mario 2 erschienen ist, ist nicht das gleiche, was in Japan unter dem Titel erschien, man hielt das japanische Spiel für zu schwer für den Westen und hat es darum hier nie veröffentlicht. Auf der Wii-CD sind jetzt alle vier Spiele und man bekommt zusätzlich noch ein dickes Booklet mit Infos und Zeichnungen zu allen Mario Spielen und eine Musik-CD mit den besten Liedern von Super Mario.
Kostet 25€, die Spieler sind absolute klassiker und auch noch heute gut zu spielen

2) Donkey Kong Country Returns

Es gibt ein neues Donkey Kong Spiel in der Tradition der Donkey Kong Spiele für das Super NES. Es sind vom Prinzip her klassische Sidescroller (sprich man läuft von links nach rechts), bei denen man springen und Gegner auf den Kopf hüpfen muss. Qualitativ sehr, sehr gut und hat auch einen Ko-Operativen Zweispieler-Modus (den hab ich aber noch nicht getestet).

3) Disney Micky Epic

Auf das Spiel hab ich mich irre gefreut, es wurde von einem der besten Produzenten für Videospiele entwickelt und das merkt man bei der Story. Micky landet im “Wasteland” einem Ort, an dem alle vergessenen Disney-Charaktere landen und er muss dort gegen einen großen “blob” den er Jahre zuvor ausversehen kreiert hat kämpfen. Das ganze Spiel ist von den Kulissen auf Attraktionen etc aus den Disney-Parks abgestimmt und alle Figuren sind Charaktere, die Disney tatsächlich erschaffen hat und die in Vergessenheit geraten sind. Für Disney-Fans ist es dadurch allein schon ein muss. Das Spiel ist ähnlich gemacht, wie die aktuellen Mario etc Spiele, d.h. 3D-Welten und man muss viel hüpfen etc und kann mit Pinsel und Löscher Gegenstände wieder erscheinen lassen oder auslöschen – das Tolle, die Entscheidungen, die man hier trifft, wirken sich auf den Spielverlauf aus.
So weit, so geil – das Spiel krankt aber leider an zwei Stellen: bei der Kamera und bei der Steuerung ::) Die Kamera geht noch halbwegs, man muss aber viel manuell nachjustieren um ne gute Sicht zu kriegen, die Steuerung ist relativ ungenau (das ist mir extrem aufgefallen nachdem ich DK angespielt habe), wodurch man häufiger stirbt, als man es eigentlich müsste – wenn man damit aber leben kann, ist die Spielewelt es absolut wert, weil die ist einfach nur fantastisch – genauso wie der Soundtrack.

1 2 3 4  Scroll to top