アニメーション付きのボタンを作る

1:様々なボタンを作る

HTMLの記述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible"content="ie=edge">
  <title>Document</title>
  <link rel="stylesheet"href="style.css">
</head>
<body>
  <divid="container">
  <button class="btn slide-bg">Button</button>
 </div>
</body>
</html>

SCSSの記述

$cWhite: white;
$cBlack: black;

#container {
  text-align: center;
}

.btn {
  background-color: $cWhite;
  color: $cBlack;
  border: 1px solid $cBlack;
  padding: 10px 40px;
  margin: 50px 0;
  font-weight: 600;
  cursor: pointer;
  //0.3sかけてアニメーションをする
  transition: all 0.3s;

  &.slide-bg {
    position: relative;
//枠外を非表示
    overflow: hidden;
//前面にする
    z-index: 1;

  &::before {
// 疑似要素のために必要。空のspanを生成している。htmlタグにひとつだけつける
    content: '';
    display: inline-block;
    width: 100%;
    height: 100%;
    background-color: $cBlack;
    position: absolute;
    top: 0;
    left: 0;
    transform: translateX(-100%);
    transition: transform 0.3s;
//背面にする    
    z-index: -1;
   }

  &:hover {
   color: $cWhite;
  
  &::before {
   transform: none;
  }
 }
}
}

*ポイント

親要素slide-bgの

{ position: relative; overflow: hidden;z-index: 1;}

子要素&::beforeの

{content: ”; position: absolute;}

は重要なので意識しよう

2:アニメーション付きのボタン1

HTMLの記述(bodyより上は同じなので省略)

<body>
  <divid="container">
    <button class="btn cover-3d"><span>Button</span>
    </button>
  </div>
</body>

SCSSの記述

$cWhite: white;
$cBlack: black;

#container {
text-align: center;
}

.btn {
  background-color: $cWhite;
  color: $cBlack;
  border: 1px solid $cBlack;
  padding: 10px 40px;
  margin: 50px 0;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.3s;

  &.cover-3d {
    position: relative;
    z-index: 1;
  // beforeの疑似要素に3Dを実現するために必要
    transform-style: preserve-3d;
  // 値が少ないほど近くで見ているような演出になる
    perspective: 300px;
  // どこから見ているか設定できる
    perspective-origin: 50%50%;
  &span {
    display: inline-block;
    // translateZ(20px);でもよい
    transform: translate3d(0, 0, 20px);
  }

  &::before {
    content: '';
    display: inline-block;
    width: 100%;
    height: 100%;
    background-color: $cBlack;
    position: absolute;
    top: 0;
    left: 0;
    transform: rotateX(90deg);
    transition: all 0.3s;
    transform-origin: top center;
    // 透明度
    opacity: 0;
    // z-index: -1;
  }

  &:hover {
   color: $cWhite;
  &::before {
   transform: none;
   // マウスオーバーしたときに透明度を解除する
   opacity: 1;
   }
  }
 }
}

3:アニメーション付きのボタン2

HTMLの記述(bodyより上は同じなので省略)

<body>
  <divid="container">
   <div class="try">
     <a class="btn cubic"><span class="hovering">Now, Hovering
</span>
   <span class="default">Button</span></a>
   </div>
  </div>
</body>

SCSSの記述

$cWhite: white;
$cBlack: black;

#container {
  text-align: center;
 }

 .try {

 .btn {
    position: relative;
    display: inline-block;
//子要素を3Dアニメーションするために必要
    transform-style: preserve-3d;
    perspective: 300px;
    width: 150px;
    height: 50px;
    margin: 0 auto;
    cursor: pointer;

  &.cubic {
  /** スタイルをここに追加。*/
   &span {
  // 重なった状態でアニメーションするため
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    border: 1px solid $cBlack;
  // 文字を上下中央揃え
    line-height: 48px;
    text-align: center;
    transition: all 0.3s;
  }

  &.hovering {
    background-color: $cBlack;
    color: $cWhite;
    transform: rotateX(90deg);
    transform-origin: centercenter-25px;
  }

  &.default {
    background-color: $cWhite;
    color: $cBlack;
    transform: rotateX(0);
    transform-origin: centercenter-25px;
  }
  &:hover {
  &.hovering {
    transform: rotateX(0);
  }
 
  &.default {
    transform: rotateX(-90deg);
   }
  }
 }
}
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です