A responsive CSS Grid layout that automatically adjusts the number of columns based on available space.
.responsive-grid {
/* CSS Custom Properties for easy customization */
--min-column-width: 300px;
--gap: 1.5rem;
--padding: 1rem;
display: grid;
grid-template-columns: repeat(
auto-fit,
minmax(var(--min-column-width), 1fr)
);
gap: var(--gap);
padding: var(--padding);
/* Ensure grid items don't overflow */
overflow: hidden;
}
.grid-item {
/* Maintain aspect ratio */
aspect-ratio: 16 / 9;
/* Styling */
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 12px;
padding: 1.5rem;
color: white;
/* Flexbox for content alignment */
display: flex;
flex-direction: column;
justify-content: space-between;
/* Smooth transitions */
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.grid-item:hover {
transform: translateY(-4px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
}
/* Responsive adjustments */
@media (max-width: 768px) {
.responsive-grid {
--min-column-width: 250px;
--gap: 1rem;
--padding: 0.5rem;
}
}
@media (max-width: 480px) {
.responsive-grid {
--min-column-width: 200px;
grid-template-columns: 1fr;
}
.grid-item {
aspect-ratio: 4 / 3;
}
}
/* Alternative: Card-based layout */
.card-grid {
--card-min-width: 280px;
--card-max-width: 400px;
display: grid;
grid-template-columns: repeat(
auto-fill,
minmax(var(--card-min-width), var(--card-max-width))
);
justify-content: center;
gap: 2rem;
padding: 2rem;
}
.card {
background: white;
border-radius: 16px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
overflow: hidden;
transition: all 0.3s ease;
}
.card:hover {
transform: scale(1.02);
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
}
No JavaScript required, pure CSS solution with excellent performance