ボタンにSVGを使って水がせりあがる様なホバーエフェクト

Ads

Result


SVGを使うといろいろ作れて楽しいですね。
HTMLで書いた自作のSVGをurl()フィルターで参照しています。

css

.c-button--gooey {/*ボタンの基本スタイル*/
  color: #06c8d9;
  font-size: 1.3em;
  text-transform: uppercase;
  letter-spacing: 2px;
  border: 4px solid #06c8d9;
  border-radius: 0;
  padding: 1.2em 3.4em;
  position: relative;
  transition: all 700ms ease;
}
.c-button--gooey .c-button__blobs {/*HTMLで書いたSVGを参照*/
  height: 100%;
  filter: url(#goo);
  overflow: hidden;
  position: absolute;
  top: 0;
  left: 0;
  bottom: -3px;
  right: -1px;
  z-index: -1;
}
.c-button--gooey .c-button__blobs div {/*配置*/
  background-color: #06c8d9;
  width: 34%;
  height: 100%;
  border-radius: 100%;
  position: absolute;
  transform: scale(1.4) translateY(125%) translateZ(0);
  transition: all 700ms ease;
}
.c-button--gooey .c-button__blobs div:nth-child(1) {/*エレメントの位置調整*/
  left: -5%;
}
.c-button--gooey .c-button__blobs div:nth-child(2) {
  left: 30%;
  transition-delay: 60ms;
}
.c-button--gooey .c-button__blobs div:nth-child(3) {
  left: 66%;
  transition-delay: 25ms;
}
.c-button--gooey:hover {
  color: #fff;
}
.c-button--gooey:hover .c-button__blobs div {/*ホバー時の挙動*/
  transform: scale(1.4) translateY(0) translateZ(0);
}

html

<div class="row middle-on-small center-on-small">
  <div class="column small-12 medium-6 large-4">
    <a href="#!" class="c-button c-button--gooey">
      ボタン
      <div class="c-button__blobs">
        <div></div>
        <div></div>
        <div></div>
      </div>
    </a>
  </div>
</div>

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" style="display: block; height: 0; width: 0;">
    <defs>
        <filter id="goo">
            <feGaussianBlur in="SourceGraphic" stdDeviation="10" result="blur"></feGaussianBlur>
            <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 18 -7" result="goo"></feColorMatrix>
            <feBlend in="SourceGraphic" in2="goo"></feBlend>
        </filter>
    </defs>
</svg>

via

Mana Button