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

    [CSS3] Einen animierten Button erstellen

    Vor einiger Zeit habe ich in diesem Artikel beschrieben, wie ihr einen feschen Button mit CSS-Code erstellt. Vielleicht sind euch die Buttons auf meiner Webseite schon aufgefallen. Auch diese basieren komplett auf CSS-Code. Wenn ihr mit der Maus über den Button fahrt, wird eine Grafik eingeblendet und der Text des Buttons verschiebt sich. Auf besonderen Wunsch hier ein kurzes Tutorial.

    Der “Trick” besteht darin, den Hintergrund zu verschieben und mittels des CSS3-Befehls transition zu animieren. Die Grafik, die als Hintergrund eingebunden ist, ist zunächst außerhalb des sichtbaren Bereichs, bei :hover wird diese dann in den Button verschoben. Der Button-Text ist zunächst mittig angeordnet und wird bei :hover links oder rechts ausgerichtet, je nachdem an welcher Seite das Bild eingeblendet wird.

    So sieht der fertige Button dann aus

    Don’t push me

    Dies funktioniert mit dem Internet Explorer 9 nicht vollständig, da dieser weder Hintergrundfarbverläufe mit Hintergrundbild noch Animationen darstellen kann.

    Seid ihr bereit? Los geht’s.

    Button-Basics

    Zunächst einige Grundeinstellungen für den Button.

    .button a {
    /* Beschriftung */
    font-size:14px;
    font-weight:bold;
    color:#ffffff;
    /* Breite festlegen je nach Textinhalt */
    width:150px;
    /* Innenabstand festlegen */
    padding:12px;
    /* Außenabstand festlegen */
    margin:10px auto;
    /* Button als Blockelement darstellen */
    display:block;
    }
    

    Button Styling

    Der Button soll natürlich rocken. Daher werden wir die Ecken abrunden

    -moz-border-radius: 5px;
    border-radius: 5px;
    

    einen Schlagschatten hinzufügen

    -webkit-box-shadow: 0 0 5px #999; /* Saf3.1+, Chrome */
    -moz-box-shadow: 0 0 5px #999; /* FF3.5+ */
    box-shadow: 0 0 5px #999;
    

    sowie einen Farbverlauf für den Hintergrund festlegen.

    background: #b5bdc8; /* Old browsers */
    background: -moz-linear-gradient(top, #b5bdc8 0%, #828c95 0%, #28343b 100%); /* FF3.6+ */
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b5bdc8), color-stop(0%,#828c95), color-stop(100%,#28343b)); /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* Opera11.10+ */
    background: -ms-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* IE10+ */
    background: linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* W3C */
    

    Nun braucht ihr eine Bilddatei für die Hintergrundanimation. Wer keine Lust hat selbst Grafiken zu erstellen, der schaut mal hier vorbei. Dort gibt es ausreichend Free Icon Sets, die man prima dafür verwenden kann. Habt ihr das passende Bild gefunden, achtet darauf, dass ihr eine der Textgröße entsprechende Größe verwendet. Ich nehme hier ein Bild mit 24 x 24 Pixeln.

    Den eben erstellen Code für den Hintergrundfarbverlauf passen wir wie folgt an:

    background: url(bild.png) 150px 60px no-repeat,  #b5bdc8; /* Old browsers */
    background: url(bild.png) 150px 60px no-repeat,  -moz-linear-gradient(top, #b5bdc8 0%, #828c95 0%, #28343b 100%); /* FF3.6+ */
    background: url(bild.png) 150px 60px no-repeat,  -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b5bdc8), color-stop(0%,#828c95), color-stop(100%,#28343b)); /* Chrome,Safari4+ */
    background: url(bild.png) 150px 60px no-repeat,  -webkit-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* Chrome10+,Safari5.1+ */
    background: url(bild.png) 150px 60px no-repeat,  -o-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* Opera11.10+ */
    background: url(bild.png) 150px 60px no-repeat,  -ms-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* IE10+ */
    background: url(bild.png) 150px 60px no-repeat,  linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* W3C */
    

    Damit haben wir ein Hintergrundbild eingefügt und dieses entsprechend außerhalb des Buttons positioniert, nämlich 150 Pixel vom linken Rand des Buttons, also rechts vom Text, sowie 60 Pixel vom oberen Rand. So ist das Bild unter den Button verschoben und zunächst nicht sichtbar. Nicht sichtbar stimmt nicht so ganz, den wir werden das Bild unterhalb des Buttons sehen. Um das Bild “unsichtbar” zu machen, passen wir unseren bisherigen Code an:

    overflow: hidden;
    

    Dies bewirkt, dass außerhalb des Blockelements angeordnete Dinge, wie eben unser Bild, nicht sichtbar sind.

    Wir werden gleich den Hover-Status definieren. Bevor wir dies tun, allerdings noch das wichtigste: die Animation. Wir wollen das Verschieben des Hintergrundes mit dem Befehl transition animieren. Dazu ergänzen wir folgendes:

    -webkit-transition-property: background-position;
    -webkit-transition-duration: 0.2s;
    -moz-transition-property: background-position;
    -moz-transition-duration: 0.2s;
    -o-transition-property: background-position;
    -o-transition-duration: 0.2s;
    transition-property: background-position;
    transition-duration: 0.2s;
    

    Durch diesen Befehl wird die Position des Hintergrundbildes innerhalb einer Zeitspanne von 0,2 Sekunden verschoben. Würden wir diesen Befehl weglassen, hätten wir keine Animation, sprich das Hintergrundbild wäre bei :hover einfach da.

    Viel Code für einen Button, oder? Wir sind aber noch nicht am Ende.

    Hover für den Button

    Nun gilt des den Hover-Status zu definieren. Wie bereits erwähnt, wollen wir

    1. die Position des Hintergrundbildes ändern und
    2. die Button-Beschriftung verschieben.

    Das machen wir wie folgt:

    .button a:hover {
    background: url(bild.png) 150px 12px no-repeat,  #b5bdc8; /* Old browsers */
    background: url(bild.png) 150px 12px no-repeat,  -moz-linear-gradient(top, #b5bdc8 0%, #828c95 0%, #28343b 100%); /* FF3.6+ */
    background: url(bild.png) 150px 12px no-repeat,  -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b5bdc8), color-stop(0%,#828c95), color-stop(100%,#28343b)); /* Chrome,Safari4+ */
    background: url(bild.png) 150px 12px no-repeat,  -webkit-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* Chrome10+,Safari5.1+ */
    background: url(bild.png) 150px 12px no-repeat,  -o-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* Opera11.10+ */
    background: url(bild.png) 150px 12px no-repeat,  -ms-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* IE10+ */
    background: url(bild.png) 150px 12px no-repeat,  linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* W3C */
    text-align:left;
    }
    

    Der Text wird nun bei :hover linksbündig ausgerichtet und das Hintergrundbild in der Höhe von 60 Pixel auf 12 Pixel angehoben.

    Nochmal ganz langsam

    Der gesamte Code:

    .button a {
    background: url(bild.png) 150px 60px no-repeat,  #b5bdc8; /* Old browsers */
    background: url(bild.png) 150px 60px no-repeat,  -moz-linear-gradient(top, #b5bdc8 0%, #828c95 0%, #28343b 100%); /* FF3.6+ */
    background: url(bild.png) 150px 60px no-repeat,  -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b5bdc8), color-stop(0%,#828c95), color-stop(100%,#28343b)); /* Chrome,Safari4+ */
    background: url(bild.png) 150px 60px no-repeat,  -webkit-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* Chrome10+,Safari5.1+ */
    background: url(bild.png) 150px 60px no-repeat,  -o-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* Opera11.10+ */
    background: url(bild.png) 150px 60px no-repeat,  -ms-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* IE10+ */
    background: url(bild.png) 150px 60px no-repeat,  linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* W3C */
    font-size:14px;
    font-weight:bold;
    color:#ffffff;
    width:150px;
    padding:12px;
    margin:10px auto;
    overflow: hidden;
    display:block;
    -moz-border-radius: 5px;
    border-radius: 5px;
    -webkit-box-shadow: 0 0 5px #999; /* Saf3.1+, Chrome */
    -moz-box-shadow: 0 0 5px #999; /* FF3.5+ */
    box-shadow: 0 0 5px #999;
    -webkit-transition-property: background-position;
    -webkit-transition-duration: 0.2s;
    -moz-transition-property: background-position;
    -moz-transition-duration: 0.2s;
    -o-transition-property: background-position;
    -o-transition-duration: 0.2s;
    transition-property: background-position;
    transition-duration: 0.2s;
    }
    
    .button a:hover {
    background: url(bild.png) 150px 12px no-repeat,  #b5bdc8; /* Old browsers */
    background: url(bild.png) 150px 12px no-repeat,  -moz-linear-gradient(top, #b5bdc8 0%, #828c95 0%, #28343b 100%); /* FF3.6+ */
    background: url(bild.png) 150px 12px no-repeat,  -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b5bdc8), color-stop(0%,#828c95), color-stop(100%,#28343b)); /* Chrome,Safari4+ */
    background: url(bild.png) 150px 12px no-repeat,  -webkit-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* Chrome10+,Safari5.1+ */
    background: url(bild.png) 150px 12px no-repeat,  -o-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* Opera11.10+ */
    background: url(bild.png) 150px 12px no-repeat,  -ms-linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* IE10+ */
    background: url(bild.png) 150px 12px no-repeat,  linear-gradient(top, #b5bdc8 0%,#828c95 0%,#28343b 100%); /* W3C */
    text-align:left;
    }
    

    In die Webseite einbauen

    Wie kommt der Button jetzt in unsere Webseite? Wir binden den Button als Div-Container ein:

    <!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 animierter Button mit CSS3</title>
    </head>
    <body>
    ...
    <div class="button"><a href="" target="_blank">Don't push me</a></div>
    ...
    </body>
    </html>
    

    Alles klar?

    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
  • Technik
  • 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):

      • [WordPress] Post-Thumbnails nutzen vom 7. August 2010
      • [Windows 7] Medienstreaming deaktivieren vom 19. April 2011
      • DynDNS Adresse einrichten vom 16. Oktober 2009
      • [iPad] Videos per WLAN streamen vom 7. Mai 2011
      • [XBMC] Ganz im Stile des neuen Xbox-Dashboards vom 26. März 2012

      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 | 0 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