CSS3 vs. Photoshop: Rounded Corners and Box Shadows
basix

CSS3 vs. Photoshop: Rounded Corners and Box Shadows

Tutorial Details
  • Program: Any source code editor, I'm using Dreamweaver, Photoshop
  • Version: CS5 (Any will work)
  • Difficulty: Basix
  • Estimated Completion Time: 1 hour

Final Product What You'll Be Creating

This entry is part 2 of 4 in the series CSS3 vs. Photoshop

This tutorial will demonstrate how to create a nice, simple navigation bar using several combined CSS3 styles. We’re aiming for a look and feel that in the past could only be created by combining several images, JavaScript and several divs. Let’s get it started…

Note: all the following examples were tested on Mozilla Firefox, Safari and Chrome. If you want to get something similar in IE or any other browser leave a comment and I will be glad to help you.


Before We Get Started

A good looking and well designed navigation bar has been, from the very beginning of the web design, one of the more powerful elements to keep websites organized and well structured. In the past creating a nice design using shadows, gradients, rounded corners and hover effects required a series of tricks that increased the size of our code and the number of images.

For this tutorial we will dig into two very important CSS3 effects; Rounded Corners and Box Shadows, plus we will use the linear gradients previously shown in the CSS3 vs Photoshop – Complex Backgrounds Tutorial.


Step 1: Rounded Corners

Everyone has heard of them, it will be redundant to talk about how to create them, so in the following examples I will focus on the differences of creating a Rounded Corner effect using images and the advantages and disadvantages of using CSS3 instead.

Creating a rounded corner effect is pretty simple in any graphic software, but in Photoshop we have some problems:

Accuracy: Even if you can set the rounded corner radius, Photoshop’s built in anti-aliasing engine often adds one or two extra pixels in the graphic. Most of us in the past had to manually reduce pixels of inexact image based rounded corners to create a clean join with, for instance, color backgrounds.

Editing: This is one of the biggest problems of creating a image-based rounded corner. If you create a graphic for a 10px radius corner in Photoshop, and for some reason you need to increase the radius to 20px there is no other way to do it than redrawing the shape, or manually editing all its corners, loosing time and accuracy. Resizing is another huge problem, if you want to stretch or enlarge the shape you must use the Point Selection Tool in Photoshop, because using the Transform Controls may cause undesired distortions in the corner shape. I needn’t even mention that slicing the corners takes a bunch of valuable minutes.

Fills and Borders: Creating a gradient fill inside an image based rounded corner box has always been a big task, wuthout even covering borders, surgical precision is required to slice the images involved. You need to create at least 3 images for each box, one for the top corners, another for the bottom corners and the horizontal or vertical gradient and then write the code for it. Another problem with image fill is that often the container has to increase its height or width, obtaining an undesirable effect with the gradient (see screenshot below).

Mix Corner Styles: In Photoshop, creating mixed corner styles takes a while, there are no options to combine corner styles. You must manually reduce/increase radius or combine shapes… and then slice each corner.


Now in CSS3

Using CSS3 to replace the classic image-based rounded corners is a great idea. Here are a couple of pros:

  • It reduces the number of images and HTTP requests to the server
  • It works on all the modern browsers (except IE 6,7,8) including most of the popular mobile browsers.
  • You just need a couple of lines in the CSS file to make them work
  • Increasing/decreasing radius, resizing, changing fill and borders take only a few seconds, but in Photoshop take several minutes

Let’s see the code to create rounded corners on an HTML element:

/*Rounded Corner Boxes*/
.box{
	background-image:-moz-linear-gradient(top, #FAD502, #E89502);
	background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FAD502), to(#E89502), color-stop(1,#E89502));
}
.fourcorners{
	-moz-border-radius: 20px;
	-webkit-border-radius: 20px;
	-khtml-border-radius: 20px;
	border-radius: 20px;
}
.topleft{
	-moz-border-radius-topleft: 20px;
	-webkit-border-top-left-radius: 20px;
	-khtml-border-radius-topleft: 20px;
	border-top-left-radius: 20px;
}
.bottomleft{
	-moz-border-radius-bottomleft: 20px;
	-webkit-border-bottom-left-radius: 20px;
	-khtml-border-radius-bottomleft: 20px;
	border-bottom-left-radius: 20px;
}
.topright{
	-moz-border-radius-topright: 20px;
	-webkit-border-top-right-radius: 20px;
	-khtml-border-radius-topright: 20px;
	border-top-right-radius: 20px;
}
.bottomright{
	-moz-border-radius-bottomright: 20px;
	-webkit-border-bottom-right-radius: 20px;
	-khtml-border-radius-bottomright: 20px;
	border-bottom-right-radius: 20px;
}
.asymmetrical1{
	-webkit-border-top-left-radius: 160px;
	-khtml-border-radius-topleft: 160px;
	-moz-border-radius-topleft: 160px;
	border-top-left-radius: 160px;
	-webkit-border-top-right-radius: 20px;
	-khtml-border-radius-topright: 20px;
	-moz-border-radius-topright: 20px;
	border-top-right-radius: 20px;
	-webkit-border-bottom-left-radius: 10px;
	-khtml-border-radius-bottomleft: 10px;
	-moz-border-radius-bottomleft: 10px;
	border-bottom-left-radius: 10px;
	-webkit-border-bottom-right-radius: 0px;
	-khtml-border-radius-bottomright: 0px;
	-moz-border-radius-bottomright: 0px;
	border-bottom-right-radius: 0px;
}
.asymmetrical2{
	-webkit-border-top-left-radius: 0px;
	-khtml-border-radius-topleft: 0px;
	-moz-border-radius-topleft: 0px;
	border-top-left-radius: 0px;
	-webkit-border-top-right-radius: 90px;
	-khtml-border-radius-topright: 90px;
	-moz-border-radius-topright: 90px;
	border-top-right-radius: 90px;
	-webkit-border-bottom-left-radius: 0px;
	-khtml-border-radius-bottomleft: 0px;
	-moz-border-radius-bottomleft: 0px; border-bottom-left-radius: 0px;
	-webkit-border-bottom-right-radius: 90px;
	-khtml-border-radius-bottomright: 90px;
	-moz-border-radius-bottomright: 90px;
	border-bottom-right-radius: 90px;
}
.circle{
	width:170px;
	height:170px;
	padding:15px;
	font-family:Arial, Helvetica, sans-serif;
	color:#FFF;
	font-size:12px;
	font-weight:bold;
	float:left;
	background-image:-moz-linear-gradient(top, #FAD502, #E89502);
	background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FAD502), to(#E89502), color-stop(1,#E89502));
	-webkit-border-top-left-radius: 100px;
	-khtml-border-radius-topleft: 100px;
	-moz-border-radius-topleft: 100px;
	border-top-left-radius: 100px;
	-webkit-border-top-right-radius: 100px;
	-khtml-border-radius-topright: 100px;
	-moz-border-radius-topright: 100px;
	border-top-right-radius: 100px;
	-webkit-border-bottom-left-radius: 100px;
	-khtml-border-radius-bottomleft: 100px;
	-moz-border-radius-bottomleft: 100px;
	border-bottom-left-radius: 100px;
	-webkit-border-bottom-right-radius: 100px;
	-khtml-border-radius-bottomright: 100px;
	-moz-border-radius-bottomright: 100px;
	border-bottom-right-radius: 100px;
}

View Demo


Step 2: Box Shadows

Some of the coolest effects that you can achieve with Photoshop are through Drop Shadows and Inner Shadows. Using them in the proper way can result in outstanding 3D effects. Of course, using a drop shadow or an inner shadow in the wrong way can quickly become a cheesy effect.

Below you’ll find a couple of examples of good practices:


Now in CSS3

CSS3 allows us to create shadows with only a couple of lines of code, the style in charge is "box-shadow".

To create a Photoshop-like Drop Shadow you can use the following syntax:

box-shadow: <xpos> <ypos> <size> <color>;

To create a Photoshop-like Inner Shadow you can use the following syntax:

box-shadow: inset <style> <xpos> <ypos> <size> <color>;

Now here’s the code to create several variants of Box Shadows:

/*Box shadows*/
.dropshadow{
	background-image:-moz-linear-gradient(top, #F3F4F5, #C8C9CA);
	background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#F3F4F5), to(#C8C9CA), color-stop(1,#C8C9CA));
	border:2px solid #F2F2F2;
	box-shadow: 10px 10px 10px rgba(0,0,0,0.25);
	-moz-box-shadow: 10px 10px 10px rgba(0,0,0,0.25);
	-webkit-box-shadow: 10px 10px 10px rgba(0,0,0,0.25);
}
.innershadow{
	background-image:-moz-linear-gradient(top, #E2E2E2, #CCCCCC);
	background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#E2E2E2), to(#CCCCCC), color-stop(1,#CCCCCC));
	border:2px solid #FEFEFE;
	box-shadow: inset 5px 5px 5px rgba(0,0,0,0.25);
	-moz-box-shadow: inset 5px 5px 5px rgba(0,0,0,0.25);
	-webkit-box-shadow: inset 5px 5px 5px rgba(0,0,0,0.25);
}
.intenseshadow{
	background-color:#FFF;
	border:1px solid #F00;
	box-shadow: 10px 10px 0px #F00;
	-moz-box-shadow: 10px 10px 0px #F00;
	-webkit-box-shadow: 10px 10px 0px #F00;
}
.bevel{
	background-color:#CCC;
	box-shadow: 10px 10px 0px #F00;
	-moz-box-shadow:inset 0px 0px 120px rgba(0,0,0,.60);
	-webkit-box-shadow: 10px 10px 0px #F00;
}

View Demo


Step 3: Navigation Menu

We’re going to combine rounded corners, gradient fills and box shadows to create a navigation menu. You can always start with Photoshop to create the graphic; grab the source download from the top of the page if you wish to jump right in.

The fun part of this is trying to get the same result with CSS3 – here we go!

First the HTML mockup (yes I’m using the "nav" tag of HTML5, because it’s pretty cool and semantically appropriate – but you can use a div instead)

<nav class="horizontal">
  <ul>
    <li><a href="#">Lorem Ipsum</a></li>
    <li><a href="#">Dolor Sit Amet</a></li>
    <li><a href="#">Sed do Eiusmod</a></li>
    <li><a href="#">Consectetur Adipisicing</a></li>
    <li><a href="#">Lipsum amet</a></li>
    <li><a href="#">Lorem Ipsum</a></li>
  </ul>
</nav>

Step 4: CSS

Now, let’s jump to the CSS. First set the positions and height.

/*Sample Navigation Bar*/
nav.horizontal{
}
nav.horizontal h3{
	padding-bottom:20px;
}
nav.horizontal ul{
	height:50px;
}
nav.horizontal ul li{
	list-style:none;
	display:inline;
	float:left;
}
nav.horizontal ul li a{
	display:block;
	height:28px;
	margin:2px 6px 2px 6px;
	padding:15px 20px 0px 20px;
}
nav.horizontal ul li a:hover{
}

Then add the Gradient Fills:

  nav.horizontal{
  }
  nav.horizontal h3{
  padding-bottom:20px;
  }
  nav.horizontal ul{
  height:50px;
  background-image:-moz-linear-gradient(top, #93C204, #608009);
  background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#93C204), to(#608009), color-stop(1,#608009));
  border:1px solid #608009;
  }
  nav.horizontal ul li{
  list-style:none;
  display:inline;
  float:left;
  }
  nav.horizontal ul li a{
  display:block;
  height:28px;
  margin:2px 6px 2px 6px;
  padding:15px 20px 0px 20px;
  font-size:12px;
  font-weight:bold;
  color:#FFF;
  text-transform:uppercase;
  text-decoration:none;
  border:1px solid transparent;
  background-image:none;
  }
  nav.horizontal ul li a:hover{
  background-image:-moz-linear-gradient(top, #161616, #2B3615);
  background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#161616), to(#2B3615), color-stop(1,#2B3615));
  border:1px solid #A3D804;
  }
  

Next, the Rounded Corners:

  nav.horizontal{
  }
  nav.horizontal h3{
  padding-bottom:20px;
  }
  nav.horizontal ul{
  height:50px;
  background-image:-moz-linear-gradient(top, #93C204, #608009);
  background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#93C204), to(#608009), color-stop(1,#608009));
  -moz-border-radius: 8px;
  -webkit-border-radius: 8px;
  -khtml-border-radius: 8px;
  border-radius: 8px;
  border:1px solid #608009;
  }
  nav.horizontal ul li{
  list-style:none;
  display:inline;
  float:left;
  }
  nav.horizontal ul li a{
  display:block;
  height:28px;
  margin:2px 6px 2px 6px;
  padding:15px 20px 0px 20px;
  font-size:12px;
  font-weight:bold;
  color:#FFF;
  text-transform:uppercase;
  text-decoration:none;
  border:1px solid transparent;
  background-image:none;
  -moz-border-radius: 10px;
  -webkit-border-radius: 10px;
  -khtml-border-radius: 10px;
  border-radius: 10px;
  }
  nav.horizontal ul li a:hover{
  background-image:-moz-linear-gradient(top, #161616, #2B3615);
  background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#161616), to(#2B3615), color-stop(1,#2B3615));
  -moz-border-radius: 10px;
  -webkit-border-radius: 10px;
  -khtml-border-radius: 10px;
  border-radius: 10px;
  border:1px solid #A3D804;
  }
  

And finally the Box Shadows:

nav.horizontal{
}
nav.horizontal h3{
	padding-bottom:20px;
}
nav.horizontal ul{
	height:50px;
	background-image:-moz-linear-gradient(top, #93C204, #608009);
	background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#93C204), to(#608009), color-stop(1,#608009));
	-moz-border-radius: 8px;
	-webkit-border-radius: 8px;
	-khtml-border-radius: 8px;
	border-radius: 8px;
	border:1px solid #608009;
	box-shadow: 5px 5px 5px rgba(0,0,0,0.25);
	-moz-box-shadow: 5px 5px 5px rgba(0,0,0,0.25);
	-webkit-box-shadow: 5px 5px 5px rgba(0,0,0,0.25);
}
nav.horizontal ul li{
	list-style:none;
	display:inline;
	float:left;
}
nav.horizontal ul li a{
	display:block;
	height:28px;
	margin:2px 6px 2px 6px;
	padding:15px 20px 0px 20px;
	font-size:12px;
	font-weight:bold;
	color:#FFF;
	text-transform:uppercase;
	text-decoration:none;
	border:1px solid transparent;
	background-image:none;
	-moz-border-radius: 10px;
	-webkit-border-radius: 10px;
	-khtml-border-radius: 10px;
	border-radius: 10px;
}
nav.horizontal ul li a:hover{
	background-image:-moz-linear-gradient(top, #161616, #2B3615);
	background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#161616), to(#2B3615), color-stop(1,#2B3615));
	-moz-border-radius: 10px;
	-webkit-border-radius: 10px;
	-khtml-border-radius: 10px;
	border-radius: 10px;
	border:1px solid #A3D804;
	box-shadow: inset 4px 4px 4px rgba(0,0,0,0.25);
	-moz-box-shadow: inset 4px 4px 4px rgba(0,0,0,0.25);
	-webkit-box-shadow: inset 4px 4px 4px rgba(0,0,0,0.25);
}

View Demo


Step 5: Fixing the Bleed

One final note with regard to rounded corners with a fill and a border: they bleed. You’ll notice it on the hover state of our navigation buttons:


Fill color bleeding out beyond the borders.

We can address this by using the background-clip property, which determines whether the background of a given element extends into the border. By default (border-box) it does, which gives us this messy bleeding, but we can alter it to padding-box which stops it short of the borders.

Let’s add the following css to our button:

nav.horizontal ul li a{
	display:block;
	height:28px;
	margin:2px 6px 2px 6px;
	padding:15px 20px 0px 20px;
	font-size:12px;
	font-weight:bold;
	color:#FFF;
	text-transform:uppercase;
	text-decoration:none;
	border:1px solid transparent;
	background-image:none;
	-moz-border-radius: 10px;
	-webkit-border-radius: 10px;
	-khtml-border-radius: 10px;
	border-radius: 10px;
	-moz-background-clip: padding;
	-webkit-background-clip: padding-box;
	background-clip: padding-box;
}

..which gives us a far more desirable result when hovered over:


Fill color nicely contained within the boundaries of our element.

View Demo

You can read more about the background-clip property on CSS3 info.


Conclusion

Creating a nice and good-looking simple navigation bar with CSS3 is easier and quicker than ever, so why don’t you try with your next design? Thanks for reading!

Series Navigation<< CSS3 vs. Photoshop: Complex BackgroundsCSS3 vs Photoshop: Opacity and Transparency >>

Note: Want to add some source code? Type <pre><code> before it and </code></pre> after it. Find out more
  • http://www.kabbalah.info Gregory

    Very nice tool to convert parameters from Photoshop to CSS3:

    http://layerstyles.org/builder.html

  • HD

    Great tut!

    The only thing is your CCS3 menu bar completely breaks down in IE8 to the point its not even usable – do you have any hacks to make it degrade more gracefully in the older browsers?

    • http://www.southmakers.com Alvaro
      Author

      HD, Dj

      If you want to make this navigation work properly on IE, you can use Filters for the gradients, and as Dj mentioned a background color for the hover effect.

      http://webdesignerwall.com/tutorials/cross-browser-css-gradient

      Rounded corners are still a big problem for ie7 and 8,
      http://www.dillerdesign.com/experiment/DD_roundies/
      that’s why I wanted to avoid write about it.

      But of course you can use conditional tags to load a different stylesheet for IE only (with image based rounded corners and gradients) which is the quickest way to fix this problem.

      http://css-tricks.com/132-how-to-create-an-ie-only-stylesheet/

      Please don’t forget this tutorial is a very basic guide of creating CSS3 effects, encouraging developers to start thinking on this set of styles in future (or present) designs. Most of the readers of this article are starting with webdesign and web development and talking about experimental JavaScript may be confusing, there will be time to discuss Graceful Degradation and Progressive Enhancement in more advanced tutorials.

      Thanks for reading!

  • Salival

    To get gradients in Opera, just copy the -moz- properties an replace the -moz- with -o-.

    • http://www.southmakers.com Alvaro
      Author

      Thanks for the tip :)

    • Damon

      Opera actually does not need -o- vendor prefix. It handles border-radius just fine.

  • http://tracker1.info/ Michael J. Ryan

    FYI, the linear gradient backgrounds don’t work in IE9 either… You can wrangle the an box-shadow: inset for a similar effect, sometimes better, sometimes not.

  • dj

    Actually, I’m not sure why you (or the editor would let you) put up code that doesn’t at least degrade gracefully. I know you implied that it didn’t work in IE by your statement that you’d help do it IF we wanted you to; BUT, really? Come on, in IE9 the hover and navigation WOULD be useable IF you had at least given it a simple fall-back background color. How hard would that have been?!

    Also: your link is broken – I only get: “This XML file does not appear to have any style information associated with it. The document tree is shown below.” Never seen that before.

    • http://www.snaptin.com Ian Yates

      I think you have to approach this series within the context it was intended – theses tuts discuss CSS3 techniques, that’s it. We all know the limitations of employing pure CSS3 at the moment, and for those who don’t, Alvaro makes it quite clear as he sets out the tut.

      There are plenty of resources which discuss fall-back options and graceful degradation, to recycle that information every time would be wasteful.

      You have got me thinking though; perhaps there should be a central ‘fall-back’ guide (why am I picturing Lee Majors?) on Webdesigntuts+ which could be referenced in all tuts of this type…

      • Florin

        We don’t all know the limitations of employing pure CSS3 at the moment, I think it’s not safe to consider all your site’s visitors know something. How about those landing here after searching rounded corners on Google?

    • http://allthingswebdesign.com Tom

      If you click back and then click the demo again you don’t get that XML error. Not sure what that is all about.

  • http://allthingswebdesign.com Tom

    Your last demo link doesn’t contain the following lines that you talk about in that section about bleeding corners.

    -moz-background-clip: padding;
    -webkit-background-clip: padding-box;
    background-clip: padding-box;

    • http://www.snaptin.com Ian Yates

      Well spotted! The actual file contained the correct CSS, but the demo code was missing the background-clip properties. Fixed. Thx

  • peter

    Read your comment on it not working in IE, tried it myself saw how bad it was and didn’t even bother to continue reading the tutorial. The Difficulty is described as ‘Basix’ ie for the beginner, what’s the point in teaching a beginner to design/code that doesnt work across all commom browsers.

  • Jose

    Good Tuorial!

    The Demos are brokenby the way

    • http://www.snaptin.com Ian Yates

      All fixed now (permissions problem) – thanks for picking up on that :)

  • http://viratahuja.webs.com virat

    hi Alvaro Guzman thanks for very nice tutorial ……. :) keep sharing
    thanks tuts +

  • Rafal

    Can’t we just use Dean Edwards’s IE9.js hack that makes all IE browsers (from IE5 to IE8) act like IE9?

    You can find this at http://code.google.com/p/ie7-js (because it started as IE7, but theres newer versions now).

  • http://wallofbeats.com Jordy

    @Alvaro Hit the little arrow left from the Radius and check Pixels magnetic and your anti alias problem is solved

  • http://www.mrhelp.pl MrHelp

    great tutorial, new stuff to learn, thanks :)

  • Pingback: Socia Media Development / SEO / Web Things | Janice Lee

  • Urbgimtam

    Good tut (at least for those who seem to understand the pros and cons of CSS3 usage and current browsers’ state – I’d still love a IE fallback, though ;)

    Another nice thing you could have mentioned to a higher extend is that any curves in CSS3 are always perfectly rendered.

    This is actually much more important now, with all these smartphones, pads, tablets and other portable web-enabled devices, as the majority of them made zooming-in/out extremely easy, allowing users to view stuff very big.

    With CSS3, you get always a great and sharp result instantly, and this is not so true when working with images, as you start to see pixelization, specially in hi-res devices.

    Good work.

  • http://etuts.org Sudheer Ranga

    Once again great tut. Hoping the same for IE.

  • http://www.customicondesign.com/ custom icon design

    Great result and tutorial. I will using this result to my new website. many thanks.

  • http://www.peax-webdesign.com Graphiste freelance

    I’m redesigning my old website, I think it will help :) thanks

  • Joel Damien

    Wow, you retard. This is all only because photoshop is a IMAGE EDITING PROGRAM. Seriously? It may be industry standard, but if you’re seriously going to whine about how *inaccurate* photoshop is, why don’t YOU be accurate and use PROPER web design tools like FIREWORKS. Other than that, you’re right, but photoshop is a program, not everyone is competent with code.

    • http://www.snaptin.com Ian Yates

      Easy tiger, let’s keep the personal attacks to a minimum eh?

    • http://iva-is.me Iva

      Uh?

      This was probably aimed at us who are comfortable with both design and code and would prefer an easier way when it comes to actually implementing it.

      • http://instructmydesign.blogspot.com/ Dinesh Verma

        I will go with CSS3

  • Juzer

    Rounded Corners, It Work in IE 6, 7, 8 also by using few steps – http://css3pie.com/

  • http://www.pokergosh.com The PokerGosh

    I’ll use the css3 path..
    :-)

  • Pingback: CSS3 vs Photoshop: Opacity and Transparency | Webdesigntuts+

  • Pingback: Ziua 1 « NMWLS

  • Iman

    This is really a grate tutorial. thank you guys

  • Iman

    Guys this is a grate tutorial but have serious problems with IE and Opera browser.

    background-clip: padding-box; does not work in Google Chrome.

    • http://www.snaptin.com Ian Yates

      Hi Iman,

      As Alvaro mentioned early on in the tut, these effects were tested in Firefox, Safari and Chrome. If you’d like to get the same effect elsewhere Opera 11.10+ now supports background-image: -o-linear-gradient().

      And background-clip: padding-box; does work in Chrome ;)

  • http://N/A Nkelly

    Great info. Helped a lot. Quick question: the links in my page dont work (employing your CSS code), they just redirect to whichever page you’re currently on. Thanks.

  • http://www.kolibri.com.mx Diseno web mexico

    Well thats true but I think you forgot the whole part of “realistic” shadows. Realistic or complex shadows you cant create with CSS3. So we know CSS3 is a nice because you can make simple effects more faster and you dont need a bunch of images, but for some reasons we will need still to use photoshop ;)

    Examples for these shadows you can find on graphicriver: http://graphicriver.net/item/realistic-web-shadow-generator-shadows-action-/142078 or http://graphicriver.net/item/realistic-shadow-pack/121918

  • http://www.sahilmepani.com Sahil Mepani

    Great Tutorial.. Cheers!

    One point I would like to bring into notice
    nav.horizontal ul li{
    list-style:none;
    display:inline;
    float:left;
    }

    There is really no need for display: inline declaration. When we use float: left or right. The display property for that selector is given inline-block.

    Just my two cents :)

    I LOVE ENVATO

  • Pingback: CSS3 vs Photoshop: Transforms | Webdesigntuts+

  • Pingback: Books Empire» Blog ArchiveCuring CSS3 Headaches in Older Browsers » Books Empire

  • Javier Uria

    nice tutorial thank you very much, I loved I was very, very useful

  • http://www.bertelshofer.com Anhängerkupplung

    Very nice tut, but as you can read from the comments, maybe you should next time describe ( extra article?) how to create a nifty fallback, so it would look similar good in older browsers.

  • Pingback: 40 Eventual Throng of CSS3 Techniques and Tutorials | Dzinepress

  • Pingback: Cross-Browser CSS Reflections, Glows and Blurs | Webdesigntuts+

  • Pingback: My Stream | Cross-Browser CSS Reflections, Glows and Blurs | My Stream

  • Pingback: Cross-Browser CSS Reflections, Glows and Blurs |

  • Pingback: Cross-Browser CSS Reflections, Glows and Blurs | Shadowtek | Hosting and Design Solutions

  • Pingback: Cross-Browser CSS Reflections, Glows and Blurs | How to Web

  • Pingback: Cross-Browser CSS Reflections, Glows and Blurs | ainu

  • Pingback: | Graphfucker

  • Pingback: Кроссбраузерные отражения, свечения и размытия CSS.

  • http://twitter.com/welshfella23 Christopher Davies

    brilliant thank you, now pop it all into a pdf or zipfile and everyone will be happy lol