Jon Raasch
Auch wenn die neuen Browser-Versionen nach und nach CSS3 unterstützen – es sind noch immer genügend ältere Browser im Einsatz, die CSS3 nicht beherrschen. Wenn Sie neben Ihren Kunden auch sich selbst glücklich machen und CSS3 trotz der Rücksichtnahme auf IE & Co. einsetzen wollen, nutzen Sie diese Tipps, um CSS3-Eigenschaften in älteren Browsern möglichst passend auf andere Art zu ersetzen.
Graceful degradation – oder würdevoller Rückfall – nennt sich dieser Ansatz. In diesem zweiten Teil des Beitrags geht es um Übergänge. Teil 1 behandelte Farbverläufe, RGBa-Transparenz, abgerundete Ecken sowie Box- und Textschatten.
Die CSS3-Creme – Transitions
Übergänge gehören zu den nützlichsten Neuerungen in CSS3. Zudem fallen sie in älteren Browsern recht unproblematisch und von selbst zurück. Verwenden wir Übergänge also gleich einmal, um unsere Schaltfläche zu animieren:
.button { width: 200px; height: 50px; -webkit-transition-property: width, height; /* Chrome + Safari - properties to animate */ -webkit-transition-duration: .5s; /* Chrome + Safari - animation duration */ -webkit-transition-timing-function: linear; /* Chrome + Safari - animation easing */ -moz-transition-property: width, height; /* future-proofing for Firefox 3.7 */ -moz-transition-duration: .5s; -moz-transition-timing-function: linear; -o-transition-property: width, height; /* for Opera 10.5 */ -o-transition-duration: .5s; -o-transition-timing-function: linear;}.button:hover { width: 300px; height: 75px;}
Diese Animation funktioniert in Chrome, Safari und Opera, nicht jedoch in IE oder Firefox. In nicht-kompatiblen Browsern fallen die Übergänge jedoch von selbst auf einen einfachen Hover-Status zurück.
Um die Animation auch in IE und Firefox darzustellen, benötigen wir allerdings mehr als schlichtes CSS. Dafür nehmen wir jQuery, was wiederum eine Abfrage erfordert, ob der genutzte Browser Übergänge unterstützt oder nicht.
<script src="http://code.jquery.com/jquery.js" type="text/javascript"></script><script type="text/javascript">// make sure to execute this on page load$(function() { // determine if the browser supports transition var thisStyle = document.body.style, supportsTransition = thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.OTransition !== undefined || thisStyle.transition !== undefined;}</script>
Mit diesem Code prüfen wir das Dokumenttyp-Objekt, um zu sehen, ob Transition
unterstützt, beziehungsweise in irgendeinem der Browser-Präfixe genannt wird. Wir hätten natürlich auch das Browser-Objekt von jQuery nutzen können. Das ist jedoch nicht empfehlenswert. Statt dieser Browser-Schnüffelei sollten Sie das Problem der Browser-Abfrage per Feature Detection lösen.
Als Nächstes lassen Sie uns der Schaltfläche, die den animierten Übergang auslöst, ein Hover-Ereignis zufügen:
// make sure to execute this on page load$(function() { // determine if the browser supports transition var thisStyle = document.body.style, supportsTransition = thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.OTransition !== undefined || thisStyle.transition !== undefined; // assign jQuery transition if the browser doesn't support transition if ( ! supportsTransition ) { var defaultCSS = { width: 200, height: 50 }, hoverCSS = { width: 300, height: 75 }; // loop through each button $('.button').each(function() { var $thisButton = $(this); $thisButton.hover(function() { // execute this on mouseover $thisButton.css(defaultCSS) .animate(hoverCSS, 500, 'linear' ); }, function() { // execute this on mouseout $thisButton.animate(defaultCSS, 500, 'linear' ); }); }); }});
Hier weisen wir den CSS-Hover- und Normalzustand mithilfe der jQuery animate()
API zu. Damit das Ganze der CSS3-Transition entspricht, haben wir die Animationsdauer auf 500 Millisekunden beziehungsweise .5s
gesetzt und die Methode “linear” für einen sanften Übergang gewählt.
Hinweis: Bei Mouseover wenden wir zuerst den CSS-Default-Zustand über die Query css()
API zu. Erst danach rufen wir animate()
über die CSS-Hover-Eigenschaft ab. Sinn und Zweck: Damit überschreiben wir die zugewiesene :hover
-Pseudo-Klasse in unserem CSS-Code.
Damit funktioniert unser CSS-Übergang in allen gängigen Browsern. Dieses Skript können Sie abwandeln, um Übergänge mit jeder beliebigen CSS-Eigenschaft zu erstellen, die von jQuery.animate() unterstützt wird.
Diese Technik ist auf alle CSS-Attribute mit numerischen Angaben wie zum Beispiel Schriftgröße anwendbar. Zudem erweitert jQuery UI die animate()-Funktion, um nicht-numerische Attribute wie die Farbe zu unterstützen.
Ein paar Worte zum Schluss
Wenn auch nicht ganz perfekt, werden CSS3-Eigenschaften nun doch von allen modernen Browsern außer IE unterstützt.
Die Filter des IE nebst .htc-Hacks füllen die meisten dieser Lücken. Allerdings bringen diese Methoden jeweils diverse Nachteile mit sich. Im Allgemeinen sind sie ziemlich eigenwillig und problembehaftet, wenn es darum geht, mehrere Filter miteinander zu verbinden.
Letztendlich sind Hacks für nichtkompatible CSS3-Browser immer etwas suboptimal. Das sollte dennoch nie den Ausschlag dafür geben, Websites in modernen Browsern mit ausgefeilteren Eigenschaften und Funktionen auszustatten.
Einfach gesagt: Websites müssen nicht in jedem Browser exakt gleich aussehen.
(mm), ™