Steffen Hi, the name's Steffen and I'm writing about the Web, programming and all those things coming to my mind. Enjoy your stay.

I'm currently working on fabidoo.com - 3D Printing for everyone!

ShadedBorder - JavaScript Round Corners with Drop Shadow

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.

Tags: , , ,

349 Responses to “ShadedBorder - JavaScript Round Corners with Drop Shadow”

< Prev 1 33 34 35 Show All

  • 341
    KC Says:

    Hello -
    I checked a site I did using ruzee in IE8 and the drop shadows are all hard edged at 100%. Has anybody yet found a fix for IE8? Maybe it has to do with the png transparency support…

    I see a couple other posts about IE8 concerns but with no reply. Anybody?

    Thanks,
    KC

  • 342
    KC Says:

    This is the only fix I’ve found which corrects ie8’s current lack of filter opacity support:

    KC

  • 343
    KC Says:

    meta http-equiv=”X-UA-Compatible” content=”IE=EmulateIE7″

  • 344
    Useful tools for hacking CSS « The Next Era Says:

    [...] ShadedBorder - JavaScript Round Corners with Drop Shadow: This script helps to give my CSS boxes round corners, including the borders. This reduces the effort of generating a lot of corner images if you have a lot of different boxes to apply to. [...]

  • 345
    Edward Prislac Says:

    had no problem running the code , except getting an error that says ‘el is null’ in shadedborder.js line 214

    fixed by adding this line right above it:

    if (el==null){
    el = “”;
    }

  • 346
    Andreas Says:

    Really Really nice work and - as promised - really, really quick… too bad I couldn´t try with Safari either lacking a Mac, I am sure I would have tried to help. But maybe someone here has an Idea on the following:

    When fixing the height AND padding of a box´s style and resizing , I get a transparent gap in the box exactly double the size of the padding once the browser window IE7 is resized…
    I need to set a fixed height because I need to line up the boxes with rounded borders and shadows in to rows next to an image which will be as high as two boxes (plus the margin)

    Example:
    #my-border {
    padding:10px;
    width:140px;
    height:75px;
    margin:10px auto;
    color:#fff;
    }

    I couldnt solve the problem cleaning the objects in the render function (node=null;iel=null;twc=null;mwc=null;bwc=null;el=null;) nor using meta http-equiv=”X-UA-Compatible” content=”IE=EmulateIE7″… nor by adding if (el==null){ el = “”;}

    I thought IE7 was not correctly defined in the function, but the resize function is called when using IE7 just like it is when using IE6…

    Or am I just too fixed on defining the height of THAT CERTAIN box? Maybe I should simply define another div around the row of boxes, you say? Sure, but then how should I get the boxes to automatically wrap into a second row next to the image… hmmm…

  • 347
    Andreas Says:

    I was snowblind. As soon as you define a height for the p inside the box, IE7 knows how much space to fill.
    #round_me {
    padding: 10px;
    width: 160px;
    margin: 10px auto;
    float: left;
    }
    #round_me p {
    border: solid 1px yellow;
    height: 75px;
    }

    I guess playing with min and max height will work fine as well. By the way: there was a comment from someone saying js is the wrong way to do it when you are working with css… (Matt, comment #335) Well Matt, if you got something comparable without js then let us have it. I have been searching for hours and using only css never provided a solution that was half as efficient - and that looked only half as good.

    Great Work, Steffen!

  • 348
    Michael Says:

    Hi, this is really outstanding work! thank you very much for sharing.

    i did integrate it with a nice popup from here http://jqueryfordesigners.com/coda-popup-bubbles/

    and you can see it working here: http://www.moossen.net/test.html

    Where is works perfect for all browsers except IE :(

    the problem is that the background is transparent, i tried to remove the transparent background replacing line 185 of the render function:

    sty(el, { position:”relative”, background:”transparent”});

    with

    sty(el, { position:”relative”});

    so, the background looks good again, but not the border :(

    any idea what else could i try?

    thank you very much again

  • 349
    mouse Says:

    @Piotr (comment 325)
    Would you share your memory leak fix please.

    TIA

  • < Prev 1 33 34 35 Show All

    Leave a Reply

70983