Reflection.js allows you to add reflections to images on your webpages. It uses unobtrusive javascript to keep your code clean.

It works in all the major browsers - Internet Explorer 5.5+, Mozilla Firefox 1.5+, Opera 9+ and Safari. On older browsers, it'll degrade and your visitors won't notice a thing. Best of all, it's under 5KB.


Setting Up

Upload reflection.js and include it into your webpage.

<script type="text/javascript" src="reflection.js"></script>

Using It

To add a reflection just add a class="reflect" to the image. View source to see example.

Example Image

The reflection will automatically fade into the background colour.

If you run a forum, you can modify your templates and add class="reflect" to the avatar HTML code to add reflections.

Customizing Reflections

By default, the reflection will have a height 50% of the original image. Thus the height of an image with a reflection will be 1.5 times the height of the original image. The default opacity of reflections is 50%.

You can combine these two options. To create a 80% height 40% opacity reflection use:

class="reflect rheight80 ropacity40"


You can use the reflect-o-matic tool to preview and automatically generate the HTML code for reflections.

The bookmarklet may also save you time whilst browsing the web and generating reflections.

Scripting Reflections

If you want tons of flexibility, use scripted reflections. You can make your reflections respond to user actions (e.g. changing the reflection opacity when the image is hovered over) or add reflections to scripts such as Lightbox.

Reflection.add(image, options);

Adds or modifies a reflection to an image using Javascript. If the image is already reflected but the specified opacity or height has changed, the reflection will be changed accordingly.

image should be an image element.

options can contain a value for opacity or height. Both values should be between 0 and 1.

Reflection.add(document.getElementById("ohboy"), { height: 3/4, opacity: 2/3 });


Removes the reflection from an image.

Reflection.defaultHeight = height;
Reflection.defaultOpacity = opacity;

Changes the default height and opacity of reflections. The default value for both settings is 0.5.

Known Issues



If you've made any changes or bug fixes to reflection.js, feel free to publish and distribute them. If you contact me through my blog I can also include the changes in the main reflection.js download.

Supported Browsers


Version 1.9

Version 1.8

Version 1.7

Version 1.6

Version 1.5

Version 1.0

Version 0.4

Version 0.3

Version 0.2

Version 0.1


Original idea and inspiration for the script came from Romain Guy's Crystal CD Case. Sitharus made it all work in Safari. Andreas Linde helped make the script work better with CSS styles. Tralala at did a great job of finding bugs with reflection in Safari and fixed them! Niels Leenheer provided a fix for an issue in Opera 8.5 where Reflection.js may move images around. "Withinreach" informed me about an issue with XHTML Strict. "Kiyanwang" provided pointers towards a fix for clickable images and reflections in IE. "Jstengel" solved a problem where in IE Strict Mode, reflections appeared next to the image. "Koen" provided a fix for scaled images in IE. alinear provided a workaround to the script reflecting every second image in browsers with a native getElementsByClassName implementation. Thanks and Kudos!

A big thank you to everybody who has left their thoughts and comments. Your feedback has been invaluable.