07
02

Auflösungsabhängiges CSS mit jQuery

Auflösungsabhängiges CSS mit jQuery

Dyna­mi­sche Gestal­tung exis­tiert online seit­dem es Javaskript gibt. Spä­tes­tens seit jQuery ist es nicht mehr unüb­lich, ein wenig Intel­li­genz in die Schnitt­stelle zwi­schen Nut­zer und Inhalt zu bas­teln. Zeit Online zeigt dem Neu­an­strich, dass sol­che Ansätze wohl auch bereit für ihren gro­ßen Auf­tritt sind. Ich finde damit öffnet sich die Büchse der Webdesign-Pandora, doch einen win­zi­gen Spalt breit. Plötz­lich ist es nicht mehr unrea­lis­tisch auch abseits des Brows­er­hacks, für mehr als einen mög­li­chen Fall zu gestal­ten.

Bin gespannt, wie der wei­tere Weg hier aus­se­hen wird. Für diese Lösun­gen gibt es defi­ni­tiv ein Pro­blem, nur sucht man es der­zeit noch mit der Lupe. Klar ist, dass man sol­che Lösun­gen klar am Anfang pla­nen muss. Ein trend­mä­ßi­ges Drauf­klat­schen ska­lie­ren­der Ele­mente auf ein beste­hen­des Design, dürfte der fal­sche Weg sein, auch weil man sein CSS um einen sol­chen Ansatz struk­tu­rie­ren muss. Wel­che Eigen­schaf­ten kom­men zum Ele­ment, wel­che zur ID und wel­che zur Klasse?

Bis­her nehme ich eher Abstand von fle­xi­blen Lay­outs. Bis­her bedeu­tete dies alle Ele­mente mit rela­ti­ven Grö­ßen zu bema­ßen und dann alles hübsch schrump­fen und wach­sen zu las­sen. Damit ein Grund­ras­ter ein­zu­hal­ten, ist sehr schwie­rig. Jene 2-Phasen Ska­lie­rung wie­derum, lässt viel prä­zi­se­res Pla­nen zu und somit sind auch Ras­ter wie­der ein­zu­hal­ten. Ein paar Dinge habe ich schon getes­tet, um eine mög­lichst ele­gante Lösung zu fin­den. Mein Ansatz ist das Zuwei­sen bzw. Ent­fer­nen von CSS-Klassen auf den jeweils zu ver­än­dern­den Ele­men­ten, hier eine Test­seite dafür.

jQuery Resize - Vergleich Layout schmal und breite Version

Abbil­dung auf­lö­sungs­ab­hän­gi­ger Lay­outs. Links die schmale und rechts die breite Vari­ante.

Die Umset­zung ist ein­fa­cher als ver­mu­tet. jQuery über­prüft die Fens­ter­größe, weist je nach Ergeb­nis eine ent­spre­chende CSS-Klasse zu und wech­selt diese, wenn auch das Fens­ter seine Größe ver­än­dert. Alles Nötige steckt in die­sen Zei­len. In mei­nem Bei­spiel bekommt die Div mit der ID “con­tent” je nach Auf­lö­sung eine unter­schied­li­che zusätz­li­che Klasse. Schlüs­sel­wert ist die Hori­zon­tale des Brow­ser­fens­ters. Bei weni­ger als 1096 Pixeln wird die CSS-Klasse “schmal” zuge­wie­sen und die Klasse “breit” ent­fernt. Sind die 1096 Pixel vor­han­den, wer­den die Klas­sen aus­ge­tauscht.

$(document).ready(function() {
    function elementResize() {
        var browserWidth = $(window).width();
        if ((browserWidth) < '1096'){
           $('#content').addClass('schmal');
           $('#content').removeClass('breit');
        } else {
           $('#content').addClass('breit');
           $('#content').removeClass('schmal');
        }
    }

    elementResize();

    $(window).bind("resize", function(){
        elementResize();
    });
});

Worin liegt der Unter­schied zwi­schen der Ver­wen­dung rela­ti­ver Grö­ßen und die­ser Lösung? Man behält hier die volle Kon­trolle über jeden ein­zel­nen Pixel, aller­dings auf Kos­ten eines zusätz­li­chen CSS-Wasserkopfs. Es ent­ste­hen zwei Vari­an­ten, die beide kom­plett durch­ge­stal­tet wer­den möch­ten. Ganz klar fin­det man auch hier kein All­heil­mit­tel für sämt­li­che mög­li­chen Pro­blem­fälle, aber ein wirk­lich effi­zi­en­tes Werk­zeug, um ein Lay­out ein Stück­chen mit­den­ken zu las­sen.

Das CSS3 Spalten-Modul bie­tet hier­für sicher­lich große Angriffs­flä­che. Mehr­spal­tig­keit setzt vor­aus, dass man den Text auch ohne zu scrol­len kom­plett lesen kann. Dafür braucht es nun mal eine bestimmte Auf­lö­sung, die man mit so einem klei­nen Skript effek­tiv auch klei­ne­ren For­ma­ten zugäng­lich machen kann, ohne das die Typo­gra­fie aus dem Ruder läuft. Falls ich mich auf der eige­nen Seite mal satt gese­hen habe, sehe ich gute Chan­cen auch mal auf so eine Lösung zu set­zen.

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: