MENU

CSS3で作るメニューに使えるスタイリッシュなホバーエフェクト

デモ

Menuにマウスをもっていくとエフェクトがでます。以下では、作り方を説明していきます。

基本部分をつくる


Menu

a {
  display: block;
  position: relative;
  padding: 12px 14px;
}
a span {
  display: block;
  position: relative;
  color: #fff;
  font-size: 22px;
  z-index: 7;
}

背景のボックスをつくる


a {
  display: block;
  position: relative;
  padding: 12px 14px;
}
a span {
  display: block;
  position: relative;
  color: #fff;
  font-size: 22px;
  z-index: 7;
}
a:after {
  position: absolute;
  top: 0;
  left: 0;
  content: '';
  width: 100%;
  height: 100%;
  background: #000;
  -webkit-transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  -moz-transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  -ms-transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  -o-transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  -webkit-transform: skew(-60deg) scaleX(1.5);
  -moz-transform: skew(-60deg) scaleX(1.5);
  -ms-transform: skew(-60deg) scaleX(1.5);
  transform: skew(-60deg) scaleX(1.5);
  z-index: 6;
}

擬似要素 :after を使って黒の背景ボックスをつくります。重なりの順番を指定していることに注意してください。z-index の指定を消すとMenu黒い背景ボックスの重なり順が逆になってしまいます。

ホバー時に形状を変える


a {
  display: block;
  position: relative;
  padding: 12px 14px;
}
a span {
  display: block;
  position: relative;
  color: #fff;
  font-size: 22px;
  z-index: 7;
}
a:after {
  position: absolute;
  top: 0;
  left: 0;
  content: '';
  width: 100%;
  height: 100%;
  background: #000;
  -webkit-transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  -moz-transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  -ms-transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  -o-transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  -webkit-transform: skew(-60deg) scaleX(1.5);
  -moz-transform: skew(-60deg) scaleX(1.5);
  -ms-transform: skew(-60deg) scaleX(1.5);
  transform: skew(-60deg) scaleX(1.5);
  z-index: 6;
}
a:hover:after {
  -webkit-transform: skew(-10deg) scaleX(1);
  -moz-transform: skew(-10deg) scaleX(1);
  -ms-transform: skew(-10deg) scaleX(1);
  transform: skew(-10deg) scaleX(1);
}

ホバーしたら傾きの角度が小さくなるようにします。

ホバー時にフェードさせる


a {
  display: block;
  position: relative;
  padding: 12px 14px;
}
a span {
  display: block;
  position: relative;
  color: #fff;
  font-size: 22px;
  z-index: 7;
}
a:after {
  position: absolute;
  top: 0;
  left: 0;
  content: '';
  width: 100%;
  height: 100%;
  background: #000;
  opacity: 0;
  -webkit-transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  -moz-transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  -ms-transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  -o-transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  transition: .3s cubic-bezier(0.4, 0.09, 0, 1.6);
  -webkit-transform: skew(-60deg) scaleX(1.5);
  -moz-transform: skew(-60deg) scaleX(1.5);
  -ms-transform: skew(-60deg) scaleX(1.5);
  transform: skew(-60deg) scaleX(1.5);
  z-index: 6;
}
a:hover:after {
  opacity: 1;
  -webkit-transform: skew(-10deg) scaleX(1);
  -moz-transform: skew(-10deg) scaleX(1);
  -ms-transform: skew(-10deg) scaleX(1);
  transform: skew(-10deg) scaleX(1);
}

21行目34行目を見てください。最初は opacity: 0; で隠しておいて、ホバーすると opacity: 1; でフェードインさせるようにします。