サンプル
See the Pen Codepen by Tora (@webtoranomaki) on CodePen.
コード
<a class="btn01" href=""><span>ボタン</span><span>Button</span></a>
.btn01 {
position: relative;
display: block;
width: 200px;
height: 50px;
-webkit-perspective: 200px;
perspective: 200px;
}
.btn01 span {
position: absolute;
display: block;
box-sizing: border-box;
width: 200px;
height: 50px;
line-height: 50px;
text-align: center;
border: 1px solid #333;
-webkit-transition: .3s;
transition: .3s;
}
.btn01 span:nth-child(1) {
color: #fff;
background-color: #333;
-webkit-transform: rotateX(90deg);
-moz-transform: rotateX(90deg);
transform: rotateX(90deg);
-webkit-transform-origin: 50% 50% -25px;
-moz-transform-origin: 50% 50% -25px;
transform-origin: 50% 50% -25px;
}
.btn01 span:nth-child(2) {
color: #333;
background-color: #fff;
-webkit-transform: rotateX(0deg);
-moz-transform: rotateX(0deg);
transform: rotateX(0deg);
-webkit-transform-origin: 50% 50% -25px;
-moz-transform-origin: 50% 50% -25px;
transform-origin: 50% 50% -25px;
}
.btn01:hover span:nth-child(1) {
-webkit-transform: rotateX(0deg);
-moz-transform: rotateX(0deg);
transform: rotateX(0deg);
}
.btn01:hover span:nth-child(2) {
background-color: #333;
-webkit-transform: rotateX(-90deg);
-moz-transform: rotateX(-90deg);
transform: rotateX(-90deg);
}
もっとHTML自体をシンプルにしたい場合
あまりメリットがないけど、余計なspanとか入れたくないっていう場合はこんな書き方も出来る。ただ、ボタンの文字をCSS側で管理しなきゃいけないし、文字違いの同じボタンをいくつも設置するケースでは全く効率が悪いので使う機会はないと思うが。
<a class="btn02" href=""></a>
.btn02 {
position: relative;
display: block;
width: 200px;
height: 50px;
-webkit-perspective: 200px;
perspective: 200px;
}
.btn02::before,
.btn02::after {
position: absolute;
display: block;
box-sizing: border-box;
width: 200px;
height: 50px;
text-align: center;
line-height: 50px;
border: 1px solid #333;
transition: .3s;
pointer-events: none;
}
.btn02::before {
content: "ボタン";
color: #fff;
background-color: #333;
-webkit-transform: rotateX(90deg);
-moz-transform: rotateX(90deg);
transform: rotateX(90deg);
-webkit-transform-origin: 50% 50% -25px;
-moz-transform-origin: 50% 50% -25px;
transform-origin: 50% 50% -25px;
}
.btn02::after {
content: "Button";
color: #333;
background-color: #fff;
-webkit-transform: rotateX(0deg);
-moz-transform: rotateX(0deg);
transform: rotateX(0deg);
-webkit-transform-origin: 50% 50% -25px;
-moz-transform-origin: 50% 50% -25px;
transform-origin: 50% 50% -25px;
}
.btn02:hover::before {
-webkit-transform: rotateX(0deg);
-moz-transform: rotateX(0deg);
transform: rotateX(0deg);
}
.btn02:hover::after {
background-color: #333;
-webkit-transform: rotateX(-90deg);
-moz-transform: rotateX(-90deg);
transform: rotateX(-90deg);
}