The evolution of CSS

Web development is a really exciting area to work in for a lot of reasons: it’s varied, it’s got the potential for your work to be seen on a huge scale and it’s always changing. In fact, it’s changing faster than most people will notice, as new ideas are incorporated into the latest versions of browsers, letting designers who want to experiment try them out before they are available for more widespread use.

One of the most dramatic areas showing innovation at the moment is the whole CSS3 drive, which takes Cascading Style Sheets (the technology used to position and style elements on web pages), and adds a whole bunch of extras. Some of these features you’ve probably seen: rounded corners on boxes, for example. It sounds like a really simple thing, but until the "border-radius" property was added to the CSS specification, it took various images and positioning tricks to accomplish.

The CSS3 specifications aren’t expected to be finalized for quite a while yet, but that doesn’t mean you won’t start to see more little touches in website styles – even the "current" CSS2.1 specification isn’t finalized, but it’s implemented in most current browsers. The standards process used means that browser developers are encouraged to incorporate new ideas for testing well before the specification in final, so any issues can be worked out, and adjustments made without breaking existing sites.

If you’d like to see if any websites are using these experimental properties, try installing Google Chrome, an alternative web browser which gets updated very regularly.

Here are a few things to look out for:

  • Shadows: text and other elements can now have shadows, which may be adjusted dynamically. They are beginning to be used for link hover effects and to reduce the need for images to get interesting looking titles.
  • Columns: newspaper style columns that can reflow based on the size of your browser window – existing methods tended to restrict designers to text blocks of fixed sizes.
  • Transitions: stylish little touches like making link underlines fade in when you hover over them, rather than just appearing suddenly, or making drop down menus slide into place smoothly, rather than juddering to a sudden stop (it’s a side effect of the "old" method used for the effect).
  • Rotations: items on the page being rotated before display, such as images shown as if they’ve been thrown casually on a table, or text running at an angle across the page to make a bold statement.
  • Reflections: effects as if the element has been put on a glass table. This is very effective when combined with HTML5 video elements, as the reflection handles the video content as it changes.

For developers, a good resource to check on how many people are likely to be able to see these touches is CanIUse, which shows which browser versions support a whole range of "advanced" features.

Depending on the site in question, it might be acceptable for such cosmetic touches not to work fully, whilst giving an extra shine for users on more advanced browsers; these techniques tend to have the advantage that they degrade seamlessly.

To illustrate the appearance of CSS3 in different browsers, I have included three screenshots showing varying degrees of functionality.

CSS3 in Chrome

In Chrome, all the effects are working fully: the page has columns, the image on the left is rotated and has a shadow, and the image on the right has a reflection and a shadow

CSS3 in Firefox

In Firefox, most of the effects work, but the image on the right doesn’t have a reflection. Using a tool such as Modernizr, it’s possible to detect the lack of reflection support, and adjust the style to remove the empty space where the refection would appear – we’ve not done this here for purposes of demonstration

CSS3 in Internet Explorer

In Internet Explorer, none of the advanced effects work. There are no columns, the images aren’t rotated or reflected, and they don’t have shadows. However, the content is still all accessible, despite not looking as intended