Ok, let's try to draw an easter-egg just using CSS3 and jQuery.
I need to obtain at least an egg, a ribbon and a cockade; everything has to be resizable with the page.
First: design the egg.
Looking at http://www.css3shapes.com/, in a comment I find a useful info about shapes for an egg:/* width has to be 70% of height */I create a class called .egg, this is the first container, it is a square and it is measured on the page height, then I add four egg quarters inside the container defining four shapes using border-radius and the ribbon using border-width.
/* could use width:70%; in a square container */
The CSS
I) the container
.egg{
position: absolute;
top:0;
left:0;
border:1px solid yellow;
background-color:#89B151;
padding-top:0.5%;
}
II) the quarters
.top-left-quarter-container{
width:50%;
height:58%;
float:left;
}
.top-right-quarter-container{
width:50%;
height:58%;
float:right;
}
.bottom-left-quarter-container{
width:50%;
height:38%;
float:left;
}
.bottom-right-quarter-container{
width:50%;
height:38%;
float:right;
}
III) the egg edges
.inegg{
display:block;
width:70%;
height:100%;
background-color:#CCC;
}
.inegg-tl {
float:right;
border-right-style:solid;
border-bottom-style:solid;
border-radius:97% 0 0 0/99% 0 0 0;
}
.inegg-tr {
float:left;
border-left-style:solid;
border-bottom-style:solid;
border-radius:0 97% 0 0/0 99% 0 0;
}
.inegg-bl {
float:right;
border-right-style:solid;
border-top-style:solid;
border-radius:0 0 0 90%/0 0 0 99%;
}
.inegg-br {
float:left;
border-left-style:solid;
border-top-style:solid;
border-radius:0 0 90% 0/0 0 99% 0;
}
The jQuery
//Reload on resizing: needs to calculate proportions
$(window).bind('resize',function(){
window.location.href = window.location.href;
});
//Set the egg and the ribbon containers in a square of 90% of window height
$(".egg,.ribbon").css("height", ($(window).height()/10)*9 + "px");
$(".egg,.ribbon").css("width", ($(window).height()/10)*9 + "px");
//Set the inner borders of egg quarters at more or less 3.33% of egg height
$(".inegg-tl, .inegg-bl").css("borderRightWidth", ($(".inegg-tl").height()/30)*1 + "px");
$(".inegg-tl, .inegg-bl").css("borderRightColor", '#F4DDBE');
$(".inegg-tl, .inegg-tr").css("borderBottomWidth", ($(".inegg-tl").height()/30)*1 + "px");
$(".inegg-tl, .inegg-tr").css("borderBottomColor", '#F4DDBE');
$(".inegg-tr, .inegg-br").css("borderLeftWidth", ($(".inegg-tl").height()/30)*1 + "px");
$(".inegg-tr, .inegg-br").css("borderLeftColor", '#F4DDBE');
$(".inegg-bl, .inegg-br").css("borderTopWidth", ($(".inegg-tl").height()/30)*1 + "px");
$(".inegg-bl, .inegg-br").css("borderTopColor", '#F4DDBE');
The HTML
See the result:
http://www.nelsonweb.it/eastereggcss/indexnoribbon.htmlThen I create the ribbon and the cockade with DIV shaped as ellipses, squares and rectangles, just with CSS3 I translate them to center properly, rotate and add features like shadows.
The CSS
I) the container
.ribbon{
position: absolute;
top:0;
left:0;
z-index:100;
padding-top:0.5%;
}
II) the top and the bottom part of the ribbon
.top-ribbon{
position: absolute;
top:47%;
width: 200px;
height: 100px;
background: transparent;
border-style:solid;
border-color:#85D4E3;
border-width:10px;
-moz-box-shadow: 0px 0px 4px rgba(0,0,0,0.55);
-khtml-box-shadow: 0px 0px 4px rgba(0,0,0,0.55);
-webkit-box-shadow: 0px 0px 4px rgba(0,0,0,0.55);
-o-box-shadow: 0px 0px 4px rgba(0,0,0,0.55);
}
.top-ribbon-left {
left:39%;
border-radius:99%;
-moz-transform: translate(-50%, -50%) rotate(45deg);
-webkit-transform: translate(-50%, -50%) rotate(45deg);
-ms-transform: translate(-50%, -50%) rotate(45deg);
-o-transform: translate(-50%, -50%) rotate(45deg);
transform: translate(-50%, -50%) rotate(45deg);
}
.top-ribbon-right {
left:61%;
border-radius:99%;
-moz-transform: translate(-50%, -50%) rotate(-45deg);
-webkit-transform: translate(-50%, -50%) rotate(-45deg);
-ms-transform: translate(-50%, -50%) rotate(-45deg);
-o-transform: translate(-50%, -50%) rotate(-45deg);
transform: translate(-50%, -50%) rotate(-45deg);
}
/* bottom ribbon style */
.ribbon-wrapper{
width: 150px;
position: absolute;
top:65%;
}
.ribbon-wrapper span{
color:#fff;
font-weight:bolder;
}
.ribbon-wrapper-left {
left:45%;
-webkit-transform: translate(-55%, -40%) rotate(-45deg);
transform: translate(-55%, -40%) rotate(-45deg);
}
.ribbon-wrapper-right {
left:55%;
-webkit-transform: translate(-45%, -40%) rotate(225deg);
transform: translate(-45%, -40%) rotate(225deg);
}
.ribbon-front {
background-color: #85D4E3;
height: 40px;
position: relative;
font-size:1.6em;
left:-10px;
z-index: 2;
-moz-box-shadow: 0px 0px 4px rgba(0,0,0,0.55);
-khtml-box-shadow: 0px 0px 4px rgba(0,0,0,0.55);
-webkit-box-shadow: 0px 0px 4px rgba(0,0,0,0.55);
-o-box-shadow: 0px 0px 4px rgba(0,0,0,0.55);
}
.ribbon-edge{
position: absolute;
z-index: 1;
border-style:solid;
height:0px;
width:0px;
left: -10px;
border-color: transparent #99c transparent transparent;
}
.ribbon-edge-left
{
top: -10px;
border-width: 10px 10px 0 0;
}
.ribbon-edge-right
{
border-width: 0 10px 10px 0;
}
.ribbon-back{
position: absolute;
left: -30px;
width: 30px;
height: 40px;
background-color: #85D4E3;
z-index: 0;
}
.ribbon-back-left {
top: -10px;
}
.ribbon-back-right{
top: 10px;
}
The jQuery
//.top-ribbon, 40%
$(".top-ribbon").css("height", ($(".inegg-tl").width()/10)*4 + "px");
$(".top-ribbon").css("width", ($(".top-ribbon").height())*2 + "px");
$(".top-ribbon").css("borderWidth", ($(".ribbon").height()/30)*1 + "px");
//set the Happy easter ribbons at x% of .ribbon box
$(".ribbon-wrapper, .ribbon-front").css("width", ($(".ribbon").width()/10)*2 + "px");
$(".ribbon-front").css("height", ($(".ribbon").height()/20)*1 + "px");
//set the ribbon-back height in function of ribbon-front
$(".ribbon-back").css("height", $(".ribbon-front").height() + "px");
The HTML
...
See the result:
http://www.nelsonweb.it/eastereggcss/indexnostar.htmlThen add the cockade to close the ribbon
The CSS
.star, .star-two, .star-three{
width:60px;
height:60px;
background: #1B346C;
position: absolute;
top:59%; left:50%;
-moz-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
-o-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
-moz-box-shadow: 0px 0px 4px rgba(0,0,0,0.55);
-khtml-box-shadow: 0px 0px 4px rgba(0,0,0,0.55);
-webkit-box-shadow: 0px 0px 4px rgba(0,0,0,0.55);
-o-box-shadow: 0px 0px 4px rgba(0,0,0,0.55);
}
.star {
z-index:110;
}
.star-two {
z-index:111;
background: #01ABE9;
/* Rotate */
-moz-transform: translate(-50%, -50%) rotate(30deg);
-webkit-transform: translate(-50%, -50%) rotate(30deg);
-ms-transform: translate(-50%, -50%) rotate(30deg);
-o-transform: translate(-50%, -50%) rotate(30deg);
transform: translate(-50%, -50%) rotate(30deg);
}
.star-three {
z-index:112;
background: #85D4E3;
/* Rotate */
-moz-transform: translate(-50%, -50%) rotate(-30deg);
-webkit-transform: translate(-50%, -50%) rotate(-30deg);
-ms-transform: translate(-50%, -50%) rotate(-30deg);
-o-transform: translate(-50%, -50%) rotate(-30deg);
transform: translate(-50%, -50%) rotate(-30deg);
}
The HTML to add inside the .ribbon DIV:
The jQuery:
//set the star at 10% of .ribbon box height
$(".star, .star-two, .star-three").css("width", ($(".ribbon").height()/10)*1 + "px");
$(".star, .star-two, .star-three").css("height", ($(".ribbon").height()/10)*1 + "px");
Just a final touch, add a gradient background to the egg quarters;
/*gradient by http://www.colorzilla.com/gradient-editor/ */
.inegg-tl, .inegg-tr{
background: #90d5ec; /* Old browsers */
background: -moz-linear-gradient(top, #90d5ec 0%, #c9eaf5 65%, #e5fffe 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#90d5ec), color-stop(65%,#c9eaf5), color-stop(100%,#e5fffe)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #90d5ec 0%,#c9eaf5 65%,#e5fffe 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #90d5ec 0%,#c9eaf5 65%,#e5fffe 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #90d5ec 0%,#c9eaf5 65%,#e5fffe 100%); /* IE10+ */
background: linear-gradient(to bottom, #90d5ec 0%,#c9eaf5 65%,#e5fffe 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#90d5ec', endColorstr='#e5fffe',GradientType=0 ); /* IE6-9 */
}
.inegg-bl, .inegg-br{
background: #e5fffe; /* Old browsers */
background: -moz-linear-gradient(top, #e5fffe 0%, #c9eaf5 35%, #90d5ec 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e5fffe), color-stop(35%,#c9eaf5), color-stop(100%,#90d5ec)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #e5fffe 0%,#c9eaf5 35%,#90d5ec 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #e5fffe 0%,#c9eaf5 35%,#90d5ec 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #e5fffe 0%,#c9eaf5 35%,#90d5ec 100%); /* IE10+ */
background: linear-gradient(to bottom, #e5fffe 0%,#c9eaf5 35%,#90d5ec 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e5fffe', endColorstr='#90d5ec',GradientType=0 ); /* IE6-9 */
}
See the result:
http://www.nelsonweb.it/eastereggcss/index.htmlDownload the code: https://github.com/orazionelson/easteregg
Sources & Tools:
http://www.css3shapes.com/
http://www.css3d.net/ribbon-generator/
http://www.colorzilla.com/gradient-editor/
http://wesandersonpalettes.tumblr.com/


No comments:
Post a Comment