Boutons
.btn-glitch{
–bg: #ff1a00;
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
width: 320px;
height: 90px;
background: var(–bg);
color: #fff;
text-decoration: none;
font-family: « Red Hat Display », sans-serif;
font-size: 3rem;
font-weight: 900;
line-height: 1;
overflow: hidden;
transition:
clip-path .45s cubic-bezier(.22,1,.36,1),
transform .3s ease;
/* Forme cassée */
clip-path: polygon(
0 0,
8% 0,
8% 6%,
22% 6%,
22% 0,
38% 0,
38% 6%,
52% 6%,
52% 0,
68% 0,
68% 6%,
82% 6%,
82% 0,
100% 0,
100% 100%,
92% 100%,
92% 94%,
78% 94%,
78% 100%,
62% 100%,
62% 94%,
48% 94%,
48% 100%,
32% 100%,
32% 94%,
18% 94%,
18% 100%,
0 100%
);
}
/* Hover = rectangle propre */
.btn-glitch:hover{
clip-path: polygon(
0 0,
100% 0,
100% 100%,
0 100%
);
}
.btn-glitch span{
position: relative;
z-index: 2;
}
/* léger mouvement smooth */
.btn-glitch:hover{
transform: translateY(-2px);
}
.btn-glitch{
filter: drop-shadow(0 0 0 rgba(0,0,0,0));
}
.btn-glitch:hover{
transition:
clip-path .55s cubic-bezier(.19,1,.22,1),
transform .3s ease;
}
Participer
.btn-glitch{
–bg: #ff1a00;
–gap: 10px; /* écart des bandes */
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
width: 320px;
height: 90px;
background: var(–bg);
color: #fff;
text-decoration: none;
font-family: « Red Hat Display », sans-serif;
font-size: 3rem;
font-weight: 900;
line-height: 1;
overflow: hidden;
/* animation beaucoup plus smooth */
transition:
clip-path .7s cubic-bezier(.77,0,.175,1),
transform .45s cubic-bezier(.77,0,.175,1);
will-change: clip-path, transform;
/*
VERSION « cassée »
Les bandes sont plus éloignées
*/
clip-path: polygon(
0 0,
7% 0,
7% var(–gap),
21% var(–gap),
21% 0,
39% 0,
39% var(–gap),
53% var(–gap),
53% 0,
71% 0,
71% var(–gap),
85% var(–gap),
85% 0,
100% 0,
100% 100%,
93% 100%,
93% calc(100% – var(–gap)),
79% calc(100% – var(–gap)),
79% 100%,
61% 100%,
61% calc(100% – var(–gap)),
47% calc(100% – var(–gap)),
47% 100%,
29% 100%,
29% calc(100% – var(–gap)),
15% calc(100% – var(–gap)),
15% 100%,
0 100%
);
}
/*
Hover = tout se rejoint
avec sensation « snap »
comme le switch Nintendo
*/
.btn-glitch:hover{
clip-path: polygon(
0 0,
100% 0,
100% 100%,
0 100%
);
transform: translateY(-2px);
}
.btn-glitch span{
position: relative;
z-index: 2;
transition:
transform .7s cubic-bezier(.77,0,.175,1),
letter-spacing .7s cubic-bezier(.77,0,.175,1);
}
/* micro compression du texte pendant le rapprochement */
.btn-glitch:hover span{
transform: scaleX(0.985);
letter-spacing: -0.5px;
}
Participer
.btn-slice{
–bg: #ff1a00;
–offset: 10px;
–speed: .65s;
–ease: cubic-bezier(.77,0,.175,1);
position: relative;
display: flex;
align-items: center;
justify-content: center;
width: 340px;
height: 90px;
overflow: hidden;
text-decoration: none;
font-family: « Red Hat Display », sans-serif;
font-size: 3rem;
font-weight: 900;
color: #fff;
}
/* texte */
.btn-slice span{
position: relative;
z-index: 5;
transition:
transform var(–speed) var(–ease),
letter-spacing var(–speed) var(–ease);
}
/* bandes */
.slice{
position: absolute;
inset: 0;
background: var(–bg);
transition:
transform var(–speed) var(–ease);
will-change: transform;
}
/*
Chaque bande = tranche verticale
comme un bouton découpé
*/
.s1{
clip-path: polygon(0 0, 25% 0, 25% 100%, 0 100%);
}
.s2{
clip-path: polygon(25% 0, 50% 0, 50% 100%, 25% 100%);
}
.s3{
clip-path: polygon(50% 0, 75% 0, 75% 100%, 50% 100%);
}
.s4{
clip-path: polygon(75% 0, 100% 0, 100% 100%, 75% 100%);
}
/* ÉTAT NORMAL */
/* bandes hautes montées */
.top.s1{ transform: translateY(calc(var(–offset) * -1)); }
.top.s2{ transform: translateY(var(–offset)); }
.top.s3{ transform: translateY(calc(var(–offset) * -1)); }
.top.s4{ transform: translateY(var(–offset)); }
/* bandes basses descendues */
.bottom.s1{ transform: translateY(var(–offset)); }
.bottom.s2{ transform: translateY(calc(var(–offset) * -1)); }
.bottom.s3{ transform: translateY(var(–offset)); }
.bottom.s4{ transform: translateY(calc(var(–offset) * -1)); }
/* mélange visuel */
.top{
z-index: 1;
}
.bottom{
z-index: 2;
}
/* HOVER = tout se rejoint */
.btn-slice:hover .slice{
transform: translateY(0);
}
/* léger effet premium */
.btn-slice:hover span{
transform: scaleX(.985);
letter-spacing: -0.5px;
}
Participer
.btn-slice{
–bg: #ff1a00;
–offset: 10px;
–speed: .7s;
–ease: cubic-bezier(.77,0,.175,1);
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
width: 340px;
height: 90px;
overflow: hidden;
text-decoration: none;
background: var(–bg);
font-family: « Red Hat Display », sans-serif;
font-size: 3rem;
font-weight: 900;
color: #fff;
/*
Forme « cassée »
*/
clip-path: polygon(
0% 0%,
25% var(–offset),
25% calc(100% – var(–offset)),
50% 100%,
50% var(–offset),
75% 0,
75% calc(100% – var(–offset)),
100% 100%,
100% 0%
);
transition:
clip-path var(–speed) var(–ease),
transform .4s ease;
will-change: clip-path;
}
/*
Hover = les bandes se rejoignent
en rectangle parfait
*/
.btn-slice:hover{
clip-path: polygon(
0 0,
100% 0,
100% 100%,
0 100%
);
transform: translateY(-2px);
}
/* texte */
.btn-slice span{
position: relative;
z-index: 2;
transition:
transform var(–speed) var(–ease),
letter-spacing var(–speed) var(–ease);
}
.btn-slice:hover span{
transform: scaleX(.985);
letter-spacing: -0.5px;
}
Participer
section {
display: grid;
align-items: center;
justify-items: center;
width: 500px;
height: 500px;
overflow: hidden;
cursor: pointer;
border-radius: 4px;
}
section > * {
width: inherit;
height: inherit;
grid-area: 1 / 1;
}
section > div {
transform: rotate(90deg);
}
section > div:nth-child(1) {
background: linear-gradient(to right, red, orange);
}
section > div:nth-child(2) {
–gt: linear-gradient(black, black);
–n: 100px;
–h: calc(var(–n) – 5px);
background:
var(–gt) top right,
var(–gt) top var(–n) right,
var(–gt) top calc(var(–n) * 2) right,
var(–gt) top calc(var(–n) * 3) right,
var(–gt) top calc(var(–n) * 4) right,
beige;
background-size: 60% var(–h), 90% var(–h), 70% var(–h), 40% var(–h), 10% var(–h);
mix-blend-mode: screen;
background-repeat: no-repeat;
transition: background-size 1s;
}
section:hover > div:nth-child(2) {
background-size: 100% var(–h);
transition: background-size 1s;
}
strong {
height: max-content;
text-align: center;
isolation: isolate;
font-family: ‘bungee shade’;
font-size: 95px;
color: maroon;
}
body {
display: grid;
align-items: center;
justify-items: center;
height: 100vh;
margin: 0;
user-select: none;
-moz-user-select: none;
-webkit-user-select: none;
}
@media (max-width:500px){
section {
width: 90vw;
transform: scale(.9);
}
strong{
font-size: calc(12px + 12vw);
}
}
Click Here for Survey
.btn-switch{
–bg:#ff1a00;
–offset:12px;
–speed:.75s;
–ease:cubic-bezier(.77,0,.175,1);
position:relative;
display:flex;
align-items:center;
justify-content:center;
width:340px;
height:90px;
overflow:hidden;
text-decoration:none;
font-family: »Red Hat Display »,sans-serif;
font-size:3rem;
font-weight:900;
color:#fff;
background:transparent;
}
/* TEXTE */
.btn-switch span{
position:relative;
z-index:10;
transition:
transform var(–speed) var(–ease),
letter-spacing var(–speed) var(–ease);
}
/*
========================
BANDES HAUTES
========================
*/
.btn-switch::before,
.btn-switch::after{
content: » »;
position:absolute;
inset:0;
background:var(–bg);
transition:transform var(–speed) var(–ease);
will-change:transform;
}
/*
Bandes impaires
*/
.btn-switch::before{
clip-path:polygon(
0 0,
25% 0,
25% 100%,
0 100%,
50% 0,
75% 0,
75% 100%,
50% 100%
);
transform:translateY(calc(var(–offset) * -1));
}
/*
Bandes paires
*/
.btn-switch::after{
clip-path:polygon(
25% 0,
50% 0,
50% 100%,
25% 100%,
75% 0,
100% 0,
100% 100%,
75% 100%
);
transform:translateY(var(–offset));
}
/*
========================
HOVER
========================
*/
.btn-switch:hover::before,
.btn-switch:hover::after{
transform:translateY(0);
}
.btn-switch:hover span{
transform:scaleX(.985);
letter-spacing:-0.5px;
}
Participer
.wp-block-button__link {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 14px 36px;
text-decoration: none;
color: #fff;
font-size: 15px;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
background: transparent;
border: none;
cursor: pointer;
z-index: 0;
overflow: hidden;
}
.wp-block-button__link .slice-bg {
position: absolute;
top: 0;
bottom: 0;
background: #111;
will-change: transform;
transition: transform 0.55s cubic-bezier(0.25, 1, 0.35, 1);
z-index: -1;
}
.wp-block-button__link:hover .slice-bg {
transform: translateY(0) !important;
}
(function(){
const btn = document.querySelector(‘.wp-block-button__link’);
const sliceWidth = 24;
const btnW = btn.offsetWidth;
const numSlices = Math.max(Math.round(btnW / sliceWidth), 1);
const actualW = btnW / numSlices;
const delays = […Array(numSlices).keys()];
for(let i = delays.length-1; i > 0; i–){
const j = Math.floor(Math.random()*(i+1));
[delays[i],delays[j]]=[delays[j],delays[i]];
}
for(let i = 0; i < numSlices; i++){
const div = document.createElement('div');
div.className = 'slice-bg';
div.style.left = (i * actualW) + 'px';
div.style.width = actualW + 'px';
div.style.transform = `translateY(${i % 2 === 0 ? '-10px' : '10px'})`;
div.style.transitionDelay = (delays[i] / numSlices * 0.18) + 's';
btn.appendChild(div);
}
})();
document.addEventListener(‘DOMContentLoaded’, function(){
(function(){
document.querySelectorAll(‘.wp-block-button__link’).forEach(function(btn){
const sliceWidth = 24;
const btnW = btn.offsetWidth;
const numSlices = Math.max(Math.round(btnW / sliceWidth), 1);
const actualW = btnW / numSlices;
const delays = […Array(numSlices).keys()];
for(let i = delays.length-1; i > 0; i–){
const j = Math.floor(Math.random()*(i+1));
[delays[i],delays[j]]=[delays[j],delays[i]];
}
for(let i = 0; i < numSlices; i++){
const div = document.createElement('div');
div.className = 'slice-bg';
div.style.left = (i * actualW) + 'px';
div.style.width = actualW + 'px';
div.style.transform = `translateY(${i % 2 === 0 ? '-10px' : '10px'})`;
div.style.transitionDelay = (delays[i] / numSlices * 0.18) + 's';
btn.appendChild(div);
}
});
})();
});
