<section>
<div class="grid__container">
<div class="grid__item">
<img src="https://picsum.photos/400/300?random=1" alt="">
</div>
<div class="grid__item">
<img src="https://picsum.photos/400/300?random=2" alt="">
</div>
<div class="grid__item">
<img src="https://picsum.photos/400/300?random=3" alt="">
</div>
<div class="grid__item">
<img src="https://picsum.photos/400/300?random=4" alt="">
</div>
<div class="grid__item">
<img src="https://picsum.photos/400/300?random=5" alt="">
</div>
</div>
</section>
<form action="">
<span>grid-auto-columns:</span>
<label for="case0">
<input type="radio" name="grid-auto-columns" value="auto" id="case0" checked />
auto
</label>
<label for="case1">
<input type="radio" name="grid-auto-columns" value="1fr 1fr 1fr" id="case1" />
1fr 1fr 1fr
</label>
<label for="case2">
<input type="radio" name="grid-auto-columns" value="repeat(3, 1fr)" id="case2" />
repeat(3, 1fr)
</label>
<label for="case3">
<input type="radio" name="grid-auto-columns" value="1fr fit-content(200px) 1fr" id="case3" />
1fr fit-content(200px) 1fr
</label>
<label for="case4">
<input type="radio" name="grid-auto-columns" value="1fr min-content max-content" id="case4" />
1fr min-content max-content
</label>
<label for="case5">
<input type="radio" name="grid-auto-columns" value="30% minmax(100px, 50%)" id="case5" />
30% minmax(100px, 50%)
</label>
<label for="case6">
<input type="radio" name="grid-auto-columns" value="min(60px, 100px) max(100px 150px)" id="case6" />
min(60px, 100px) max(100px 150px)
</label>
<label for="case7">
<input type="radio" name="grid-auto-columns" value="auto clamp(60px, 30vw, 100px)" id="case7" />
auto clamp(60px, 30vw, 100px)
</label>
<label for="case8">
<input type="radio" name="grid-auto-columns" value="auto fit-content clamp(60px, 30vw, 100px)" id="case8" />
auto fit-content clamp(60px, 30vw, 100px)
</label>
</form>
@import url("https://fonts.googleapis.com/css2?family=Exo:wght@600&display=swap");
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 100vw;
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
gap: 20px;
font-family: "Exo", Arial, sans-serif;
background-color: #f7f7f7;
padding: 20px;
}
section {
/* margin: 0 auto; */
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
box-shadow: 0 0 0 6px rgb(0 0 0 / 13%);
border-radius: 3px;
gap: 20px;
}
img {
aspect-ratio: 16 / 9;
max-width: 100%;
filter: drop-shadow(1px 1px 2px rgb(255 255 255 / 0.5))
drop-shadow(-1px -1px 2px rgb(255 255 255 / 0.5));
mix-blend-mode: luminosity;
border-radius: 4px;
}
.grid__container {
box-shadow: 0 0 0 1px #f36;
position: relative;
}
.grid__item {
display: flex;
justify-content: center;
align-items: center;
padding: 5px;
background-color: #f7f7f7;
}
.grid__item:nth-child(1) {
background-color: #f1c2c6;
}
.grid__item:nth-child(2) {
background-color: #dac2f1;
}
.grid__item:nth-child(3) {
background-color: #ccf1c2;
}
.grid__item:nth-child(4) {
background-color: #c2e9f1;
}
.grid__item:nth-child(5) {
background-color: #f1ebc2;
}
.grid__item:nth-child(6) {
background-color: #09f;
}
.grid__item:nth-child(7) {
background-color: #ff5722;
}
.grid__item:nth-child(8) {
background-color: #8bc34a;
}
.grid__item:nth-child(9) {
background-color: #f66803;
}
.grid__item:nth-child(10) {
background-color: #0d815f;
}
.grid__item:nth-child(11) {
background-color: #28d1c2;
}
.grid__item:nth-child(12) {
background-color: #4a28d1;
}
h3 {
margin: 20px auto;
}
form {
display: flex;
flex-direction: column;
gap: 10px;
}
.grid__container {
display: grid;
--grid-auto-columns: auto;
grid-auto-columns: var(--grid-auto-columns);
grid-auto-rows: minmax(100px, auto);
gap: 10px;
}
.grid__item:nth-child(1) {
grid-column: -5;
}
.grid__item:nth-child(2) {
grid-row: -3 / span 2;
grid-column: span 2;
}
.grid__item:nth-child(3) {
grid-area: -3 / -5 / 1 / -2;
}
.grid__item:nth-child(4) {
grid-column: span 2;
}
.grid__item:nth-child(5) {
grid-column: span 2;
}
const container = document.querySelector(".grid__container");
const radios = document.querySelectorAll('input[type="radio"]');
radios.forEach((radio, index) => {
radio.addEventListener("click", (etv) => {
container.style.setProperty("--grid-auto-columns", etv.target.value);
});
});
View Compiled
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.