- segments = 30
.directionAwareButton
-(1..segments).each do
.segment
.button
Hover me
View Compiled
@font-face {
font-family: 'Proximanova';
src: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/ProximaNovaCond-Light.woff2') format('woff2'),
url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/ProximaNovaCond-Light.woff') format('woff');
font-weight: 300;
font-style: normal;
}
%positionAbs {
position: absolute;
left: 0;
right: 0;
top: 50%;
transform: translateY(-50%);
margin: 0 auto;
}
body {
background: #16151f;
}
@mixin directionAwareButton($segments, $range, $boundScale) {
.directionAwareButton {
&:hover {
.segment {
transform: scale($boundScale);
}
}
}
.segment {
float: left;
width: 100 / ($segments / 3) + 0%;
height: 33.33%;
top: 0;
position: absolute;
z-index: 1;
}
$node: "";
$clampAt: $range;
$clampRange: ($clampAt * 2) / (($segments / 3) - 1);
@for $r from 1 through $segments {
$node: $node + "+ div";
}
@for $seg from 1 through $segments {
.segment {
&:nth-of-type(#{$seg}) {
left: ($seg - 1) * (100 / ($segments / 3) + 0%);
@if($seg > $segments / 3) {
top: 33.33%;
left: ($seg - 1 - ($segments / 3)) * (100 / ($segments / 3) + 0%);
}
@if($seg > $segments / 1.5) {
top: 66.66%;
left: ($seg - 1 - ($segments / 1.5)) * (100 / ($segments / 3) + 0%);
}
&:hover #{$node} {
left: -$clampAt + (($seg - 1 ) * $clampRange);
top: -$clampAt;
@if($seg > $segments / 3) {
left: -$clampAt + (($seg - 1 - ($segments / 3)) * $clampRange);
top: $clampAt - $clampAt;
}
@if($seg > $segments / 1.5) {
left: -$clampAt + (($seg - 1 - ($segments / 1.5)) * $clampRange);
top: $clampAt;
}
@content;
}
$node: str_slice($node, 0, -6);
}
}
}
}
.directionAwareButton {
@extend %positionAbs;
font-family: 'Proximanova';
width: 130px;
letter-spacing: 1.2px;
text-transform: uppercase;
font-weight: normal;
& > .button {
text-align: center;
border: 0;
border-radius: 0;
color: #fc3677;
font-size: 15px;
padding: 18px 20px;
position: relative;
transition: left 0.4s cubic-bezier(0.375, 1.65, 0.505, 0.89), top 0.4s cubic-bezier(0.375, 1.65, 0.505, 0.89), color .4s, background .4s;
cursor: pointer;
left: 0;
top: 0;
&:before {
content: '';
width: 50px;
height: 52px;
top: 2px;
background: #3d1c44;
display: block;
position: absolute;
z-index: -1;
left: 0;
transition: all 0.5s;
}
&:after {
content: '';
width: 56px;
height: 2px;
bottom: 0px;
background: #fc3677;
display: block;
position: absolute;
z-index: 0;
left: 0;
transition: all 0.5s .1s;
}
}
.segment {
opacity: 0;
cursor: pointer;
}
}
@include directionAwareButton(30, 6px, 2) {
color: #fc3677;
&:before,
&:after {
width: 100%;
}
}
View Compiled
// Nada
View Compiled
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.