.hoverBtn {
$borderWid: 2px;
$btnBakColor: #23193b;
position: relative;
overflow: hidden;
background-color: $btnBakColor;
&:before {
content: "";
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
border-width: $borderWid;
border-style: solid;
border-color: white;
box-sizing: border-box;
}
&:after {
content: "";
position: absolute;
top: calc(-1 * #{$borderWid});
left: calc(-1 * #{$borderWid});
bottom: calc(-1 * #{$borderWid});
right: calc(-1 * #{$borderWid});
display: inline-block;
background: radial-gradient(transparent 60%, $btnBakColor 40%);
clip-path: polygon(25% 0, 100% 0, 100% 75%, 75% 100%, 0 100%, 0 25%);
transition: all .2s ease-in-out;
}
&:hover {
&:after {
clip-path: polygon(90% 0, 100% 0, 100% 10%, 10% 100%, 0 100%, 0 90%);
}
}
}
개발하는 프로젝트에서 디자이너가 요청해서 만들게 되었는데,
추가로 생기는 요소나 CSS 라인을 최소화 해야 했다.
그래서 온라인에 나도는 팁들을 쓰지 않고 약간 치트성? 으로 만들었다.
- before로 테두리 만들기
- after로 일단 덮고
- 가운데는 보이게 하기 위해 배경색을 gradient로 채움
- 그리고 clip-path로 잘라내고
- 마우스 오버시 애니메이션 효과를 주기 위해 clip-path 사이즈 조절