Rounding corners with JavaScript has a long history. Everything started on 16th of March 2005 with Nifty Corners and loads of other libs followed.
RUZEE.ShadedBorder itself is the successor of RUZEE.Borders, which was the most feature-rich round corners library out there. But it wasn’t quite easy to use, was slow, had some browser compatibility problems, etc.
ShadedBorders removes most of these limitations and comes with the following features:
- JavaScript-only Photoshop(tm)-like rendering without external images
- Round corners
- Drop shadows
- Glow effects
- Gradient backgrounds
- Graceful degradation - will look ok if JavaScript is turned off
- Borders with different widths and semi-transparency
- Full support for liquid designs
- Anti-Aliasing
- On-hover support
- Disable some of the corners, e.g. bottom-left
- Change borders on-the-fly
- Real transparency - looks perfect on any background
- Cross-Browser: Firefox, Internet Explorer (>=6.0), Safari, Opera (>=9.0)
- Non-obstrusive
- Leight-weight (8.8KB uncompressed)
- Fast (0.5s for the example on a 2.2GHz machine)
- No JavaScript library dependencies
Have a look at the full-featured example, the simple example, or just download the whole library as a ZIP archive (MIT licensed).
Version History
- 2007-12-04 - v0.6.1: Fix transparency on IE7
- 2007-12-02 - v0.6: Semi-transparent fat borders (thanks Ryan) and IE6 hover fixes (thanks NewTrax)
- 2007-10-23 - v0.5: More robust DIV creation, add split borders example for headline/content (for Virsir)
- 2007-10-21 - v0.4: Add graceful degradation, simplify usage, fix IE7(?)
- 2007-10-20 - v0.3: Gradient background support, speed improvements
- 2007-03-27 - v0.2: Fix IE: check boxes inside tables were disappearing
- 2007-03-25 - v0.1: Initial release
How-to
Some steps are required to make your page use ShadedBorder:
Include ShadedBorder to your HTML header section:
<script src="shadedborder.js" type="text/javascript"></script>
Next, define an element you want to round. It is important that it does not directly contain text nodes, i.e. text must always be wrapped inside an HTML element (the “p” in this example):
<div id="round_me">
<p>I want to be rounded!</p>
</div>
Then, in the header section, create the border object. You can define the radius of the round corners, the radius of the drop shadow and the width of the border.
var border = RUZEE.ShadedBorder.create({ corner:8, shadow:16, border:2 });
Note that all parameters are optional, as long as you at least specify one of them. You may also define, which corners/edges should not be rounded. Have a look at the simple example source code for details.
The last thing to do is, to add some JavaScript code directly at the end of the HTML Body which will render the border around the element with the ID “round_me”:
...
<script type="text/javascript">
border.render('round_me');
</script>
The radiuses and widths you specified for the border in the header section are one way of customization. The other way is to change colors. You do this in your CSS file:
#round_me, #round_me .sb-inner { background:red; }
#round_me .sb-shadow { background:blue; }
#round_me .sb-border { background:green; }
This will give your border a red “inner-style”, a blue shadow and a green border - don’t ever use this color combination - it will look extremely ugly ![]()
The first line is important for graceful degradation (new from v0.4 on): the background for your .sb-inner class must also be set on the element itself - but only for .sb-inner, NOT for .sb-shadow or .sb-border!
Adding some hover effect also happens in your CSS file. The following code snippet will change the “inner-style” of your border to purple, once you hover with your mouse over the #round_me element (hey purple will make this beast look even uglier - yuk!).
#round_me:hover, #round_me:hover .sb-inner { background:purple; }
Of course, this will work with “.sb-border” and “.sb-shadow” as well.
Tips
You can use RUZEE.ShadedBorder with the JavaScript library of your choice to get support for CSS-Selectors (e.g. using Prototype, jQuery, etc.). Here’s an example using the $$ function of Prototype to round all child elements of the element with the ID “header” that have the class “tab”:
border.render($$('#header .tab'));
Limitations
- Safari 2 seems to get pretty slow when showing ShadedBorder. I’m looking for people with a Mac and some JavaScript knowledge to speed things up. If you feel like you can help, please contact me via my contact form. Thanks!
- Since a ShadedBorder adds DIV elements to the element you round, those elements cannot be UL, OL, TABLE, TR, etc.. Allowed are DIV, LI, TD, TH, i.e. those elements that are allowed to directly contain DIV elements.
Hi, the name's Steffen and I'm writing about the Web, programming
and all those things coming to my mind. Enjoy your stay.
April 5th, 2008 at 21:58
@Brent: It is most likely a bug in Opera’s handling of a huge number of elements, rather than a bug in shadedborder.
April 5th, 2008 at 22:37
This is a wonderfull script, thank you, Steffen, for it!
My problem is, that from time to time (appx. every 15 page loads) in IE6 I receive the following message (with one page I recieve every time!):
“Internet Explorer has encountered a problem and needs to close. We are sorry for the inconvenience.”
Nothing is displayed at all. This problem persists only in IE6, all other browsers are working just fine.
Has anyone had the same experience? What can I do about it?
April 7th, 2008 at 12:57
I found that when I use the shadows on lots of tables, IE 6 seems to run out of memory and starts dropping colors out of the page. It does some weird other stuff. I added a check to my pages which checks for IE 6 and doesn’t do the drop shadows if it is the client. ugh. pain.
April 16th, 2008 at 3:06
Many thanks for your great script, Steffen.
I am probably missing something, but I would like to round the top-left border and the bottom-right border of a box, but can’t figure out how to specify the edges. With “tlbr”, I round the 4 edges… How are you doing this ?
May I suggest the following idea: Would it be possible to specify edges with any combination of the 4 tokens tl, tr, bl, br ? Example: “tl br”
Many thanks
April 16th, 2008 at 7:28
edges=”tl” //top left
edges=”tr” //top right
edges=”bl” //left bottom
edges=”br”
April 16th, 2008 at 7:31
edges=”tl” //top left
edges=”tr” //top right
edges=”bl” //bottom left
edges=”br” //bottom right
edges=”tlr” //top left right
edges=”blr” //bottom left right
edges=”tbl” //top bottom left
edges=”tbr” //top bottom right
edges=”tlbr” //all four corners
April 16th, 2008 at 11:03
Hello Steffen
I did a lot of research on the web to find a good working control that produces round corners and shadow around a div. I looked at nifty in all the variations (nifti, antialiased, extended), Ajax extenders etc. but the ruzee shadedborder control does all what I am looking for.
Thanks for your script.
I will use it in an asp.net custom control.
April 17th, 2008 at 0:55
Thanks Aqeel,
Your answer (266) doesn’t solve my problem (264). A similar question was already asked by Adam (250).
It seems that the edges notation disallow (for example) to round only the top-left and bottom-right corners together, because if you specify ‘tlbr’, all 4 corners will be rounded !
Am I missing something ? Is it possible to do that with ShadedBorder ?
April 17th, 2008 at 17:09
@Laurent:
i’ve looked into this as well, and the only library i have found that recognizes specific corner rounding is NiftyCube. i don’t think Shaded Border will do it, though i’ve written to Steffen asking for it.
April 17th, 2008 at 17:11
*correction* - not “specific”, meant “non-adjacent” as Laurent described.
< Prev 1 … 26 27 28 … 29 Next > Show All
Leave a Reply