Button Effect with CSS3 Gradients & jQuery
— Posted on July 3, 2013 —
Create a fancy fading button without images
Since CSS3 doesn’t support transitioning gradient backgrounds yet, I wanted to show a simple way to fade between two gradients using only CSS3 and jQuery.
Markup:
<a id="button" href=""> Download <span></span> </a>
CSS:
First we set up our button CSS.
#button { font-family: 'Oswald', sans-serif; text-transform: uppercase; color:#FFF; font-size:18px; font-weight: bold; text-decoration:none; text-shadow:-1px -1px 0px rgba(111,43,23,0.25); background: #ff8200; /* Old browsers */ background: -moz-linear-gradient(top, #ff8200 34%, #ff4800 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(34%,#ff8200), color-stop(100%,#ff4800)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #ff8200 34%,#ff4800 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #ff8200 34%,#ff4800 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #ff8200 34%,#ff4800 100%); /* IE10+ */ background: linear-gradient(to bottom, #ff8200 34%,#ff4800 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff8200', endColorstr='#ff4800',GradientType=0 ); /* IE6-9 */ box-shadow:2px 2px 0px rgba(0,0,0,0.5); display:inline-block; padding:8px 35px; /* Adjusts the size of the button */ position: relative; /* This enables us to apply a z-index property */ z-index: 100; /* A higher number will pull our text above the <span> tag */ transition: all 300ms linear 0s; /* Fades the text */ } #button:hover { color:#33332d; text-shadow: none; }
The trick is that we put an absolutely positioned, 100% width, 100% height hidden span tag nested in our link, and we use jQuery to fade it in when the user hovers the button. By setting the z-index of the positioned element, we are able to move the span below the text.
#button span { position: absolute; width: 100%; height: 100%; display: none; top: 0; left: 0; z-index: -1; /* Places the span below the link text */ background: #ffffff; /* Old browsers */ background: -moz-linear-gradient(top, #ffffff 41%, #c4c4c4 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(41%,#ffffff), color-stop(100%,#c4c4c4)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #ffffff 41%,#c4c4c4 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #ffffff 41%,#c4c4c4 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #ffffff 41%,#c4c4c4 100%); /* IE10+ */ background: linear-gradient(to bottom, #ffffff 41%,#c4c4c4 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#c4c4c4',GradientType=0 ); /* IE6-9 */ }
Javascript:
CSS can’t do the additional work we need to make the span fade in, so we use a little jQuery to accomplish the desired effect.
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> <script src="js/button.js"></script>
$(document).ready(function() { $("#button").hover( function(){ // When the hover begins $("#button span").fadeIn(300); }, function(){ // When the hover ends $("#button span").fadeOut(300); } ); });