返回博客列表

现代 CSS 布局技巧

博主
·
CSS布局响应式

CSS 在过去几年中经历了巨大的发展,现代 CSS 提供了许多强大的布局工具。

CSS Grid 进阶

子网格 (Subgrid)

子网格允许子元素使用父网格的轨道:

.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
}
 
.grid-item {
  display: grid;
  grid-template-columns: subgrid;
}

网格区域命名

使用命名区域创建直观的布局:

.layout {
  display: grid;
  grid-template-areas:
    "header header header"
    "sidebar main main"
    "footer footer footer";
}
 
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }

Flexbox 实用技巧

自动换行布局

.flex-wrap {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}
 
.flex-wrap > * {
  flex: 1 1 300px;
}

居中技巧

.center {
  display: flex;
  justify-content: center;
  align-items: center;
}

Container Queries

容器查询是响应式设计的新方式:

.card-container {
  container-type: inline-size;
}
 
@container (min-width: 400px) {
  .card {
    display: flex;
    gap: 1rem;
  }
}

现代选择器

:has() 伪类

/* 选择包含图片的卡片 */
.card:has(img) {
  border: 2px solid blue;
}
 
/* 选择被悬停项的兄弟元素 */
.list-item:has(~ .list-item:hover) {
  opacity: 0.5;
}

嵌套规则

.card {
  padding: 1rem;
  
  &:hover {
    box-shadow: 0 4px 8px rgba(0,0,0,0.1);
  }
  
  & .title {
    font-size: 1.25rem;
  }
}

实用建议

  1. 移动优先:始终从移动端布局开始
  2. 使用相对单位:rem、em、vh/vw 等
  3. 测试真实设备:模拟器无法完全替代真机测试

总结

现代 CSS 让布局变得更加简单和强大,值得投入时间学习这些新特性。