[CSS]スクリプト無し、CSSで実装されたパタッと開くアニメーションがかわいいスタイルシートのテクニック
Post on:2014年10月2日
スクリプト無し、CSSで実装されたパタッと開くアニメーションがかわいいスタイルシートのテクニックを紹介します。
パタッは2種類、↓の一つ目から二つ目を想像してみてください。
デモのアニメーション:一つ目
二つ目は、、、上下じゃないです。
ボタンをスライドさせ、全体をパタッと開きます。
デモのアニメーション:二つ目
実際の動作は、下記ページでお楽しみください。
実装のヒントとなったのは下記の記事だそうです。
見事に再現されていますね。
HTML
一つ目に紹介したデモ、半分からパタッとなるHTMLから。
開く時のテキストの区切れはspanで実装します。
<article> <a class="btn-fold-2" href="#"> <span>Don</span><span>ate</span> </a> </article>
二つ目のスライドしてパタッと開くのもHTMLの構造は基本的に同じです。
<article> <a class="btn-fold-1" href="#"> <span>Donate</span><span>to RIF</span> </a> </article>
CSS
まずは共通のスタイルシートから。
*, *:before, *:after { margin: 0; padding: 0; -moz-box-sizing: border-box; box-sizing: border-box; } body { text-align: center; font-family: 'Droid Serif', serif; background-color: #fafafa; } article { padding: 10rem 1rem; border-bottom: 1px solid #ebeaea; }
半分からパタッとさせるスタイルシートです。
.btn-fold-2 { position: relative; display: inline-block; width: 14rem; z-index: 1; font-family: 'Varela Round', sans-serif; color: white; text-decoration: none; font-size: 2.5rem; text-transform: uppercase; letter-spacing: 0.1rem; background-color: #0079c2; -webkit-transform-style: preserve-3d; transform-style: preserve-3d; -webkit-transform: translateX(0.5rem); -ms-transform: translateX(0.5rem); transform: translateX(0.5rem); -webkit-transition: background-color 0s 0.2s ease-in-out; transition: background-color 0s 0.2s ease-in-out; } .btn-fold-2 span { position: relative; width: 50%; float: left; padding-top: 1rem; padding-bottom: .7rem; pointer-events: none; -webkit-transform-style: preserve-3d; transform-style: preserve-3d; -webkit-perspective: 400px; perspective: 400px; -webkit-perspective-origin: 50% 200%; perspective-origin: 50% 200%; } .btn-fold-2 span:after { position: absolute; top: 0; right: 0; bottom: 0; left: 0; -webkit-transition: -webkit-transform 0.4s, opacity 0s 0.2s ease-in-out; transition: transform 0.4s, opacity 0s 0.2s ease-in-out; } .btn-fold-2 span:first-child { z-index: 3; opacity: 1; text-align: right; background-color: #0079c2; box-shadow: -1rem 0 0 #0079c2; -webkit-transition: opacity 0s; transition: opacity 0s; } .btn-fold-2 span:first-child:after { content: 'ate'; opacity: 1; padding-top: 1rem; text-align: left; background-color: #0079c2; -webkit-transform-origin: 0 50%; -ms-transform-origin: 0 50%; transform-origin: 0 50%; -webkit-transform: translateX(100%) rotateY(0); transform: translateX(100%) rotateY(0); } .btn-fold-2 span:last-child { z-index: 2; text-align: left; color: black; background-color: #fae900; } .btn-fold-2 span:last-child:after { content: 'don'; opacity: 0; padding-top: 1rem; text-align: right; background-color: #fae900; box-shadow: -1rem 0 0 #fae900; -webkit-transform-origin: 100% 50%; -ms-transform-origin: 100% 50%; transform-origin: 100% 50%; -webkit-transform: translateX(-100%) rotateY(180deg); transform: translateX(-100%) rotateY(180deg); } .btn-fold-2:hover { background-color: #fae900; } .btn-fold-2:hover > span:first-child { opacity: 0; -webkit-transition: opacity 0s 0.4s; transition: opacity 0s 0.4s; } .btn-fold-2:hover > span:first-child:after { opacity: 0; -webkit-transform: translateX(100%) rotateY(-180deg); transform: translateX(100%) rotateY(-180deg); } .btn-fold-2:hover > span:last-child:after { opacity: 1; -webkit-transform: translateX(-100%) rotateY(0.1deg); transform: translateX(-100%) rotateY(0.1deg); }
スライドしてパタッとさせるスタイルシートです。
.btn-fold-1 { position: relative; display: inline-block; width: 28rem; z-index: 1; font-family: 'Varela Round', sans-serif; text-decoration: none; font-size: 2.5rem; color: black; text-transform: uppercase; letter-spacing: 0.1rem; -webkit-transform-style: preserve-3d; transform-style: preserve-3d; -webkit-perspective: 800px; perspective: 800px; -webkit-perspective-origin: 50% 200%; perspective-origin: 50% 200%; -webkit-transform: translateX(-25%) translateZ(0); transform: translateX(-25%) translateZ(0); -webkit-transition: -webkit-transform 0.8s; transition: transform 0.8s; } .btn-fold-1 span { position: relative; display: block; width: 50%; float: left; padding-top: 1rem; padding-bottom: .7rem; text-align: right; } .btn-fold-1 span:last-child { z-index: 2; padding-right: 1rem; padding-left: .6rem; text-align: left; background-color: #fae900; } .btn-fold-1 span:first-child { z-index: 3; padding-right: .6rem; padding-left: 1rem; pointer-events: none; background-color: #fae900; -webkit-backface-visibility: visible; backface-visibility: visible; -webkit-transform-origin: 100% 50%; -ms-transform-origin: 100% 50%; transform-origin: 100% 50%; -webkit-transform: rotateY(179.9deg); transform: rotateY(179.9deg); -webkit-transition: -webkit-transform 0.4s ease-in-out; transition: transform 0.4s ease-in-out; } .btn-fold-1 span:first-child:before { content: 'Donate'; position: absolute; top: 0; right: 0; bottom: 0; left: 0; padding-top: 1rem; z-index: 4; color: white; text-align: center; background-color: #0079c2; -webkit-transform: rotateY(180deg); transform: rotateY(180deg); -webkit-transition: color 0s 0.2s, background-color 0s 0.2s; transition: color 0s 0.2s, background-color 0s 0.2s; -webkit-transition-timing-function: ease-in-out; transition-timing-function: ease-in-out; } .btn-fold-1:hover { -webkit-transform: translateX(0) translateZ(0); transform: translateX(0) translateZ(0); } .btn-fold-1:hover > span:first-child { -webkit-transform: rotateY(0); transform: rotateY(0); } .btn-fold-1:hover > span:first-child:before { color: transparent; background-color: transparent; }
sponsors