CSS现代布局实战:Grid与Flexbox高级应用技巧
一、CSS Grid高级布局模式
利用Grid实现复杂响应式布局:
.dashboard {
display: grid;
grid-template-columns: minmax(200px, 1fr) 3fr;
grid-template-rows: 80px 1fr 60px;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
height: 100vh;
gap: 1rem;
}
.header {
grid-area: header;
/* 粘性定位 */
position: sticky;
top: 0;
}
.sidebar {
grid-area: sidebar;
/* 自适应最小宽度 */
min-width: 0;
}
.main {
grid-area: main;
/* 内部滚动 */
overflow-y: auto;
}
.footer {
grid-area: footer;
}
@media (max-width: 768px) {
.dashboard {
grid-template-columns: 1fr;
grid-template-areas:
"header"
"main"
"footer";
}
.sidebar {
display: none;
}
}
核心特性:二维布局、命名区域、自适应间隙、媒体查询集成
二、Flexbox弹性布局技巧
1. 等高卡片布局
.card-container {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.card {
flex: 1 1 300px;
display: flex;
flex-direction: column;
min-width: 0; /* 防止内容溢出 */
}
.card-content {
flex: 1; /* 撑满剩余空间 */
padding: 1rem;
}
.card-footer {
margin-top: auto; /* 底部对齐 */
}
2. 响应式导航菜单
.navbar {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 1rem;
}
.logo {
margin-right: auto; /* 左侧固定 */
}
.menu {
display: flex;
gap: 1rem;
}
.menu-toggle {
display: none;
}
@media (max-width: 768px) {
.menu {
flex: 1 0 100%;
flex-direction: column;
display: none;
}
.menu-toggle {
display: block;
}
.menu.active {
display: flex;
}
}
三、性能优化关键点
1. 硬件加速动画
.animate-element {
transform: translateZ(0); /* 触发GPU加速 */
will-change: transform, opacity; /* 预先提示浏览器 */
transition: transform 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);
}
/* 关键帧动画优化 */
@keyframes slideIn {
from {
transform: translateX(100%);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
.optimized-animation {
animation: slideIn 0.5s forwards;
backface-visibility: hidden;
}
2. 高效选择器写法
/* 避免低效选择器 */
/* ❌ 低效 */
div.container ul li a {}
/* ✅ 高效 */
.nav-link {}
/* 使用BEM命名规范 */
.card {}
.card__header {}
.card__body--expanded {}
/* 属性选择器优化 */
[type="submit"] {
/* 比input[type="submit"]更高效 */
}
四、创意布局案例
1. 瀑布流布局实现
.masonry {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
grid-auto-rows: 10px; /* 基础行高 */
gap: 15px;
}
.masonry-item {
grid-row-end: span var(--row-span);
/* 通过JS计算--row-span */
break-inside: avoid; /* 防止内容断裂 */
}
/* 图片容器保持比例 */
.aspect-ratio-box {
position: relative;
padding-top: 75%; /* 4:3比例 */
}
.aspect-ratio-content {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
五、现代CSS特性应用
- CSS变量:全局主题色控制
- :is()/:where():简化选择器写法
- aspect-ratio:元素比例控制
- scroll-snap:精准滚动定位
- @container查询:容器响应式设计