Menu Search
Jump to the content X X
Smashing Conf Barcelona 2016

We use ad-blockers as well, you know. We gotta keep those servers running though. Did you know that we publish useful books and run friendly conferences — crafted for pros like yourself? E.g. upcoming SmashingConf Barcelona, dedicated to smart front-end techniques and design patterns.

Connecting The Dots With CSS3

As a web community, we’ve made a lot of exciting progress in regards to CSS3. We’ve put properties like text-shadow & border-radius to good use while stepping into background-clip and visual effects like transitions and animations. We’ve also spent a great deal of time debating how and when to implement these properties. Just because a property isn’t widely supported by browsers or fully documented at the moment, it doesn’t mean that we shouldn’t be working with it. In fact, I’d argue the opposite.

Best practices for CSS3 usage need to be hashed out in blog posts, during spare time, and outside of client projects. Coming up with creative and sensible ways to get the most out of CSS3 will require the kind of experimentation wherein developers gladly trade ten failures for a single success. Right now, there are tons of property combinations and uses out there waiting to be discovered. All we have to do is connect the dots. It’s time to get your hands dirty and innovate!

CSS Three: Connecting The Dots

Where Do I Start? Link

One of my favorite things to do is to scan a list of CSS properties and consider which ones might work well together. What would be possible if I was to connect @font-face to text-shadow and the bg-clip:text property? How could I string a webkit-transition and opacity together in a creative way? Here are a few results from experiments I’ve done recently. While some may be more practical than others, the goal here is to spark creativity and encourage you to connect a few dots of your own.

Note: While Opera and Firefox may soon implement specs for many of the CSS3 properties found here, some of these experiments will currently only work in Webkit-browsers like Google Chrome or Safari.

Example #1: CSS3 Transitions Link

A safe place to start with CSS3 visual effects is transitioning a basic CSS property like color, background-color, or border on hover. To kick things off, let’s take a link color CSS property and connect it to a .4 second transition.


Start with your link CSS, including the hover state:

a { color: #e83119; }
a:hover { color:#0a99ae; }

Now, bring in the CSS3 to set and define which property you’re transitioning, duration of transition and how that transition will proceed over time. In this case we’re setting the color property to fade over .4 seconds with an ease-out timing effect, where the pace of the transition starts off quickly and slows as time runs out. To learn more about timing, check out the Surfin’ Safari Blog post on CSS animations2. I prefer ease-out most of the time simply because it yields a more immediate transition, giving users a more immediate cue that something is changing.

a {
-webkit-transition-property: color;

You can also combine these into a single CSS property by declaring the property, duration, and timing function in that order:

a { -webkit-transition: color .4s ease-out; }

View the live example here53

The final product should be a red text link that subtly transitions to blue when users hover with their mouse pointer. This basic transitioning technique can be connected to an infinite amount of properties. Next, let’s let’s create a menu bar hover effect where border-thickness is combined with a .3 second transition.


To start, we’ll set a series of navigation links with a 3 pixel bottom border, and a 50 pixel border on hover:

border-nav a { border-bottom: 3px solid #e83119 }
border-nav a:hover { border-bottom: 50px solid #e83119 }

To bring the transition into the mix, let’s set a transition to gradually extend the border thickness over .3 seconds in a single line of CSS:

border-nav a { -webkit-transition: border .3s ease-out; }

View the live example here53

Examples Link

This is just one example of how to use these transitions to enhance links and navigation items. Here are a few other sites with similar creative techniques:

Team Excellence6
The webkit transition on all navigation items, including the main navigation set at .2s provides a nice effect without making visitors wait too long for the hover state.


Ackernaut has subtle transitions on all link hovers, and extends the property to fade the site header in/out.


The SimpleBits main navigation transitions over .2 seconds with linear timing.


On DesignSwap, all text links have a .2 second transitions on hover and the swapper profiles fade out to real details about the latest designs.

Design Swap13

Jack Osborne14
Jack Osborne transitions all of the blue links as well as the post title link on his home page.

Jack Osborne15

Eric E. Anderson16
Eric E. Andersion has taken CSS3 implementation even further by implementing a transition on his main navigation for background color and color alongside border-radius and box-shadow.


Example #2: Background Clip Link

When connected to properties like text-shadow and @font-face, the background-clip property makes all things possible with type. To keep things simple, we’ll start with taking a crosshatch image and masking it over some text. The code here is pretty simple. Start by wrapping some HTML in a div class called bg-clip:

<div class="bg-clip">

example 2a18

Now to the CSS. First, set the image you will be masking the text with as the background-image. Then, set the -webkit-text-fill-color to transparent and define the -webkit-background-clip property for the text.

.bg-clip {
background: url(../img/clipped_image.png) repeat;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;

View the live example here2119

This opens the door for you to start adding texture or other graphic touches to your type without resorting to using actual image files. For even more CSS3 text experimentation, we can add the transform property to rotate the text (or any element for that matter) to any number of degrees. All it takes is a single line of CSS code:

-webkit-transform: rotate(-5deg);
-moz-transform: rotate(-5deg);
-o-transform: rotate (-5deg);

example 2b20

Note: While background-clip isn’t available in Firefox or Opera, the transform property is, so we’ll set this for each browser.

View the live example here2119

Examples Link

This is a fairly simple implementation, but there are quite a few really interesting and innovative examples of this technique:

Trent Walton22
An experiment of my own, combining bg-clip and @font-face to recreate a recent design.

Trent Walton23

An excellent example of what is possible when you throw rotate, bg-clip and @font-face properties together.

neography rotate25

Everyday Works26
One of the earliest innovative implementations of CSS text rotation I’ve seen.


Panic Blog28
The Panic blog randomly rotates divs / posts. Be sure to refresh to see subtle changes in the degree of rotation.

panic blog29

Sam Brown30
Sam’s got a really nice text-rotate hover effect on the “stalk” sidebar links.

Sam Brown31

Example #3: CSS Transforms, Box Shadow and RGBa Link

What used to take multiple divs, pngs and extra markup can now be accomplished with a few lines of CSS code. In this example we’ll be combining the transform property from example 2 with box-shadow and RGBa color. To start things off, we’ll create 4 image files, each showing a different version of the Smashing Magazine home page over time with a class for the shadow and a specific class to achieve a variety of rotations.


Here’s the HTML:

<div class="boxes">
<img class="smash1 shadowed" src="../img/smash1.jpg" alt="2007"/>
<img class="smash2 shadowed" src="../img/smash2.jpg" alt="2008"/>
<img class="smash3 shadowed" src="../img/smash3.jpg" alt="2009"/>
<img class="smash4 shadowed" src="../img/smash4.jpg" alt="2010"/>

Let’s set up the CSS for the RGBA Shadow:

.shadowed {
border: 3px solid #fff;
-o-box-shadow: 0 3px 4px rgba(0,0,0,.5);
-moz-box-shadow: 0 3px 4px rgba(0,0,0,.5);
-webkit-box-shadow: 0 3px 4px rgba(0,0,0,.5);
box-shadow: 0 3px 4px rgba(0,0,0,.5);

Before moving forward, let’s be sure we understand each property here. The box-shadow property works just like any drop shadow. The first two numbers define the shadow’s offset for the X and Y coordinates. Here we’ve set the shadow to 0 for the X, and 3 for the Y. The final number is the shadow blur size, in this case it’s 4px.

RGBa is defined in a similar manner. RGBa stands for red, green, blue, alpha. Here we’ve taken the RGB value for black as 0,0,0 and set it with a 50% alpha level at .5 in the CSS.

Now, let’s finish off the effect by adding a little CSS Transform magic to rotate each screenshot:

.smash1 { margin-bottom: -125px;
-o-transform: rotate(2.5deg);
-moz-transform: rotate(2.5deg);
-webkit-transform: rotate(2.5deg);
.smash2 {
-o-transform: rotate(-7deg);
-moz-transform: rotate(-7deg);
-webkit-transform: rotate(-7deg);
.smash3 {
-o-transform: rotate(2.5deg);
-moz-transform: rotate(2.5deg);
-webkit-transform: rotate(2.5deg);
.smash4 {
margin-top: -40px;
-o-transform: rotate(-2.5deg);
-moz-transform: rotate(-2.5deg);
-webkit-transform: rotate(-2.5deg);

View the live example here33

Examples Link

Here are a few additional sites with these properties implemented right now:

Butter Label34
This site is jam packed with well-used CSS3. Notice the transform and box-shadow properties on the subscribe form.

Butter Label35

Hope 140
Another site with plenty of CSS3 enhancements, Hope 140’s End Malaria campaign site features a collage of photographs that all have the same shadow & transform properties outlined in our example.

Hope 140

For A Beautiful Web36
For A Beautiful Web utilizes RGBa and box-shadow for the overlay video clips boxes linked from their 3 master-class DVDs. While you’re there, be sure to note the transforms paired with the DVD packaging links.

For A Beautiful Web37

Simon Collison38
Simon Collison has implemented RGBa and box-shadow on each of the thumbnail links for his new website.


Example #4: CSS3 Animations Link

If you really want to push the envelope and truly experiment with the latest CSS3 properties, you’ve got to try creating a CSS3 keyframe animation. As a simple introduction, let’s animate a circle .png image to track the outer edges of a rectangle. To begin, let’s wrap circle.png in a div class:

<div class="circle_motion">
<img src="/img/circle.png" alt="circle"/>


The first step in the CSS will be to set the properties for .circle_motion, including giving it an animation name:

.circle_motion {
-webkit-animation-name: track;
-webkit-animation-duration: 8s;
-webkit-animation-iteration-count: infinite;

Now, all that remains is to declare properties for each percentage-based keyframe. To keep things simple here, I’ve just broken down the 8 second animation into 4 quarters:

@-webkit-keyframes track {
0% {
25% {
50% {
margin-left: 300px;
75% {
margin-left: 300px;
100% {

View the live example here41

Examples Link

A few examples of CSS3 animations online now:

Hope 140
Hope 140 subtly animates their yellow “Retweet to Donate $10” button’s box shadow.

Hope 140

Hardboiled Web Design42
Andy Clarke puts iteration count, timing function, duration and delay properties to good use when animating a detective shadow across the background of Hardboiled Web Design.

Hard Boiled Web Design43

Anthony Calzadilla has recreated the Spider Man opening credits using CSS3 with JQuery and HTML5. You can also learn more about the process in his article “Pure CSS3 Spiderman Cartoon w/ jQuery and HTML5 – Look Ma, No Flash!”45.


The Many Faces Of…47
The Many Faces Of… animates the background position of a div to create an effect where characters creep up from the bottom of the page.

The Many Faces Of...48

Trent Walton49
I recently wrote a post about CSS3 usage, and animated a blue to green to yellow background image for the masthead.

CSS Three In Transition50

OK, Dots Connected! Now What? Link

Yes, all of this CSS3 stuff is insanely exciting. If you’re like me, you’ll want to start finding places to use it in the real world immediately. With each new experimental usage come even more concerns about implementation. Here are a few of my ever-evolving opinions about implementing these properties online for your consideration.

  • CSS3 enhancements will never take the place of solid user-experience design.
  • Motion and animation demands attention. Think about a friend waving to get your attention from across a crowded room or a flashing traffic light. Heavy-handed or even moderate uses of animation can significantly degrade user experience. If you are planning on implementing these techniques on a site with any sort of A to B conversion goals, be sure to consider the psychology of motion.
  • Don’t make people wait on animations. Especially when it comes to hover links, be sure there is an immediate state-change cue.
  • Many of these effects can be used in a bonus or easter-egg type of application. Find places to go the extra mile.

This is a group effort. Don’t be afraid of failure, enlist the help of other developers, join the online discussions, and above all, have fun!

Further Reading Link

You may be interested in the following related posts:

Footnotes Link

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
SmashingConf Barcelona 2016

Hold on, Tiger! Thank you for reading the article. Did you know that we also publish printed books and run friendly conferences – crafted for pros like you? Like SmashingConf Barcelona, on October 25–26, with smart design patterns and front-end techniques.

↑ Back to top Tweet itShare on Facebook


Trent Walton is founder and 1/3 of Paravel Inc., a custom web design and development shop based out of the Texas Hill Country. When he’s not working on client projects, he’s probably writing & designing articles for his blog, or contributing ideas for the next edition of

  1. 1

    interesting. Thanks

  2. 2

    Very nice CSS Three overview Trend, but you missed this CSS Tranistion – Image Gallery ( sliding content without JavaScript).

  3. 3

    The thing I love most about some of these examples is their subtlety, and the fact that, without them nothing’s changed except the smallest detail. For example, the ease of adding a fade effect to ALL links on your site with one line of CSS (this will change when other browsers catch up), is amazing! And it means that all browsers will have the hover change, some browsers will have that “extra special” effect. Progressive enhancement at it’s best.

  4. 4

    Excellent tutorial on some of the new CSS3 things coming along, expecially love the border transition.

  5. 5

    Tiago Simões

    May 27, 2010 3:07 am

    Great article! We’re also using several CSS3 techniques for hovers on our new homepage

  6. 6

    Gerwin Janssen

    May 27, 2010 3:34 am

    Last week I have made a ROFL COPTER animation in HTML5 and CSS3.
    Check it out! Don’t forget to ReTweet!

  7. 7

    I notice the use of the new Google Font API there.. nice. Did I just notice it now or has it been in use for a while?

  8. 8

    This was a very interesting read. I’m coding a HTML5/CSS3 Website right now. Well I’m thinking about it. Your tipps come pretty handy.

  9. 9

    Smashing Editorial

    May 27, 2010 4:15 am

    We’ve been using Google Fonts API for a while now. :-)

  10. 10

    Praveen Nair

    May 27, 2010 4:30 am

    Excellent stuff.. CSS3 yet to gain popularity among web designers, coz of the compatibility issues.. I loved all the stuff written in this post specially the background clip and shadow property. These will be very handy in future.


  11. 11

    Jesse @Everydayworks

    May 27, 2010 4:48 am


    Great post. Thanks for linking to me.

    It’s nice to see a collection of simple CSS 3 techniques that enhances a design and makes it less boring. These little tweaks applied to a site design can really make it interactive without the use of animation tools.

  12. 12

    What browser are you testing in? I’m using firefox 3.6, and none of your effects are working.

  13. 13

    Raphael Pudlowski

    May 27, 2010 5:05 am

    every web designer must be aware that many of these features don’t work ewerywhere, and look different on different web browsers.
    As for making an animation (like spiderman), it’s of the level flash animations was at their beginning, without the vector scalability :) And i don’t even mention that you have to code all by hand (no timeline, objects ect…) So no, don’t push css3 and html5 in a way where it shouldn’t be used…

  14. 14

    I’m with Josh, I’m using Firefox 3.6.3 and I don’t see any transitions? What browser and OS are you using?

  15. 15

    Trent Walton

    May 27, 2010 5:37 am

    @Josh & @Brad, These properties are currently only fully supported by -webkit browsers like safari or chrome. Sorry for the confusion. I’ve covered this a bit in the first 3-4 paragraphs of the article. Thanks for reading!

  16. 16

    @Josh & Brad: CSS Tranistion for example will be surported by the Firefox-Version 3.7

  17. 17

    I believe these transitions, being webkit, will only work in Chrome and Safari. So those of you using Firefox, they won’t work quite yet.

  18. 18

    Great post. I plan on using some transition effects for my social media icon links.

  19. 19

    Pedro Pinto

    May 27, 2010 6:15 am

    same thing here..

  20. 20

    I’m having the same problem as Josh has. Viewing it in Chrome 4 works beautifully, but not in FFox 3.6 or IE 8. Great post, thank you.


↑ Back to top