• Herzlich willkommen
  • Über mich
  • Artikelübersicht
  • Gaming
    • LittleBigPlanet: Die Geschichte von Sackboy
  • E-Mail für mich
  • Gästebuch
  • Impressum
  • Oben ↑
  • Veröffentlicht am 27. Mai 2011 / 1182 Leser / Keine Kommentare
    CSS Icon

    [CSS3] Ein Timer mit “keyframes”

    Mit “keyframes” lassen sich tolle Sachen machen. Die Funktionsweise sowie einige Beispiele habe ich in diesem Artikel demonstriert. So habt ihr unter anderem die Möglichkeit den Hintergrund in einer bestimmten Zeitspanne in festgelegten Schritten zu verschieben. Und so kam mir die Idee einen Timer zu erstellen und mit “keyframes” zu animieren.

    Der fertige Timer, der die Sekunden bis zu einer Minute hochzählt, sieht dann so aus

    Interessiert?

    Basics

    Ganz ohne Bilddateien funktioniert der Timer leider nicht. Wir müssen zwei Bilddateien für die Zahlen erstellen. Ein Bild mit den Zahlen 0 bis 9 für die Sekunden und ein Bild mit Zahlen von 0 bis 5 für die Zehnsekunden. Das erste Bild hat eine Größe von 150 x 2000 Pixeln, wobei jede Zahl maximal 150 x 200 Pixel groß ist. Das zweite Bild hat eine Größe von 150 x 1200 Pixel. Achtet darauf, dass der Hintergrund der Bilder transparent ist. Am besten speichert ihr die Bilder als “png”.

    Wer keine Lust hat die Grafiken selbst zu erstellen, kann hier zugreifen:

    Download starten

    Leider ist mir noch keine Lösung eingefallen, wie man die Sekundenanzeige mit Text statt Bilder erstellen kann. Jemand eine Idee? Dann bitte melden.

    Okay weiter geht’s. Wir binden den Timer als Div-Container in unsere Webseite ein. Der Sekundenzähler sowie der Zehnsekundenzähler haben eine Breite von 150 Pixeln. Zwischen den beiden Boxen bleibt ein Whitespace von 10 Pixeln. Der Div-Container hat also insgesamt eine Breite von 310 Pixeln.

    #timer {
    width: 310px;
    margin: 20px auto;
    padding: 0;
    }
    

    Die beiden Zähler-Boxen haben jeweils eine Breite von 150 sowie eine Höhe von 250 Pixeln. Die erste Box (Zehnsekunden) floatet nach links, die zweite (Sekunden) nach rechts.

    .box_tenseconds {
    float: left;
    width: 150px;
    height: 250px;
    margin: 50px auto;
    text-align: center;
    overflow: hidden;
    }
    
    .box_seconds {
    float: right;
    width: 150px;
    height: 250px;
    margin: 50px auto;
    text-align: center;
    overflow: hidden;
    }
    

    Das overflow: hidden sorgt übrigens dafür, dass der Teil des Hintergrundes, der sich außerhalb der Zählerboxen befindet, nicht sichtbar ist.

    Wir fügen noch einen abgerundeten Rand sowie einen Schlagschatten für die Zählerboxen hinzu

    -moz-border-radius: 10px;
    border-radius: 10px;
    -moz-box-shadow: 4px 5px 5px #999;
    -webkit-box-shadow: 4px 5px 5px #999;
    box-shadow: 4px 5px 5px #999;
    

    und binden die beiden Bilddateien als Hintergrund ein, natürlich mit coolem Farbverlauf:

    .box_tenseconds {
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, #555;
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, -moz-linear-gradient(top, #555 0%, #222 49%, #0a0e0a 51%, #0a0809 100%);
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, -webkit-gradient(linear, left top, left bottom, color-stop(0%,#555), color-stop(49%,#222), color-stop(51%,#0a0e0a), color-stop(100%,#0a0809));
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, -webkit-linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, -o-linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, -ms-linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    }
    
    .box_seconds {
    background: url(../images/timer_seconds.png) 0 25px repeat-x, #555;
    background: url(../images/timer_seconds.png) 0 25px repeat-x, -moz-linear-gradient(top, #555 0%, #222 49%, #0a0e0a 51%, #0a0809 100%);
    background: url(../images/timer_seconds.png) 0 25px repeat-x, -webkit-gradient(linear, left top, left bottom, color-stop(0%,#555), color-stop(49%,#222), color-stop(51%,#0a0e0a), color-stop(100%,#0a0809));
    background: url(../images/timer_seconds.png) 0 25px repeat-x, -webkit-linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    background: url(../images/timer_seconds.png) 0 25px repeat-x, -o-linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    background: url(../images/timer_seconds.png) 0 25px repeat-x, -ms-linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    background: url(../images/timer_seconds.png) 0 25px repeat-x, linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    }
    

    Animation hinzufügen

    Wie versprochen, werden wir den Hintergrund mit keyframes animieren. Dabei geht es mir weniger um die Animation, als vielmehr darum die Zeitabstände für das Verschieben des Hintergrundes festzulegen.

    Zunächst gilt es die Animation zu definieren und die Zeit (in Prozentangaben) festzulegen, in denen der Hintergrund verschoben wird. Für den Zehnsekundenzähler:

    @-webkit-keyframes timer_tenseconds {
    0% { background-position: 0 25px; }
    16.6699% { background-position: 0 25px; }
    16.67% { background-position: 0 -175px; }
    33.3199% { background-position: 0 -175px; }
    33.32% { background-position: 0 -375px; }
    49.9999% { background-position: 0 -375px; }
    50% { background-position: 0 -575px; }
    66.6699% { background-position: 0 -575px; }
    66.67% { background-position: 0 -775px; }
    83.3199% { background-position: 0 -775px; }
    83.32% { background-position: 0 -975px; }
    99.9999% { background-position: 0 -975px; }
    100% { background-position: 0 25px; }
    }
    

    und den Sekundenzähler

    @-webkit-keyframes timer_seconds {
    0% { background-position: 0 25px; }
    9.9999% { background-position: 0 25px; }
    10% { background-position: 0 -175px; }
    19.9999% { background-position: 0 -175px; }
    20% { background-position: 0 -375px; }
    29.9999% { background-position: 0 -375px; }
    30% { background-position: 0 -575px; }
    39.9999% { background-position: 0 -575px; }
    40% { background-position: 0 -775px; }
    49.9999% { background-position: 0 -775px; }
    50% { background-position: 0 -975px; }
    59.9999% { background-position: 0 -975px; }
    60% { background-position: 0 -1175px; }
    69.9999% { background-position: 0 -1175px; }
    70% { background-position: 0 -1375px; }
    79.9999% { background-position: 0 -1375px; }
    80% { background-position: 0 -1575px; }
    89.9999% { background-position: 0 -1575px; }
    90% { background-position: 0 -1775px; }
    99.9999% { background-position: 0 -1775px; }
    100% { background-position: 0 25px; }
    }
    

    Der Zehnsekundenzähler verschiebt sich alle 10 Sekunden oder 16,66 % um 200 Pixel, der Sekundenzähler jede Sekunde (10%) um 200 Pixel. Die Zwischenschritte (z.B. bei 16,6699 % des Zehnsekundenzählers) sind für das “Ausschalten” der Animation. Wer lieber einen fließenden Übergang der Zahlen haben möchte, lässt die Zwischenschritte einfach weg.

    Die definierten Animationen müssen wir noch bei den Zählerboxen einbinden.

    .box_tenseconds {
    -webkit-animation-name: timer_tenseconds;
    -webkit-animation-duration: 60s;
    -webkit-animation-iteration-count: infinite;
    }
    
    .box_seconds {
    -webkit-animation-name: timer_seconds;
    -webkit-animation-duration: 10s;
    -webkit-animation-iteration-count: infinite;
    }
    

    Kannst du noch mal wiederholen?

    Klar. Hier der Code zusammengefasst:

    Die Animation

    @-webkit-keyframes timer_tenseconds {
    0% { background-position: 0 25px; }
    16.6699% { background-position: 0 25px; }
    16.67% { background-position: 0 -175px; }
    33.3199% { background-position: 0 -175px; }
    33.32% { background-position: 0 -375px; }
    49.9999% { background-position: 0 -375px; }
    50% { background-position: 0 -575px; }
    66.6699% { background-position: 0 -575px; }
    66.67% { background-position: 0 -775px; }
    83.3199% { background-position: 0 -775px; }
    83.32% { background-position: 0 -975px; }
    99.9999% { background-position: 0 -975px; }
    100% { background-position: 0 25px; }
    }
    
    @-webkit-keyframes timer_seconds {
    0% { background-position: 0 25px; }
    9.9999% { background-position: 0 25px; }
    10% { background-position: 0 -175px; }
    19.9999% { background-position: 0 -175px; }
    20% { background-position: 0 -375px; }
    29.9999% { background-position: 0 -375px; }
    30% { background-position: 0 -575px; }
    39.9999% { background-position: 0 -575px; }
    40% { background-position: 0 -775px; }
    49.9999% { background-position: 0 -775px; }
    50% { background-position: 0 -975px; }
    59.9999% { background-position: 0 -975px; }
    60% { background-position: 0 -1175px; }
    69.9999% { background-position: 0 -1175px; }
    70% { background-position: 0 -1375px; }
    79.9999% { background-position: 0 -1375px; }
    80% { background-position: 0 -1575px; }
    89.9999% { background-position: 0 -1575px; }
    90% { background-position: 0 -1775px; }
    99.9999% { background-position: 0 -1775px; }
    100% { background-position: 0 25px; }
    }
    

    Der Div-Container

    #timer {
    width: 310px;
    margin: 20px auto;
    padding: 0;
    }
    

    Die Zähler-Boxen

    .box_tenseconds {
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, #555;
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, -moz-linear-gradient(top, #555 0%, #222 49%, #0a0e0a 51%, #0a0809 100%);
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, -webkit-gradient(linear, left top, left bottom, color-stop(0%,#555), color-stop(49%,#222), color-stop(51%,#0a0e0a), color-stop(100%,#0a0809));
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, -webkit-linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, -o-linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, -ms-linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    background: url(../images/timer_tenseconds.png) 0 25px repeat-x, linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    float: left;
    width: 150px;
    height: 250px;
    margin: 50px auto;
    text-align: center;
    overflow: hidden;
    -moz-border-radius: 10px;
    border-radius: 10px;
    -moz-box-shadow: 4px 5px 5px #999;
    -webkit-box-shadow: 4px 5px 5px #999;
    box-shadow: 4px 5px 5px #999;
    -webkit-animation-name: timer_tenseconds;
    -webkit-animation-duration: 60s;
    -webkit-animation-iteration-count: infinite;
    }
    
    .box_seconds {
    background: url(../images/timer_seconds.png) 0 25px repeat-x, #555;
    background: url(../images/timer_seconds.png) 0 25px repeat-x, -moz-linear-gradient(top, #555 0%, #222 49%, #0a0e0a 51%, #0a0809 100%);
    background: url(../images/timer_seconds.png) 0 25px repeat-x, -webkit-gradient(linear, left top, left bottom, color-stop(0%,#555), color-stop(49%,#222), color-stop(51%,#0a0e0a), color-stop(100%,#0a0809));
    background: url(../images/timer_seconds.png) 0 25px repeat-x, -webkit-linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    background: url(../images/timer_seconds.png) 0 25px repeat-x, -o-linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    background: url(../images/timer_seconds.png) 0 25px repeat-x, -ms-linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    background: url(../images/timer_seconds.png) 0 25px repeat-x, linear-gradient(top, #555 0%,#222 49%,#0a0e0a 51%,#0a0809 100%);
    float: right;
    width: 150px;
    height: 250px;
    margin: 50px auto;
    text-align: center;
    overflow: hidden;
    -moz-border-radius: 10px;
    border-radius: 10px;
    -moz-box-shadow: 4px 5px 5px #999;
    -webkit-box-shadow: 4px 5px 5px #999;
    box-shadow: 4px 5px 5px #999;
    -webkit-animation-name: timer_seconds;
    -webkit-animation-duration: 10s;
    -webkit-animation-iteration-count: infinite;
    }
    

    Einbinden in die Webseite

    So geht’s

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    		<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
    		<title>Ein Minuten-Timer mit "keyframes"</title>
    	</head>
    	<body>
    	...
       	<div id="timer">
       		<p class="box_seconds"></p>
       		<p class="box_tenseconds"></p>
    	</div>
    	...
    	</body>
    </html>
    

    Hier gibt es das Gesamtpaket

    Download starten

    Zeig mir endlich die Demo

    Okay. Hier ist sie

    Demo ansehen

    Mir fällt zwar im Moment kein Einsatzzweck für einen solchen Timer ein, aber cool sieht er aus, oder?

    Das Prinzip lässt sich natürlich noch weiter ausbauen. Wie wäre es beispielsweise mit einer Stopp-Uhr?

    Demo ansehen

    Auch nett, oder? Wäre bitte jemand so freundlich und schaut dieser Demo zehn Stunden lang zu und berichtet mir, ob die Stunden synchron umschalten? Sanke döhn.

    Du suchst noch mehr zum Thema CSS3? Dann wirf einen Blick auf die Übersichtsseite:

    Übersicht CSS3
    Darf ich dir noch diese Artikel ans Herz legen?
    • [WordPress] Mehrere Sidebars nutzen vom 19. Mai 2012
    • [WordPress] Mein neues Theme ‘ZWEI’ vom 9. Mai 2012
    • [WordPress] ‘EINS’ – Mein erstes WordPress-Theme vom 23. April 2012
    • [CSS3] Ein horizontales Dropdown-Menü erstellen vom 18. April 2012
    • [CSS3] Die Pseudo-Klasse :target im Detail vom 12. April 2012
  • Twittern
  • Kategorien
  • Webdesign
  • Tags
  • css demo html internet tutorial
  • Dein Kommentar zu diesem Artikel

    Abbrechen





    Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

    «
    »

    Übersicht der Kategorien

  • Gaming
  • Grafik
  • Sicherheit
  • Sonstiges
  • Technik
  • Web
  • Webdesign
  • Übersicht der Schlagwörter

  • access
  • active directory
  • android
  • apple
  • atv
  • avatar
  • blu-ray
  • css
  • demo
  • divx
  • drm
  • dropbox
  • dsl
  • dvb
  • dyndns
  • e10
  • excel
  • facebook
  • fat32
  • fritzbox
  • fußball
  • galaxy s2
  • games
  • gif
  • gimp
  • google
  • guides
  • hannspad
  • hardware
  • hausmittel
  • hd
  • html
  • id3-tag
  • internet
  • ios
  • ipad
  • iphone
  • ipod
  • itunes
  • kennwort
  • lan
  • last.fm
  • lifestyle
  • littlebigplanet
  • marder
  • marketplace
  • medienfreigabe
  • modnation racers
  • mp3
  • musik
  • nas
  • nfl
  • ntfs
  • office
  • outlook
  • packers
  • partition
  • pdf
  • phishing
  • php
  • playstation 3
  • plugins
  • psn
  • psn id
  • remotedesktop
  • rss
  • sd
  • shopping
  • sim-lock
  • skin
  • spam
  • spielstand
  • sport
  • sql
  • steve jobs
  • tablet
  • theme
  • tutorial
  • tv
  • twonky media server
  • update
  • upnp
  • videos
  • vpn
  • wiedergabelisten
  • windows 7
  • windows media player
  • windows server
  • windows vista
  • wlan
  • word
  • wordpress
  • xbmc
  • xbox 360
  • xml
  • xoom
  • zip
    • Hallo, ich bin Olli. Herzlich willkommen auf meiner Webseite.

      Schön dich zu sehen

      Du findest hier jede Menge Informationen zu den Themen

      • WordPress und WordPress-Themes
      • Webdesign
      • Gaming
      • Grafikdesign
      • Technik
      • und vielen anderen...

      Schau dich in aller Ruhe um. Ich wünsche dir viel Spass beim Stöbern.

      Lust auf ein neues WordPress-Theme?

      WordPress-Themes

      Einige zufällig ausgewählte Artikel (nur für dich):

      • [Motorola Xoom] Update auf Honeycomb 3.2 ist da vom 2. November 2011
      • [WordPress] Eine Übersichtsseite aller Artikel erstellen vom 18. Mai 2010
      • DVB-S Aufnahme weiterverarbeiten vom 24. Oktober 2010
      • [Windows] Mehrere Dateien umbenennen und fortlaufend nummerieren vom 20. Juli 2010
      • Operation gelungen, Patient lebt (Webhosterwechsel) vom 18. August 2010

      Die letzten Kommentare:

      • Christian hat am 18.05.2012 den Artikel [XBMC] Der ultimative Einsteiger-Guide - Teil 1 kommentiert
      • Christian hat am 17.05.2012 den Artikel [XBMC] Der ultimative Einsteiger-Guide - Teil 1 kommentiert
      • Olli hat am 17.05.2012 den Artikel [XBMC] Der ultimative Einsteiger-Guide - Teil 1 kommentiert
      • Christian hat am 17.05.2012 den Artikel [XBMC] Der ultimative Einsteiger-Guide - Teil 1 kommentiert

      Hier habe ich noch einige interessante Links für dich:

      • Meine Blu-ray-Sammlung
      • Olli on BluLife
      • Olli on Facebook
      • Olli on Google+
      • Olli on last.fm
      • Olli on lbp.me
      • Olli on twitter
      • Olli on YouTube

      Und noch was für die Schnäppchenjäger:

      • abstauben24
      • Blu-ray Preisradar für Amazon
      • Chillmo
      • DVD Tiefpreis
      • myDealZ.de
      • myliveshopping.de
      • Preisfieber
      • Preisjäger
      • Schnäppchen mit Reichweite
      • Schnäppchenfuchs
      • Schnappen4u
      • Schotendealz

      Meine persönlichen Favoriten:

      • BENM.AT
      • CSS-Tricks
      • Engadget Deutschland
      • Hifi Forum
      • ifun.de
      • Smartdroid
      • Smashing Magazine
      • Winfuture.de
    • Olli on twitter
    • Olli on Facebook
    • Olli on Google+
    • Olli on last.fm
    • Olli on YouTube
    • RSS

    Seitenanfang ↑

    Hier wird seit 937 Tagen gebloggt | 235 hilfreiche Artikel | 277 liebevolle Kommentare

    176,885 Besucher gesamt | 2 Besucher online

    Artikel RSS-Feed | Kommentar RSS-Feed | Anmelden »

    © olivergast.de ist made in Germany und wird angetrieben von Wordpress

    Theme 'ZWEI' (modified) von Oliver Gast