css布局技巧与实践 | 豆包MarsCode AI刷题

80 阅读3分钟

一、浮动(Float)

概念

浮动是一种早期用于网页布局的技术,最初设计用于文字环绕图片的场景。通过设置 float: leftfloat: right,元素可以从正常文档流中脱离,浮动到父容器的一侧。

应用场景

  • 文字环绕图片:博客或文章页面,图片周围文字排布流畅。
  • 基本布局:早期用于实现简单的两栏或三栏布局。

实践

image.png

<div class="container">
  <div class="left" style="float: left; width: 50%;">左侧内容</div>
  <div class="right" style="float: right; width: 50%;">右侧内容</div>
</div>

需要注意的是,浮动元素可能影响后续文档流,因此常需要清除浮动:

.container::after {
  content: "";
  display: table;
  clear: both;
}

局限性

浮动过于依赖后续的清除操作,不够直观,难以应对复杂布局需求。


二、定位(Positioning)

概念

CSS 定位可以让元素在页面中精确放置,其关键属性包括 position: static, relative, absolute, 和 fixed

应用场景

  • 导航栏固定fixed 用于实现固定顶部或侧边栏。
  • 模态框布局absolute 实现模态框在页面中央定位。
  • 装饰元素relativeabsolute 配合,用于小图标、背景图等。

实践

<div class="modal" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);">
  模态框内容
</div>

三、弹性盒子(Flexbox)

概念

Flexbox 是 CSS3 引入的一种一维布局方式,适用于横向或纵向的灵活分配。其核心在于父容器属性(display: flex)和子元素的弹性设置。

应用场景

  • 导航栏布局:水平菜单项均匀分布。
  • 响应式设计:子元素根据屏幕宽度动态调整。
  • 垂直居中:轻松实现任意内容的居中。

实践

.container {
  display: flex;
  justify-content: center; /* 水平居中 */
  align-items: center;    /* 垂直居中 */
  height: 100vh;
}
<div class="container">
  <div>内容1</div>
  <div>内容2</div>
</div>

优点

  • 灵活控制排列方向和间距。
  • 简单易用,特别适合动态内容布局。

四、网格布局(Grid)

概念

Grid 布局是一种基于网格的二维布局系统,允许开发者通过定义行(rows)和列(columns)实现精确的页面设计。使用 display: grid 设置容器后,可以灵活地定义子元素的布局规则。

应用场景

  • 复杂页面布局:比如头部、导航栏、内容区、侧边栏、页脚的整体布局。
  • 图片画廊:图片自动排列,适应不同分辨率。
  • 数据表格:动态生成的表格布局,支持灵活调整行列。

实践

.container {
  display: grid;
  grid-template-rows: 100px 1fr 50px; /* 定义三行:头部、内容区、底部 */
  grid-template-columns: 200px 1fr;  /* 定义两列:侧边栏、主要内容 */
  gap: 10px;                         /* 行列之间的间距 */
  height: 100vh;
}

.header {
  grid-column: 1 / 3; /* 跨越两列 */
  grid-row: 1;        /* 定义在第一行 */
}

.sidebar {
  grid-column: 1;     /* 定义在第一列 */
  grid-row: 2;        /* 定义在第二行 */
}

.main {
  grid-column: 2;     /* 定义在第二列 */
  grid-row: 2;        /* 定义在第二行 */
}

.footer {
  grid-column: 1 / 3; /* 跨越两列 */
  grid-row: 3;        /* 定义在第三行 */
}
复制

HTML 结构:

<div class="container">
  <div class="header">头部</div>
  <div class="sidebar">侧边栏</div>
  <div class="main">主要内容</div>
  <div class="footer">底部</div>
</div>
复制

优点

  • 精准控制:通过定义行和列,适合复杂布局。
  • 响应式设计:结合 minmax() 和 fr 单位,轻松实现响应式设计。
  • 简化代码:复杂布局的代码可读性更高。