Skip to content

Instantly share code, notes, and snippets.

@LibertysYarn
Created May 27, 2013 04:04
Show Gist options
  • Save LibertysYarn/5655150 to your computer and use it in GitHub Desktop.
Save LibertysYarn/5655150 to your computer and use it in GitHub Desktop.
Single Element Ribbon
/*Basic reset*/
* {margin: 0; padding: 0;}
html, body {height: 100%;}
body {
background: #B1E3E2;
box-shadow: inset 0 0 100px 20px #80D0CF;
text-align: center;
}
h1 {
display: inline-block;
font-size: 14px;
line-height: 28px;
color: #8699A0;
text-shadow: 0 0 1px #758890;
margin: 120px 0;
font-family: arial, verdana;
outline: none;
padding: 14px 30px;
position: relative;
text-transform: uppercase;
/*A little shadow for 3d effect*/
/*Finally another shadow to negate some aspects of the :after element to complete the effect. This drops a shrinked shadow over the :after element with the same color like that of the background. The shadow is shrinked by the same offset amount = 18. And it is moved down by twice the offset amount to cover the entire height of the :after element*/
box-shadow:
0 0 30px 0 rgba(0, 0, 0, 0.1),
0 36px 0 -18px #B1E3E2;
}
/*The ribbon ends*/
h1:before {
content: '';
position: absolute;
top: 18px;
left: -15%;
z-index: -1;
width: 130%;
/*We will be using the triangle logic - 2 sided borders and 0 height. That will create negative triangles on the left and right*/
height: 0;
border: 28px solid rgba(0, 0, 0, 0);
border-left: 28px solid #B1E3E2;
border-right: 28px solid #B1E3E2;
/*Same color as the container which is the body in this case*/
}
/*The after pseudo element will negatve the bottom part of the ribbon completing the effect*/
h1:after {
content: '';
width: 100%;
height: 0;
position: absolute;
top: 100%; left: 0;
z-index: -1;
/*The height of the top border is same as width of the left/right borders for the smoothest effect. The height of the top border is also the same as the offset the :before element has from the top*/
border-top: 18px solid #99acb2;
border-left: 18px solid transparent;
border-right: 18px solid transparent;
}
h1, h1:before {
/*Some cool multi-background - we will use a combination of 4 backgrounds to create a cool effect*/
background-image:
/*2 grey borders*/
linear-gradient(
transparent 8%,
rgba(0, 0, 0, 0.1) 8%,
rgba(0, 0, 0, 0.1) 14%,
transparent 14%,
transparent 86%,
rgba(0, 0, 0, 0.1) 86%,
rgba(0, 0, 0, 0.1) 92%,
transparent 92%
),
/*white gloss gradient*/
linear-gradient(
rgba(255, 255, 255, 0.75),
rgba(255, 255, 255, 0)
),
/*thin stripes*/
linear-gradient(
45deg,
transparent 40%,
rgba(0, 0, 0, 0.1) 40%,
rgba(0, 0, 0, 0.1) 60%,
transparent 60%
),
/*white base*/
linear-gradient(white, white);
background-size:
cover, /*borders*/
cover, /*white gloss*/
4px 4px, /*thin stripes*/
cover; /*base white*/
}
h1, h1:before, h1:after {
box-sizing: border-box;
/*Fix to make the borders appear on the ribbon ends also*/
background-origin: border-box;
}
<!-- Lets make a cool single element ribbon -->
<h1 contenteditable>Single Element - Pure CSS3 - Type here...</h1>
<!-- PrefixFree to deal with vendor prefixes -->
<script src="http://thecodeplayer.com/uploads/js/prefixfree-1.0.7.js" type="text/javascript"></script>
<!-- You can download it from http://leaverou.github.com/prefixfree/
The demo still stays pure CSS3 :) You can manually write CSS for all browsers too.
-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment