| Author: | argyleink |
|---|---|
| Views Total: | 506 views |
| Official Page: | Go to website |
| Last Update: | January 12, 2024 |
| License: | MIT |
Preview:

Description:
This is a pure HTML/CSS accordion slider designed to showcase your images in a fancy way.
It uses CSS and HTML radio inputs to create a horizontal slider that collapses images initially. When you click on an image, it smoothly expands to full size with a flexible bounce effect.
How to use it:
1. Add images as backgrounds to the label element.
<fieldset>
<label style="--_img: url(h1.jpeg)">
<input type="radio" name="images" value="Image 1">
</label>
<label style="--_img: url(2.jpeg)">
<input type="radio" name="images" value="Image 2">
</label>
<label style="--_img: url(3.jpg)">
<input type="radio" name="images" value="Image 3" checked>
</label>
<label style="--_img: url(4.jpeg)">
<input type="radio" name="images" value="Image 4">
</label>
<label style="--_img: url(5.webp)">
<input type="radio" name="images" value="Image 5">
</label>
</fieldset>2. Import the following CSS snippets into your document.
/* uses Open Source CSS Variables for custom properties */
@import "https://unpkg.com/open-props" layer(design.system);
@layer demo {
fieldset {
grid-template-columns:
var(--col-1, 1fr)
var(--col-2, 1fr)
var(--col-3, 1fr)
var(--col-4, 1fr)
var(--col-5, 1fr)
;
@media (prefers-reduced-motion: no-preference) {
transition: grid-template-columns 2s var(--ease-spring-5);
}
&:has(label:nth-child(1) > input:checked) {
--col-1: 5fr;
--col-2: 3fr;
}
&:has(label:nth-child(2) > input:checked) {
--col-1: 2fr;
--col-2: 5fr;
--col-3: 2fr;
}
&:has(label:nth-child(3) > input:checked) {
--col-2: 2fr;
--col-3: 5fr;
--col-4: 2fr;
}
&:has(label:nth-child(4) > input:checked) {
--col-3: 2fr;
--col-4: 5fr;
--col-5: 2fr;
}
&:has(label:nth-child(5) > input:checked) {
--col-4: 3fr;
--col-5: 5fr;
}
> label {
background-image: var(--_img);
background-position: center;
background-size: auto 125%;
}
}
}
@layer demo.support {
html {
background: var(--gradient-9);
block-size: 100%;
}
body {
min-block-size: 100%;
display: grid;
place-content: center;
padding: var(--size-5);
gap: var(--size-5);
}
fieldset {
inline-size: 80vw;
display: grid;
grid-auto-flow: column;
grid-template-rows: 50vh;
gap: var(--size-3);
border: none;
> label {
cursor: pointer;
border-radius: var(--radius-4);
&:focus-within {
outline: 1px solid green;
outline-offset: 5px;
}
> input {
opacity: 0;
}
}
}
}






