Contact

If you like a new Web or Desktop
application, update a existing one
or add new modifications. Your at
the right place and hit the
hire me button

Follow

If your intersted you can follow
me on Twitter by clicking here

Web and Apps Building Refernce World Wild Web UNIX Apps AND Tips Programming languages

CSS: border-radius and -moz-border-radius

One of the most keenly-anticipated CSS3 properties isborder-radius. Web designers will no longer have to resort to complex table structures using custom-made corner graphics or including arcane JavaScript files in order to produce designs with rounded corners.

While Internet Explorer doesn't support many (or any) advanced CSS properties, you can get started using Firefox and any of the 'Mozilla' family of browsers. Apple's WebKit web browser engine also supports rounded corners making them available in the Safari and Chrome web browsers, the iPhone and other devices running WebKit.

http://www.the-art-of-web.com/images/divider_bg.jpg); background-attachment: fixed; background-origin: initial; background-clip: initial; background-color: rgb(0, 0, 0); clear: both; margin-top: 1em; height: 4px; background-position: 0% 0%; background-repeat: initial initial; "> 

1. Definition and syntax for border-radius

As with many CSS properties relating to margins, padding and borders, there are four individual properties - one for each corner of a box element - and one shorthand property. Each of the corner attributes will accept either one or two values. The border-radius property will accept up to two values in WebKit browsers and up to eight now in Firefox 3.5.

Here are the CSS and browser-specific attributes in question:

CSS3 (not yet finalised) Mozilla equivalent WebKit equivalent
border-top-right-radius -moz-border-radius-topright -webkit-border-top-right-radius
border-bottom-right-radius -moz-border-radius-bottomright -webkit-border-bottom-right-radius
border-bottom-left-radius -moz-border-radius-bottomleft -webkit-border-bottom-left-radius
border-top-left-radius -moz-border-radius-topleft -webkit-border-top-left-radius
border-radius -moz-border-radius -webkit-border-radius

At this time the CSS3 properties above do not work in Internet Explorer. The 'Mozilla' versions however work perfectly well in Firefox and other Mozilla-based browsers and the 'WebKit' ones in Safari and Chrome.

Each of the individual corner CSS3 properties take either one or two length values (generally 'px' or 'em' values). If a single value is supplied then that becomes the radius of a rounded corner. If two values are supplied then they become the horizontal and vertical radii for an elliptical corner.

The Mozilla syntax before Firefox 3.5 only supported round (as opposed to elliptical) corners and adding a second value would result in a standard square corner.

The border-radius property in WebKit accepts one or two values and uses them to style all four corners making a nice symmetric shape. The new Firefox syntax allows you to define four different round or elliptical corners. A slash has been introduced to separate the horizontal and vertical length settings.

http://www.the-art-of-web.com/images/divider_bg.jpg); background-attachment: fixed; background-origin: initial; background-clip: initial; background-color: rgb(0, 0, 0); clear: both; margin-top: 1em; height: 4px; background-position: 0% 0%; background-repeat: initial initial; "> 

2. Examples using -moz-border-radius

The following examples will only work if you're using Firefox or another Mozilla browser that supports-moz-border-radius properties.

Example 1
-moz-border-radius: 1em;
Example 2
-moz-border-radius-topright: 2em; -moz-border-radius-topleft: 2em;
Example 3
-moz-border-radius: 2em 0;
Example 4
-moz-border-radius: 3em 1em;

The Mozilla properties used here do not conform to the standard (hence the -moz- prefix) and until Firefox 3.5 only support round (not elliptical) corners. In newer versions of Firefox elliptical corners are now possible.

As some people have pointed out these properties can be used not just for 'boxes' but for many other HTML objects including form elements.

For those of you still seeing square corners, here's a snapshot from Firefox showing the rounded corners effect:

There are a number of tricky JavaScript solutions that allow border-radius and other CSS3 properties to be seen in Internet Explorer and other browsers - but the overheads don't really justify the results.

http://www.the-art-of-web.com/images/divider_bg.jpg); background-attachment: fixed; background-origin: initial; background-clip: initial; background-color: rgb(0, 0, 0); clear: both; margin-top: 1em; height: 4px; background-position: 0% 0%; background-repeat: initial initial; "> 

3. Support for -webkit-border-radius in Safari (Webkit)

The latest versions of Safari now support -webkit-border-radius. Previously only the 'nightly builds' contained this functionality.

(You can download nightly builds of WebKit from http://nightly.webkit.org/ (Mac or Windows) which will give you an application called WebKit - essentially the latest development version of Safari's rendering engine).

WebKit has supported elliptical rounded corners from the start:

Example 5
-webkit-border-radius: 1em;
Example 6
-webkit-border-top-right-radius: 24px; -webkit-border-top-left-radius: 24px;
Example 7
-webkit-border-radius: 24px 0;
Example 8
-webkit-border-radius: 36px 12px;
Example 9
-webkit-border-top-right-radius: 50px 30px; -webkit-border-bottom-right-radius: 50px 30px;

For those of you still seeing square corners, here's a snapshot from WebKit showing the rounded corners effect. Note particularly the change in syntax and the effect of passing two values to-webkit-border-radius as compared to the -moz-border-radius example above:

WebKit also has limited support for other CSS3 border properties such as: multiple backgrounds; borderbackground images; and various advanced selectors (::select for example) making it a great test platform for forward-looking developers. Stay tuned to the Surfin' Safari blog linked below for the latest exciting developments.

http://www.the-art-of-web.com/images/divider_bg.jpg); background-attachment: fixed; background-origin: initial; background-clip: initial; background-color: rgb(0, 0, 0); clear: both; margin-top: 1em; height: 4px; background-position: 0% 0%; background-repeat: initial initial; "> 

4. Support in other browsers

There have been rumours of an -opera-border-radius and -khtml-border-radius to work respectively in Opera and KHTML browsers, but at this stage they seem to be just rumours. Internet Explorer of course has no support for the rounded corners css properites.

http://www.the-art-of-web.com/images/divider_bg.jpg); background-attachment: fixed; background-origin: initial; background-clip: initial; background-color: rgb(0, 0, 0); clear: both; margin-top: 1em; height: 4px; background-position: 0% 0%; background-repeat: initial initial; "> 

5. WebKit special effects

As mentioned above, WebKit (Safari, iPhone) now supports a number of other CSS3 features, including:

-webkit-box-shadow

Shadow Example
-webkit-border-radius: 36px 12px; -webkit-box-shadow: 2px 2px 6px rgba(0,0,0,0.6);

Clearly there are still some anti-aliasing problems, but for corners and gentle curves it can look pretty cool.

Then there are various -webkit-tranform option that can be used to create all kinds of wierd and wonderful shapes:

-webkit-transform: rotate()

Rotate Example
-webkit-border-radius: 36px 12px; -webkit-transform: rotate(-5deg);

-webkit-transform: skew()

Skew Example
-webkit-border-radius: 36px 12px; -webkit-transform: skew(5deg,5deg);

For the browser-impaired here is a screenshot from Safari showing the effect of these WebKit-specific CSSrules. There is currently no equivalent in Firefox or other browsers:

Also in Safari these and other transformations can be implemented as animations using just CSS effects triggered by hovering over an element - so no JavaScript.

http://www.the-art-of-web.com/images/divider_bg.jpg); background-attachment: fixed; background-origin: initial; background-clip: initial; background-color: rgb(0, 0, 0); clear: both; margin-top: 1em; height: 4px; background-position: 0% 0%; background-repeat: initial initial; "> 

6. New Firefox short-hand properties

The following syntax is now working in FireFox 3.5 allowing you to specify not only elliptical corners, but even different elliptical corners in one shorthand property.

Here we've recreated two of the WebKit examples above using the new syntax. You can see that the individual corner settings work exactly the same now in Firefox as in WebKit, but for the short-hand property you need to include a slash:

Example 8
-moz-border-radius: 36px / 12px;
Example 9
-moz-border-radius-topright: 50px 30px; -moz-border-radius-bottomright: 50px 30px;

And now to the scary part. Using the short-hand property, all valued before the slash apply to the horizontal radii and all values afterwards to the vertical. In this example we've created a hybrid of the previous two examples.

Example 10
-moz-border-radius: 36px 50px 50px 36px / 12px 30px 30px 12px

Here you can see what these boxes look like in Firefox 3.5:

Personally I'm not a big fan of these changes to the specification. It seems to be a bit a backside-covering for the Mozilla group so they can have all the new options without affecting anyone using their old syntax. If/when this is adopted anyone using the WebKit syntax (Example 8), which conformed to the original Working Draft, will suddenly end up with wonky boxes (Example 4).