I’ve seen a few website examples recently (like this one) where transparent borders have been used so that the background image shows through the border. I think this is a really nice effect and it got me wondering how it’s done and if I could use this on my planned redesign of CVW Web Design. Turns out it’s relatively simple but there’s one ‘trick’ you will need to get it to work.
Firstly, here’s my demo page with a
<div>
content area and a transparent border that allows the background cork board pattern to show through.
The border transparency is achieved using the rgba property which allows you to specific three rgb color values and a value for alpha (transparency). In my demo CSS, I’ve set the border property values like this:
div { border: 10px solid rgb(100, 100, 100); /* default color */ border: 10px solid rgba(0, 0, 0, 0.3); /* rgba for transparency */ }
In this case I set a default grey color for browsers without rgba support and follow that with the rgba rule for more modern browsers. I used black with an alpha value of 0.3.
However, if we use these rules on their own, the background color (white) of the
<div>
element will be underneath the border and it will show through, thus making the borders non-transparent. The specific CSS for the background color is below. I’ve also added some padding, just to space things out a bit for the demo.div { padding: 3em; background-color: rgb(255, 255, 255); /*background color, white*/ }
Here’s a demo showing the background color problem (the borders are not transparent). To get round this problem, what we need is a CSS property that will ‘clip’ the content area so that the
<div>
background-color is not underneath the border – therefore allowing our transparent borders to be just that – transparent!
That property is background-clip which can have several different values depending on where you want to clip the background. In my case, I want to clip the background at the border. To achieve this, rather confusingly, I need to give the background-clip property a value of padding-box and also provide the
-moz-
and -webkit-
prefixes for browsers that use their own implementation. Here’s what I have used:div { -moz-background-clip: padding; /* for Mozilla browsers*/ -webkit-background-clip: padding; /* Webkit */ background-clip: padding-box; /* browsers with full support */ }
My demo page has the full CSS with everything combined into one declaration block. Like this:
div { padding: 3em; background-color: rgb(255, 255, 255); border: 10px solid rgb(100, 100, 100); border: 10px solid rgba(0, 0, 0, 0.3); -moz-background-clip: padding; -webkit-background-clip: padding; background-clip: padding-box; }
Most modern browsers (including Internet Explorer 9) support rgba and background-clip in one form or another but Internet Explorer 6, 7 and 8 do not. You may choose to provide alternative border property values in a conditional commented style sheet for these browsers.
Modern browsers, transparent borders. I love ‘em!
Comments
Post a Comment