Pure CSS (SCSS) arrow button hover effect.
A Pen by Katherine Kato on CodePen.
| <div id="container"> | |
| <button class="learn-more"> | |
| <span class="circle" aria-hidden="true"> | |
| <span class="icon arrow"></span> | |
| </span> | |
| <span class="button-text">Learn More</span> | |
| </button> | |
| </div> |
| @import url('https://fonts.googleapis.com/css?family=Mukta:700'); | |
| $bg: #f3f8fa; | |
| $white: #fff; | |
| $black: #282936; | |
| @mixin transition($property: all, $duration: 0.45s, $ease: cubic-bezier(0.65,0,.076,1)) { | |
| transition: $property $duration $ease; | |
| } | |
| * { | |
| box-sizing: border-box; | |
| &::before, &::after { | |
| box-sizing: border-box; | |
| } | |
| } | |
| body { | |
| font-family: 'Mukta', sans-serif; | |
| font-size: 1rem; | |
| line-height: 1.5; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| margin: 0; | |
| min-height: 100vh; | |
| background: $bg; | |
| } | |
| button { | |
| position: relative; | |
| display: inline-block; | |
| cursor: pointer; | |
| outline: none; | |
| border: 0; | |
| vertical-align: middle; | |
| text-decoration: none; | |
| background: transparent; | |
| padding: 0; | |
| font-size: inherit; | |
| font-family: inherit; | |
| &.learn-more { | |
| width: 12rem; | |
| height: auto; | |
| .circle { | |
| @include transition(all, 0.45s, cubic-bezier(0.65,0,.076,1)); | |
| position: relative; | |
| display: block; | |
| margin: 0; | |
| width: 3rem; | |
| height: 3rem; | |
| background: $black; | |
| border-radius: 1.625rem; | |
| .icon { | |
| @include transition(all, 0.45s, cubic-bezier(0.65,0,.076,1)); | |
| position: absolute; | |
| top: 0; | |
| bottom: 0; | |
| margin: auto; | |
| background: $white; | |
| &.arrow { | |
| @include transition(all, 0.45s, cubic-bezier(0.65,0,.076,1)); | |
| left: 0.625rem; | |
| width: 1.125rem; | |
| height: 0.125rem; | |
| background: none; | |
| &::before { | |
| position: absolute; | |
| content: ''; | |
| top: -0.25rem; | |
| right: 0.0625rem; | |
| width: 0.625rem; | |
| height: 0.625rem; | |
| border-top: 0.125rem solid #fff; | |
| border-right: 0.125rem solid #fff; | |
| transform: rotate(45deg); | |
| } | |
| } | |
| } | |
| } | |
| .button-text { | |
| @include transition(all, 0.45s, cubic-bezier(0.65,0,.076,1)); | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| padding: 0.75rem 0; | |
| margin: 0 0 0 1.85rem; | |
| color: $black; | |
| font-weight: 700; | |
| line-height: 1.6; | |
| text-align: center; | |
| text-transform: uppercase; | |
| } | |
| } | |
| &:hover { | |
| .circle { | |
| width: 100%; | |
| .icon { | |
| &.arrow { | |
| background: $white; | |
| transform: translate(1rem, 0); | |
| } | |
| } | |
| } | |
| .button-text { | |
| color: $white; | |
| } | |
| } | |
| } | |
| @supports (display: grid) { | |
| body { | |
| display: grid; | |
| grid-template-columns: repeat(4, 1fr); | |
| grid-gap: 0.625rem; | |
| grid-template-areas: ". main main ." ". main main ."; | |
| } | |
| #container { | |
| grid-area: main; | |
| align-self: center; | |
| justify-self: center; | |
| } | |
| } |