首页 / CSS 入门教程 / 传统布局

CSS 入门教程

传统布局

本教程共 44 篇 · 第 29 篇 · 更新于 2026-07-29 · 约 10 分钟阅读

布局浮动布局两栏布局三栏布局导航菜单

29. 传统布局

本节目标:掌握基于 float 的传统页面布局方法,实现两栏、三栏和常见导航菜单布局。

布局的基本思路

传统布局主要依赖 float 和 position。核心思路是:

  1. 用 float 让块级元素横向排列
  2. 用 width 控制每列的宽度
  3. 用 clearfix 解决父元素高度塌陷
  4. 用 box-sizing: border-box 让宽度计算更直观
/* 全局设置:让 padding 和 border 不撑大容器 */
* {
    box-sizing: border-box;
}

box-sizing: border-box 是布局的基础。不设这个,加了 padding 就会超出宽度导致换行。

两栏布局

两栏布局是最常见的布局,一栏窄一栏宽。

左窄右宽

.sidebar {
    float: left;
    width: 25%;
    padding: 15px;
}

.main {
    float: left;
    width: 75%;
    padding: 15px;
}
<div class="container clearfix">
    <div class="sidebar">侧边栏</div>
    <div class="main">主内容区</div>
</div>
.clearfix::after {
    content: "";
    display: table;
    clear: both;
}

左宽右窄

.main {
    float: left;
    width: 70%;
}
.sidebar {
    float: left;
    width: 30%;
}

两栏宽度之和必须等于 100%,否则会换行或留空隙。

三栏布局

三栏布局中间是主内容,两侧是侧边栏。

.column {
    float: left;
    padding: 15px;
}

.column.side {
    width: 25%;
}

.column.middle {
    width: 50%;
}
<div class="container clearfix">
    <div class="column side">左侧栏</div>
    <div class="column middle">中间主内容</div>
    <div class="column side">右侧栏</div>
</div>

水平导航菜单

用 float 把列表项横向排列,是最经典的导航菜单做法。

.nav {
    list-style: none;     /* 去掉列表符号 */
    margin: 0;
    padding: 0;
    overflow: hidden;     /* 清除浮动 */
    background: #333;
}

.nav li {
    float: left;          /* 横向排列 */
}

.nav li a {
    display: block;       /* 让整块区域可点击 */
    color: white;
    padding: 14px 16px;
    text-decoration: none;
}

.nav li a:hover {
    background: #555;
}
<ul class="nav">
    <li><a href="#">首页</a></li>
    <li><a href="#">新闻</a></li>
    <li><a href="#">关于</a></li>
    <li><a href="#">联系</a></li>
</ul>

导航项的 a 标签要设 display: block,否则 padding 在行内元素上表现不一致。

完整页面布局

把页眉、导航、内容区、页脚组合起来,就是一个完整的页面框架。

* {
    box-sizing: border-box;
}

/* 页眉 */
.header {
    background: #f1f1f1;
    padding: 20px;
    text-align: center;
}

/* 导航 */
.nav {
    overflow: hidden;
    background: #333;
}

.nav a {
    float: left;
    display: block;
    color: white;
    padding: 14px 16px;
    text-decoration: none;
}

.nav a:hover {
    background: #555;
}

/* 三列 */
.column {
    float: left;
    padding: 15px;
}

.column.side {
    width: 25%;
}

.column.middle {
    width: 50%;
}

/* 清除浮动 */
.row::after {
    content: "";
    display: table;
    clear: both;
}

/* 页脚 */
.footer {
    background: #f1f1f1;
    padding: 10px;
    text-align: center;
}
<div class="header">
    <h1>网站标题</h1>
</div>

<div class="nav">
    <a href="#">首页</a>
    <a href="#">关于</a>
    <a href="#">联系</a>
</div>

<div class="row">
    <div class="column side">
        <h3>左侧栏</h3>
        <p>侧边栏内容</p>
    </div>
    <div class="column middle">
        <h2>主内容</h2>
        <p>这里是页面的主要内容区域。</p>
    </div>
    <div class="column side">
        <h3>右侧栏</h3>
        <p>侧边栏内容</p>
    </div>
</div>

<div class="footer">
    <p>页脚信息</p>
</div>

响应式适配

传统布局也可以做响应式,用媒体查询在小屏幕下让列堆叠。

/* 默认:三列并排 */
.column {
    float: left;
    width: 33.33%;
}

/* 小屏幕:列堆叠 */
@media screen and (max-width: 600px) {
    .column {
        width: 100%;
    }
}
/* 导航在小屏幕下也堆叠 */
@media screen and (max-width: 600px) {
    .nav a {
        float: none;
        width: 100%;
        text-align: center;
    }
}

媒体查询是响应式的基础。max-width: 600px 表示屏幕宽度小于等于 600px 时生效。

传统布局的局限

浮动布局虽然经典,但有一些天然缺陷:

  1. 高度不一致:浮动元素高度不同时,排列会错位
  2. 垂直居中困难:传统方式很难实现垂直居中
  3. 代码冗余:需要 clearfix、box-sizing 等额外处理
  4. 顺序固定:HTML 顺序决定了显示顺序,难以调整
/* 高度不一致导致的问题 */
.box {
    float: left;
    width: 33.33%;
    /* 高度由内容决定,参差不齐 */
}

现代项目推荐用 Flexbox 或 Grid 做布局,它们解决了浮动布局的诸多痛点。

inline-block 替代方案

除了 float,还可以用 inline-block 实现横向排列。

.column {
    display: inline-block;
    width: 30%;
    vertical-align: top;    /* 顶部对齐 */
}

inline-block 的优点:

  • 不需要清除浮动
  • 元素高度自然撑开父元素
  • 可以用 vertical-align 控制垂直对齐

缺点:

  • 元素之间会有空白间隙(HTML 换行导致)
  • 需要处理间隙问题
/* 消除 inline-block 间隙 */
.container {
    font-size: 0;           /* 父级设0 */
}

.column {
    display: inline-block;
    width: 30%;
    font-size: 16px;        /* 子级恢复 */
}

传统布局是理解 CSS 布局体系的基础。虽然现代项目多用 Flexbox 和 Grid,但掌握浮动布局能帮你更好地理解 CSS 的演进。

小结

  • 传统布局主要依赖 float 和 position
  • 两栏/三栏布局用 float + width 实现,宽度之和要等于 100%
  • box-sizing: border-box 让宽度计算更直观,是布局的基础
  • clearfix 解决父元素高度塌陷,伪元素法最推荐
  • 媒体查询实现响应式,max-width 判断小屏幕
  • inline-block 可替代 float,但需要处理元素间隙