پیشنمایش زنده
کد HTML
<div class="cbx cbx--elastic">
<input id="cbx-elastic" class="cbx__input" type="checkbox" />
<label class="cbx__label" for="cbx-elastic">
<span class="cbx__box" aria-hidden="true">
<svg class="cbx__svg" viewBox="0 0 24 24" aria-hidden="true">
<path class="cbx__path" d="M6 12l4 4 8-8"></path>
</svg>
</span>
<span class="cbx__text">I agree</span>
</label>
</div>
کد CSS
@property --p {
syntax: "<number>";
initial-value: 0;
inherits: false;
}
@property --fill {
syntax: "<number>";
initial-value: 0;
inherits: false;
}
@property --glow {
syntax: "<number>";
initial-value: 0;
inherits: false;
}
.cbx {
--saffron: #ff9933;
--orange: #ff4500;
--ink: #fff;
--size: 42px;
--bw: 2.5px;
--radius: 12px;
--stroke: 3px;
display: inline-block;
}
.cbx__input {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
border: 0;
padding: 0;
clip: rect(0 0 0 0);
overflow: hidden;
}
.cbx__label {
display: inline-grid;
grid-auto-flow: column;
align-items: center;
gap: 0.85rem;
cursor: pointer;
user-select: none;
-webkit-tap-highlight-color: transparent;
}
.cbx__text {
font:
700 1.2rem/1 system-ui,
Segoe UI,
Roboto,
sans-serif;
letter-spacing: 0.02em;
padding: 10px 1px;
background: linear-gradient(90deg, var(--saffron), var(--orange));
-webkit-background-clip: text;
background-clip: text;
color: transparent;
opacity: 0.9;
transition:
opacity 0.25s ease,
transform 0.2s ease;
}
.cbx__box {
position: relative;
width: var(--size);
height: var(--size);
border-radius: var(--radius);
border: var(--bw) solid color-mix(in oklab, var(--saffron), transparent 55%);
background: linear-gradient(
180deg,
rgba(255, 255, 255, 0.06),
rgba(0, 0, 0, 0.06)
)
padding-box;
box-shadow:
inset 0 1px 2px rgba(255, 255, 255, 0.1),
inset 0 -1px 2px rgba(0, 0, 0, 0.25),
0 0 calc(10px * var(--glow)) calc(2px * var(--glow))
color-mix(in oklab, var(--saffron), transparent 78%);
transition:
border-color 0.25s ease,
box-shadow 0.25s ease;
overflow: hidden;
--p: 0;
--fill: 0;
--glow: 0;
}
.cbx__box::before {
content: "";
position: absolute;
inset: calc(var(--bw) * -1);
padding: var(--bw);
border-radius: inherit;
background: conic-gradient(
from -90deg,
color-mix(in oklab, var(--saffron), white 12%) 0 calc(var(--p) * 1turn),
transparent 0 1turn
);
mask:
linear-gradient(#000 0 0) content-box,
linear-gradient(#000 0 0) border-box;
-webkit-mask:
linear-gradient(#000 0 0) content-box,
linear-gradient(#000 0 0) border-box;
-webkit-mask-composite: xor;
mask-composite: exclude;
opacity: 0.28;
pointer-events: none;
}
.cbx__box::after {
content: "";
position: absolute;
inset: 0;
border-radius: inherit;
background: linear-gradient(90deg, var(--orange), var(--saffron));
transform-origin: left center;
transform: scaleX(var(--fill));
opacity: 0.18;
pointer-events: none;
}
.cbx__svg {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
}
.cbx__path {
fill: none;
stroke: #fff;
stroke-width: var(--stroke);
stroke-linecap: round;
stroke-linejoin: round;
stroke-dasharray: 40;
stroke-dashoffset: 40;
transition:
stroke-dashoffset 0.28s cubic-bezier(0.2, 0.8, 0.3, 1) 0.06s,
filter 0.2s;
filter: drop-shadow(
0 0 0.2rem color-mix(in oklab, var(--saffron), white 20%)
);
}
.cbx__input:focus-visible + .cbx__label .cbx__box {
border-color: color-mix(in oklab, var(--saffron), white 16%);
box-shadow:
0 0 0 0.18rem color-mix(in oklab, var(--saffron), transparent 72%),
0 0 0 0.38rem color-mix(in oklab, var(--orange), transparent 86%);
}
.cbx__input:checked + .cbx__label .cbx__box {
--p: 1;
--fill: 1;
--glow: 1;
}
.cbx__input:checked + .cbx__label .cbx__path {
stroke-dashoffset: 0;
}
.cbx__input:checked + .cbx__label .cbx__text {
opacity: 1;
transform: translateY(-1px);
}