If you want to give your HTML button a little twist, putting CSS with javascript button hover effects is ideal. It will help improve your visitors’ dwell time. The animated buttons will encourage visitors to see what your site has to offer and makes your page more dynamic. It also boosts your brand reputation.
Here we will learn to create a How to Create a button with an advanced hover effect the help of CSS Javascript and HTML
HTML button with an advanced hover effect
1
<
h1
>How to Create a button with an advanced hover effect</
h1
>
2
<
button
class
=
"buttondiv"
>I am Simple</
button
>
3
<
button
class
=
"buttondiv alternative"
>I am Playful hover! Button</
button
>
4
<
button
class
=
"buttondiv simple"
> I am So Simple</
button
>
CSS to create button with an advanced hover effect
1
.buttondiv.alternative {
2
--color-hover:
#2B3044
;
5
--hover-front:
#F6F8FF
;
9
--background-hover:
#1749DB
;
14
--color-hover: var(--color);
15
--
background
:
#2B3044
;
16
--background-hover: var(--background);
17
--hover-back:
#6D58FF
;
18
--hover-front:
#5C86FF
;
24
letter-spacing
: .
02em
;
30
-webkit-appearance:
none
;
31
-webkit-tap-highlight-
color
:
transparent
;
32
-webkit-mask-image: -webkit-radial-gradient(
white
,
black
);
33
color
: var(--c, var(--color));
34
background
: var(--b, var(--background));
35
-webkit-transition: color
0.2
s linear var(--c-d,
0.2
s), background
0.3
s linear var(--b-d,
0.2
s);
36
transition: color
0.2
s linear var(--c-d,
0.2
s), background
0.3
s linear var(--b-d,
0.2
s);
38
.buttondiv:not(.simple):before, .buttondiv:not(.simple):after {
41
background
: var(--pb, var(--hover-back));
46
border-radius: var(--br,
40%
);
47
-webkit-transform: translateY(var(--y,
50%
));
48
transform: translateY(var(--y,
50%
));
49
-webkit-transition: border-radius
0.5
s ease var(--br-d,
0.08
s), -webkit-transform var(--d,
0.4
s) ease-in var(--d-d,
0
s);
50
transition: border-radius
0.5
s ease var(--br-d,
0.08
s), -webkit-transform var(--d,
0.4
s) ease-in var(--d-d,
0
s);
51
transition: transform var(--d,
0.4
s) ease-in var(--d-d,
0
s), border-radius
0.5
s ease var(--br-d,
0.08
s);
52
transition: transform var(--d,
0.4
s) ease-in var(--d-d,
0
s), border-radius
0.5
s ease var(--br-d,
0.08
s), -webkit-transform var(--d,
0.4
s) ease-in var(--d-d,
0
s);
54
.buttondiv:not(.simple):after {
55
--pb: var(--hover-front);
66
-webkit-backface-
visibility
:
hidden
;
67
backface-
visibility
:
hidden
;
68
-webkit-transform: translateZ(
0
);
69
transform: translateZ(
0
);
70
-webkit-animation: var(--name,
none
)
0.7
s linear forwards
0.18
s;
71
animation: var(--name,
none
)
0.7
s linear forwards
0.18
s;
76
.buttondiv.in:not(.out) {
77
--c: var(--color-hover);
78
--b: var(--background-hover);
80
.buttondiv.in:not(.out):before, .buttondiv.in:not(.out):after {
84
.buttondiv.in:not(.out):after {
91
.buttondiv.in.out:before {
95
@-webkit-keyframes
move
{
98
-webkit-transform: translateY(calc(
-6px
* var(--
move
))) translateZ(
0
) rotate(calc(
-13
deg * var(--rotate) * var(--part)));
99
transform: translateY(calc(
-6px
* var(--
move
))) translateZ(
0
) rotate(calc(
-13
deg * var(--rotate) * var(--part)));
102
-webkit-transform: translateY(calc(
3px
* var(--
move
))) translateZ(
0
) rotate(calc(
6
deg * var(--rotate) * var(--part)));
103
transform: translateY(calc(
3px
* var(--
move
))) translateZ(
0
) rotate(calc(
6
deg * var(--rotate) * var(--part)));
106
-webkit-transform: translateY(calc(
-2px
* var(--
move
))) translateZ(
0
) rotate(calc(
-3
deg * var(--rotate) * var(--part)));
107
transform: translateY(calc(
-2px
* var(--
move
))) translateZ(
0
) rotate(calc(
-3
deg * var(--rotate) * var(--part)));
114
-webkit-transform: translateY(calc(
-6px
* var(--
move
))) translateZ(
0
) rotate(calc(
-13
deg * var(--rotate) * var(--part)));
115
transform: translateY(calc(
-6px
* var(--
move
))) translateZ(
0
) rotate(calc(
-13
deg * var(--rotate) * var(--part)));
118
-webkit-transform: translateY(calc(
3px
* var(--
move
))) translateZ(
0
) rotate(calc(
6
deg * var(--rotate) * var(--part)));
119
transform: translateY(calc(
3px
* var(--
move
))) translateZ(
0
) rotate(calc(
6
deg * var(--rotate) * var(--part)));
122
-webkit-transform: translateY(calc(
-2px
* var(--
move
))) translateZ(
0
) rotate(calc(
-3
deg * var(--rotate) * var(--part)));
123
transform: translateY(calc(
-2px
* var(--
move
))) translateZ(
0
) rotate(calc(
-3
deg * var(--rotate) * var(--part)));
126
@-webkit-keyframes move-out {
129
-webkit-transform: translateY(calc(
6px
* var(--
move
))) translateZ(
0
) rotate(calc(
13
deg * var(--rotate) * var(--part)));
130
transform: translateY(calc(
6px
* var(--
move
))) translateZ(
0
) rotate(calc(
13
deg * var(--rotate) * var(--part)));
133
-webkit-transform: translateY(calc(
-3px
* var(--
move
))) translateZ(
0
) rotate(calc(
-6
deg * var(--rotate) * var(--part)));
134
transform: translateY(calc(
-3px
* var(--
move
))) translateZ(
0
) rotate(calc(
-6
deg * var(--rotate) * var(--part)));
137
-webkit-transform: translateY(calc(
2px
* var(--
move
))) translateZ(
0
) rotate(calc(
3
deg * var(--rotate) * var(--part)));
138
transform: translateY(calc(
2px
* var(--
move
))) translateZ(
0
) rotate(calc(
3
deg * var(--rotate) * var(--part)));
144
-webkit-transform: translateY(calc(
6px
* var(--
move
))) translateZ(
0
) rotate(calc(
13
deg * var(--rotate) * var(--part)));
145
transform: translateY(calc(
6px
* var(--
move
))) translateZ(
0
) rotate(calc(
13
deg * var(--rotate) * var(--part)));
148
-webkit-transform: translateY(calc(
-3px
* var(--
move
))) translateZ(
0
) rotate(calc(
-6
deg * var(--rotate) * var(--part)));
149
transform: translateY(calc(
-3px
* var(--
move
))) translateZ(
0
) rotate(calc(
-6
deg * var(--rotate) * var(--part)));
152
-webkit-transform: translateY(calc(
2px
* var(--
move
))) translateZ(
0
) rotate(calc(
3
deg * var(--rotate) * var(--part)));
153
transform: translateY(calc(
2px
* var(--
move
))) translateZ(
0
) rotate(calc(
3
deg * var(--rotate) * var(--part)));
157
box-sizing: border-box;
158
-webkit-font-smoothing: antialiased;
170
display
: -webkit-box;
172
font-family
:
'Inter UI'
,
'Inter'
,
Arial
;
173
-webkit-box-pack:
center
;
174
justify-
content
:
center
;
175
-webkit-box-align:
center
;
179
@media (
max-width
:
440px
) {
181
-webkit-box-orient: vertical;
182
-webkit-box-
direction
:
normal
;
183
flex-
direction
: column;
190
body .buttondiv:first-child {
193
body .buttondiv:last-child {
196
@media (
max-width
:
440px
) {
Javascript
1
document.querySelectorAll(
'.buttondiv'
).forEach(button => {
3
let div = document.createElement(
'div'
),
4
letters = button.textContent.trim().split(
''
);
6
function
elements(letter, index, array) {
8
let element = document.createElement(
'span'
),
9
part = (index >= array.length / 2) ? -1 : 1,
10
position = (index >= array.length / 2) ? array.length / 2 - index + (array.length / 2 - 1) : index,
11
move = position / (array.length / 2),
14
element.innerHTML = !letter.trim() ?
' '
: letter;
15
element.style.setProperty(
'--move'
, move);
16
element.style.setProperty(
'--rotate'
, rotate);
17
element.style.setProperty(
'--part'
, part);
19
div.appendChild(element);
23
letters.forEach(elements);
25
button.innerHTML = div.outerHTML;
27
button.addEventListener(
'mouseenter'
, e => {
28
if
(!button.classList.contains(
'out'
)) {
29
button.classList.add(
'in'
);
33
button.addEventListener(
'mouseleave'
, e => {
34
if
(button.classList.contains(
'in'
)) {
35
button.classList.add(
'out'
);
36
setTimeout(() => button.classList.remove(
'in'
,
'out'
), 950);
Result: How to Create a button with an advanced hover effect
How to Create a button with an advanced hover effect
About Post Author
Continue Reading