In this tutorial we will learn to create different type of button hover effect with CSS transitions and transforms.
1. Split Background – Button Hover Effect
HTML
<body> <div>Hover Over</div> </body>
CSS
html { box-sizing: border-box; } *, *::before, *::after { box-sizing: inherit; } body { padding: 0; margin: 0; height: 100vh; font-family: Arial, Helvetica, sans-serif; display: flex; justify-content: center; align-items: center; } div { font-size: 36px; text-decoration: none; padding: 35px 75px; border: 3px solid #000; position: relative; overflow: hidden; cursor: pointer; } div::before { content: ''; background: #D35B38; position: absolute; top: 0; left: 0; width: 50%; height: 100%; z-index: -1; transform-origin: bottom left; transform: rotate(-90deg); transition: transform 1s; } div:hover:before { transform: rotate(0deg); } div::after { content: ''; background: #DEB294; position: absolute; top: 0; right: 0; width: 50%; height: 100%; z-index: -2; transform-origin: bottom right; transform: rotate(90deg); transition: transform 1s 0.5s; } div:hover::after { transform: rotate(0deg); }
2. Sliding Background – Button Hover Effect
HTML
<body> <div>Hover Over</div> </body>
CSS
html { box-sizing: border-box; } *, *::before, *::after { box-sizing: inherit; } body { padding: 0; margin: 0; height: 100vh; display: flex; justify-content: center; align-items: center; } div { font-family: Arial, Helvetica, sans-serif; font-size: 38px; padding: 40px 80px; border: 3px solid #000; position: relative; cursor: pointer; overflow: hidden; } div::before { content: ''; width: 100%; height: 100%; background-color: #4C2A8F; position: absolute; top: 0; left: 0; z-index: -1; transform: translateX(-100%); transition: all 1s; } div:hover::before { transform: translateX(100%); }
3. Two Bars Background – Button Hover Effect
HTML
<body> <div>Hover Over</div> </body>
CSS
html { box-sizing: border-box; } *, *::before, *::after { box-sizing: inherit; } body { padding: 0; margin: 0; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } div { font-size: 38px; padding: 40px 80px; color: #fff; background-color: #BBE163; position: relative; overflow: hidden; cursor: pointer; } div::before { content: ''; width: 100%; height: 25%; background-color: #F3FFCF; position: absolute; top: 0; left: 0; transform: translatex(-100%) rotate(45deg); transition: all 2s; } div:hover::before { transform: translatex(100%) rotate(45deg); } div::after { content: ''; width: 100%; height: 25%; background-color: #F3FFCF; position: absolute; top: 0; left: 0; transform: translatex(-100%) rotate(45deg); transition: all 1s 0.2s; } div:hover::after { transform: translatex(100%) rotate(45deg); } div:hover { border: 3px solid #000; }
4. Background Changing Text – Button Hover Effect
HTML
<body> <div></div> </body>
CSS
html { box-sizing: border-box; } *, *::before, *::after { box-sizing: inherit; } body { padding: 0; margin: 0; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } div { padding: 40px 120px; font-size: 38px; color: #fff; background-color: blue; border: 2px solid #000; overflow: hidden; cursor: pointer; } div::before { content: 'Hover One'; width: 100%; height: 100%; position: absolute; top: 0; left: 0; display: flex; justify-content: center; align-items: center; transition: all 0.8s; } div:hover { background-color: orange; } div:hover::before { transform: translateY(-100%); } div::after { content: 'Hover Two'; width: 100%; height: 100%; position: absolute; top: 0; left: 0; display: flex; justify-content: center; align-items: center; transform: translateY(100%); transition: all 0.8s; } div:hover::after { transform: translateY(0); }
7. Wave Background on Hover
HTML
<body> <div>Hover Over</div> </body>
CSS
html { box-sizing: border-box; } *, *::after, *::before { box-sizing: inherit; } body { font-family: Arial, Helvetica, sans-serif; padding: 0; margin: 0; height: 100vh; display: flex; justify-content: center; align-items: center; } div { font-size: 78px; padding: 40px 80px; border: 2px solid #000; position: relative; cursor: pointer; } div::before { content: ''; width: 100%; height: 100%; position: absolute; bottom: 0; left: 0; z-index: -1; } div:hover::before { animation: wave 4s ease-in-out infinite; } @keyframes wave { 0% { background-color: #009FFD; clip-path: polygon(0% 42%, 15% 46%, 35% 58%, 57% 61%, 76% 55%, 89% 48%, 100% 42%, 100% 100%, 0% 100%); } 50% { background-color: #009FFD; clip-path: polygon(0% 48%, 18% 58%, 38% 55%, 61% 45%, 76% 49%, 89% 58%, 100% 58%, 100% 100%, 0% 100%); } 100% { background-color: #009FFD; clip-path: polygon(0% 42%, 15% 46%, 35% 58%, 57% 61%, 76% 55%, 89% 48%, 100% 42%, 100% 100%, 0% 100%); } }