CSS现代布局实战:构建自适应智能网格画廊系统
一、系统架构设计
容器查询 + 智能网格 + 渐进增强 + 交互动画
二、核心功能实现
1. 智能网格布局
.gallery {
--min-column-width: 300px;
--gap: 1rem;
display: grid;
grid-template-columns: repeat(
auto-fill,
minmax(min(var(--min-column-width), 100%), 1fr)
);
gap: var(--gap);
padding: var(--gap);
@container (width = 1200px) {
grid-template-columns: repeat(3, 1fr);
}
}
.gallery-item {
aspect-ratio: 16/9;
overflow: hidden;
transition: transform 0.3s ease;
&:hover {
transform: scale(1.03);
z-index: 1;
}
}
2. 自适应图片处理
.gallery-image {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s ease;
.gallery-item:hover & {
transform: scale(1.1);
}
}
/* 响应式图片处理 */
3. 高级滤镜效果
.gallery-item {
position: relative;
&::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(
to top,
rgba(0,0,0,0.7) 0%,
transparent 50%
);
opacity: 0;
transition: opacity 0.3s ease;
}
&:hover::after {
opacity: 1;
}
}
.gallery-caption {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 1rem;
color: white;
transform: translateY(100%);
transition: transform 0.3s ease;
z-index: 2;
.gallery-item:hover & {
transform: translateY(0);
}
}
三、高级功能实现
1. 容器查询布局
.gallery-container {
container-type: inline-size;
container-name: gallery;
}
/* 根据容器宽度调整布局 */
@container gallery (width = 500px) and (width < 800px) {
.gallery {
--min-column-width: 250px;
}
}
2. 滚动驱动动画
.gallery-item {
view-timeline: --item;
animation: fade-in linear;
animation-timeline: --item;
animation-range: entry 25% cover 50%;
}
@keyframes fade-in {
from { opacity: 0; transform: translateY(50px); }
to { opacity: 1; transform: translateY(0); }
}
四、实战案例演示
1. 完整HTML结构
<div class="gallery-container">
<div class="gallery">
<div class="gallery-item">
<picture>
<source media="(min-width: 1200px)" srcset="photo1-large.jpg">
<img src="photo1-small.jpg" alt="Photo 1" class="gallery-image">
</picture>
<div class="gallery-caption">美丽的风景照片</div>
</div>
<!-- 更多画廊项目 -->
</div>
</div>
2. 性能优化方案
- CSS will-change:优化动画性能
- 内容可见性:content-visibility加速渲染
- 图片懒加载:loading=”lazy”属性
- CSS变量:减少重复计算

