3D Flipping Circle with CSS3 and jQuery
View demo Download source
Today we would like to uncover we how to emanate a small member with a picturesque touch. The thought is formed on a honeyed paper outcome found in a video of a Google Developer Stories. Maybe we have combined these kind of paper effects when we were a kid; fundamentally something opens or rotates when pulling or pulling some handle.
We’ll emanate a round with a hoop that will open once a small hoop is clicked, formulating a picturesque 3D flipping outcome with a assistance of CSS 3D transforms and shadows/gradients.
Check out 00:27 of a same video on HTML5 Rocks so that we can see and know a effect.
The Markup
So, let’s start with a markup. We’ll use some groups for a shading effects, a hoop pieces and a round parts. What we need, is a categorical coupling with a category fc-wrapper that will be a circle. On tip of that we will supplement an conceal that will make a right partial of a round darker once we open a rest. From this lower-most round we will indeed only see a right part. The div with a category fc-handle-pull will be a right-most hoop square outward of a circle. We’ll supplement a enclosure for a viewpoint and inside we’ll supplement a mentioned conceal for a right partial and also a second hoop square (it looks like one, yet it’s indeed dual pieces) that has a category fc-handle-out.Now, we need a multiplication for a left partial that will be manifest once we open a other half. Here we will supplement a quote. Note, that we are also adding some overlays that will assistance us make a opening animation demeanour some-more realistic.
The multiplication with a category fc-flip will enclose a front partial and a behind part. The behind partial will not be manifest given we will stagger it 180 degrees on a Y-axis. It will offer as a backface of a front part. We’ll supplement a final bit of a hoop to a front given we will wish to pierce it when “opening” a flip container.
div class="fc-wrapper" !-- right-most hoop square -- div class="fc-handle fc-handle-pull"/div div class="fc-perspective" !-- right partial overlay; get's darker -- div class="fc-overlay fc-overlay-reverse"/div !-- core hoop square -- div class="fc-handle fc-handle-out"div/div/div !-- core bottom calm partial -- div class="fc-bottom" div class="fc-bottom-bg" div class="fc-content" pI can live with doubt, and uncertainty, and not knowing. we consider it's many some-more engaging to live not meaningful than to have answers that competence be wrong. spanRichard Feynman/span/p /div /div div class="fc-overlay fc-overlay-solid"/div /div!-- //fc-bottom -- !-- front and behind of a flipping half -- div class="fc-flip" div class="fc-front" div class="fc-inner" div class="fc-overlay fc-overlay-left"/div !-- left-most partial of hoop -- div class="fc-handle fc-handle-in"div/div/div div class="fc-content" h3Free revelations/h3 pby Codrops/p /div /div /div!-- //fc-front -- div class="fc-back" div class="fc-inner" div class="fc-content" div class="feynman" span1918 – 1988/span /div /div div class="fc-overlay fc-overlay-right"/div /div /div!-- //fc-back -- /div!-- //fc-flip -- /div!-- //fc-perspective -- /div!-- //fc-wrapper --So, basically, we will have a round left partial and a round right partial that will flip open once we click on a right-most partial of a handle.
Let’s character this whole thing.
The CSS
The categorical coupling will be 300 pixels high and far-reaching and we’ll core it on a page. For all of a round elements we will use a paper-like hardness picture that we’ll conceal on a credentials color, giving it a picturesque touch. The coupling will be made as a round given we give it a limit radius of 50%:.fc-wrapper { width: 300px; height: 300px; position: relative; margin: 30px automobile 0; background: #846aa7 url(../images/paper.png) repeat core center; border-radius: 50%; box-shadow: 0 0 3px rgba(0, 0, 0, 0.3); }Let’s take a demeanour during a hoop pieces. All a pieces will have a fc-handle category in common:
.fc-handle { position: absolute; top: 50%; right: 0px; width: 80px; height: 30px; margin-top: -15px; background: box-shadow: 0 1px 1px rgba(0,0,0,0.1); }The subsequent category will conclude a position for a core part:
.fc-handle-out { right: -65px; width: 65px; }fc-handle-in is a left many part:
.fc-handle-in { right: 80px; }The core groups of a dual hoop pieces that are on tip of a round will offer as shadows. When we “pull” a hoop from a right, a shade dropping on a round will need to demeanour like a triangle that gets taller. We will use dual rotated divs with a erratic gradient, simulating accurately that:
.fc-handle div { position: absolute; height: 0px; width: 80px; top: 30px; content: ''; opacity: 0.3; } .fc-handle-in div { background: linear-gradient( 75deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 73%, rgba(0,0,0,0.65) 100% ); } .fc-handle-out div { background: linear-gradient( 170deg, rgba(0,0,0,0.65) 0%, rgba(0,0,0,0) 27%, rgba(0,0,0,0) 100% ); }The following pseudo-element will be used to emanate an inset shade outcome on a core piece:
.fc-handle-out::after { position: absolute; right: 0px; width: 4px; height: 31px; content: ''; background: linear-gradient( to right, rgba(0,0,0,0) 0%, rgba(0,0,0,0.15) 100% ); }The right-most piece, i.e. a one that will trigger a opening of a round pamphlet when clicked, will be positioned outward of a round shape:
.fc-handle-pull { right: auto; left: 100%; margin-left: 5px; width: 30px; box-shadow: 1px 0 1px rgba(0,0,0,0.1), inset 3px 0 2px rgba(0,0,0,0.2); cursor: pointer; }Let’s give it some abyss with a assistance of a gradient:
.fc-handle-pull::after { content: ''; position: absolute; top: 0px; right: 0px; width: 30px; height: 100%; background: linear-gradient( to right, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 69%, rgba(0,0,0,0.08) 100% ); }The bottom partial that will enclose a quote calm will have a following style:
.fc-bottom { width: 220px; height: 100%; overflow: hidden; position: absolute; opacity: 0; }We are environment a opacity to 0 given we don’t wish it to means angled edges of a round when it’s closed. There will be an conceal extinguishing this partial so will notice it if we don’t “hide” it. Note, that we are environment a crawl to hidden. This will make a multiplication with a following category be cut off on a right:
.fc-bottom-bg { background: #846aa7 url(../images/paper.png) repeat core center; border-radius: 50%; width: 300px; height: 100%; }Now, let’s take a demeanour during a overlays that will assistance us with a picturesque look. Let’s initial conclude a common character for all of them:
.fc-overlay { top: 0px; left: 0px; width: 300px; height: 100%; position: absolute; border-radius: 50%; }The plain conceal will simply be a semi-transparent black division. This one will be used to make a partial demeanour dim primarily (like a bottom content). When opening a circle, we will reduce a opacity turn in sequence to blur it out (the “open” states will be shown in a end):
.fc-overlay-solid { background: rgba(0,0,0,0.6); }The subsequent conceal will do a opposite: it won’t be manifest primarily yet afterwards we will use it to dim things once we open a booklet:
.fc-overlay-reverse { background: rgba(0,0,0,0); }That conceal will be used for a right partial of a round that will get lonesome by a opening bit.
The subsequent dual overlays will have semi-transparent gradients that we will control regulating opacity:
.fc-overlay-left { background: linear-gradient(to right, pure 27%, rgba(0,0,0,0.30) 80%); opacity: 0.5; } .fc-overlay-right { background: linear-gradient(to left, rgba(0,0,0,0) 0%,rgba(0,0,0,0.30) 100%); opacity: 0.5; }The left conceal will be used on a front partial and a right conceal on a behind part. Both will transition to an opacity of 1 once a pamphlet opens.
The viewpoint enclosure will, of course, have perspective, and we will make it a bit narrower. The thought is to cut off a round groups that we’ll have inside:
.fc-perspective { width: 220px; height: 300px; position: relative; perspective: 1000px; }The flip enclosure will be rotated to open a whole thing, divulgence a behind part. To flip in a right place, we need to set a transform-origin to where a conceal is, that is during 220 pixel:
.fc-flip { width: 100%; height: 100%; position: absolute; transform-origin: 220px 0px; }The behind and a front multiplication will have a following common style:
.fc-flip div { display: block; height: 100%; width: 100%; margin: 0; overflow: hidden; position: absolute; }Their breadth will be 220px and given a crawl is set to hidden, a round shapes of a core divs will be cut off.
The behind partial will be rotated -180 degrees in 3D (on a Y-axis):
.fc-flip .fc-back { transform: rotate3d(0,1,0,-180deg); }Note, that we are not defining a required 3D properties here given we don’t wish to repeat it for each class. We will accumulate all a particular category and conclude those properties later, during once.
The core tools will have a round figure and we’ll give them a paper texture:
.fc-flip .fc-inner { border-radius: 50%; width: 300px; height: 100%; position: absolute; background: #846aa7 url(../images/paper.png) repeat tip right; } .fc-flip .fc-back .fc-inner { margin-left: -80px; background-color: box-shadow: inset 2px 0 3px rgba(0,0,0,0.1); }The behind calm will need to be “pulled” to a left so that a round is cut off on a left side and not on a right like a one of a front part.
Now, let’s character a calm elements:
.fc-content { width: 220px; padding: 20px; text-align: right; position: relative; height: 100%; } .fc-back .fc-content { margin-left: 80px; } .fc-bottom-bg .fc-content { padding-top: 40px; } .fc-content p { font-size: 12px; line-height: 22px; font-family: "Montserrat", sans-serif; text-shadow: 0 -1px 1px rgba(255,255,255,0.1); color: padding: 0 0 0 31px; } .fc-flip .fc-front h3, .fc-flip .fc-front p { position: absolute; text-align: right; width: 180px; text-shadow: 0 -1px 1px rgba(255,255,255,0.1); color: } .fc-flip .fc-front h3, .feynman camber { font-family: "Montserrat", sans-serif; text-transform: uppercase; font-size: 17px; letter-spacing: 1px; font-weight: normal; } .fc-flip .fc-front h3 { top: 30px; left: 15px; } .feynman { width: 255px; height: 255px; position: absolute; overflow: hidden; top: 50%; left: -55px; border-radius: 50%; box-shadow: 2px 0 3px rgba(0,0,0,0.3); margin-top: -127px; background: pure url(../images/feynman.png) no-repeat core right; } .feynman camber { text-align: center; width: 100px; height: 5px; line-height: 30px; color: text-shadow: 1px 1px 1px rgba(0,0,0,0.2); bottom: 40px; right: 80px; font-size: 13px; position: absolute; } .fc-flip .fc-front h3 span{ font-size: 40px; } .fc-flip .fc-front p, .fc-bottom-bg .fc-content camber { bottom: 50px; left: 15px; font-family: "Dancing Script", Georgia, serif; font-weight: 700; font-size: 22px; } .fc-bottom-bg .fc-content camber { font-size: 18px; display: block; color: padding: 10px; text-shadow: 1px 1px 1px rgba(0,0,0,0.2); transform: rotate(-3deg); }Let’s accumulate all a classes that will have a transition:
.fc-flip .fc-back .fc-inner, .fc-overlay, .fc-handle, .fc-handle div, .fc-flip, .fc-bottom{ transition: all 0.6s ease-in-out; } .fc-bottom{ transition-delay: 0.6s; }The subsequent properties are critical for creation a 3D revolution work properly:
.fc-flip, .fc-flip .fc-inner, .fc-handle { transform-style: preserve-3d; } .fc-flip div, .fc-flip .fc-inner, .fc-flip .fc-front h3, .fc-handle, .fc-handle div, .fc-overlay, .fc-flip .fc-front p, .fc-flip .fc-front camber { backface-visibility: hidden; }When we open a round pamphlet we will request a category fc-wrapper-open to a categorical wrapper. Let’s conclude a “open” states for all a elements.
The left-most square of a hoop will cringe to a breadth of 0. If we watch a paper outcome in a video, we will notice that it gets pulled to a right, yet a slit:
.fc-wrapper.fc-wrapper-open .fc-handle-in { width: 0px; }The erratic gradients that will offer as a shade for a dual hoop pieces will turn taller:
.fc-wrapper.fc-wrapper-open .fc-handle-in div { height: 180px; } .fc-wrapper.fc-wrapper-open .fc-handle-out div { height: 100px; }The credentials tone of a dual initial hoop pieces will turn darker:
.fc-wrapper.fc-wrapper-open .fc-handle { background-color: }The right-most hoop will get wider given we are simulating a pulling of a whole handle:
.fc-wrapper.fc-wrapper-open .fc-handle-pull { width: 155px; background: }The credentials tone of a behind partial calm will turn lighter:
.fc-wrapper.fc-wrapper-open .fc-flip .fc-back .fc-inner { background-color: }The overlays will boost in opacity:
.fc-wrapper.fc-wrapper-open .fc-overlay { opacity: 1; }The plain conceal will blur out:
.fc-wrapper.fc-wrapper-open .fc-overlay-solid { background: rgba(0,0,0,0); }And a retreat conceal will turn darker:
.fc-wrapper.fc-wrapper-open .fc-overlay-reverse { background: rgba(0,0,0,0.4); }The bottom partial will turn manifest immediately (we mislay a transition here, yet when it closes it will fade):
.fc-wrapper.fc-wrapper-open .fc-bottom{ opacity: 1; transition: none; }And of course, a many critical thing that is going to happen: a revolution of a flip container:
.fc-wrapper.fc-wrapper-open .fc-flip { transform: rotate3d(0,1,0,175deg); }And that’s all a style. Now, let’s take a demeanour during a few lines of JavaScript that will assistance us request a category and supplement some appropriate support for mobile.
The JavaScript
When we click on he right hoop piece, we will request a category fc-wrapper-open to a categorical container. We’ll conclude dual elementary functions for opening and closing. We’ll also supplement appropriate support regulating Hammer.js and the jQuery plugin:$(function() { var $wrapper= $( '#fc-wrapper' ), $handle = $wrapper.children( 'div.fc-handle-pull' ); $handle.on( 'click', function( eventuality ) { ( $handle.data( 'opened' ) ) ? close() : open(); } ); $wrapper.hammer().bind( 'dragend', function( eventuality ) { switch( event.direction ) { case 'right' : open(); break; case 'left' : close(); break; } }); function open() { $wrapper.addClass( 'fc-wrapper-open' ); $handle.data( 'opened', loyal ); } function close() { $wrapper.removeClass( 'fc-wrapper-open' ); $handle.data( 'opened', fake ); } } );That’s all, wish we suffer it and find it inspiring!
Không có nhận xét nào:
Đăng nhận xét