CSSで作るスライドアニメーションで右横から出てくる追従お問い合わせボタン

HTML/CSS

CSSで作るスライドアニメーションで右横から出てくる追従お問い合わせボタンの作り方を紹介します。

CSSのみでjsは未使用なので簡単・軽量です。

スポンサーリンク

サンプル

<a href="/contact/" class="contact-btn slidein"><span class="contact-btn-txt">お問い合わせ</span></a>
.contact-btn {
  display: block;
  position: fixed;
  top: 122px;
  right: 0;
  width: 46px;
  height: 180px;
  background: #333;
  z-index: 100;
  opacity: 0;
  color: #fff;
  transform: translateX(50px);
}
.contact-btn:hover {
  opacity: 0.7!important;
}
.contact-btn-txt {
  position: relative;
  display: flex;
  align-items: center;
  width: 100%;
  padding-top: 50px;
  -ms-writing-mode: tb-rl;
  writing-mode: vertical-rl;
}
.contact-btn-txt::before {
  content: "";
  position: absolute;
  top: 18px;
  left: 0; right: 0;
  display: block;
  width: 22px;
  height: 21px;
  margin: 0 auto;
  background: url(../images/icon_send.png) no-repeat;
  background-size: contain;
}

.slidein {
  animation: slideIn1 2s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards;
  animation-delay: 0.3s;
}
@keyframes slideIn1 {
  0% {
    transform: translateX(50px);
    opacity: 0;
  }
  100% {
    transform: translateX(0);
    opacity: 1;
  }
}

上の方はほとんどボタンの見た目に関する記述ですので、用途などに合わせて自分好みに書き換えて使用してください。
39行目の .slidein クラス以降がアニメーションに関する部分となります。

よくある質問(FAQ)

Q. CSSだけでスライドイン/アウトのドロワーメニューは作れますか?
A. チェックボックスのハック(:checkedとtransform)を使えばJavaScriptなしで実装できますが、アクセシビリティが劣ります。現代ではaria-expanded属性とJavaScriptでクラスを切り替える実装が推奨されます:menu.classList.toggle("open")→CSS側で.menu.open { transform: translateX(0); }
Q. スライドアニメーションにtransformとleft/rightのどちらを使うべきですか?
A. transform: translateX()の方が推奨です。transformはGPUアクセラレーションが効きリフローが発生しないため、left/rightプロパティよりパフォーマンスが高いです。特にモバイルでは差が顕著です。will-change: transformを事前に設定するとさらに滑らかになります。
Q. ドロワーメニューの外側クリックで閉じる実装にはどうすればよいですか?
A. オーバーレイ(背景の暗い層)を別要素で用意してクリックイベントを設定する方法がシンプルです。またはJSでdocument.addEventListener("click", e => { if(!drawer.contains(e.target)) closeDrawer(); })でメニュー外クリックを検知します。ESCキー操作(keydownイベントのkey === “Escape”)の対応もアクセシビリティに重要です。