CSS面试:三栏布局

107 阅读3分钟

三栏布局是一种常见的网页布局模式,通常包括一个左侧栏、一个右侧栏和一个中间内容区域。实现这种布局的方式有很多种,以下是几种常用的三栏布局实现方案:

1. 浮动布局

使用 float 是较为传统的三栏布局方法。

<div class="container">
    <div class="left">左侧栏</div>
    <div class="center">中间内容</div>
    <div class="right">右侧栏</div>
</div>
.container {
    overflow: hidden; /* 清除浮动 */
}

.left {
    float: left;
    width: 20%;
    background-color: lightblue;
}

.right {
    float: right;
    width: 20%;
    background-color: lightcoral;
}

.center {
    margin-left: 20%;
    margin-right: 20%;
    background-color: lightgreen;
}

特点:

  • leftright 使用 float 浮动到两边。
  • center 使用 margin 来留出左右两侧的空间。

2. Flexbox布局

使用 flexbox 可以非常轻松地实现三栏布局,并且更具灵活性。

<div class="container">
    <div class="left">左侧栏</div>
    <div class="center">中间内容</div>
    <div class="right">右侧栏</div>
</div>
.container {
    display: flex;
}

.left {
    width: 20%;
    background-color: lightblue;
}

.center {
    flex: 1;
    background-color: lightgreen;
}

.right {
    width: 20%;
    background-color: lightcoral;
}

特点:

  • flexbox 可以轻松控制布局比例,center 区域通过 flex: 1 伸展占据剩余空间。
  • 更容易实现响应式设计。

3. CSS Grid布局

grid 布局是现代CSS中的强大工具,能够非常灵活地实现各种布局。

<div class="container">
    <div class="left">左侧栏</div>
    <div class="center">中间内容</div>
    <div class="right">右侧栏</div>
</div>
.container {
    display: grid;
    grid-template-columns: 20% 1fr 20%;
    height: 100vh;
}

.left {
    background-color: lightblue;
}

.center {
    background-color: lightgreen;
}

.right {
    background-color: lightcoral;
}

特点:

  • grid 提供了强大的网格布局控制,grid-template-columns 定义了三栏的宽度。
  • 1fr 表示中间内容区域占据剩余的空间。

4. 双飞翼布局

双飞翼布局是一种经典的三栏布局方案,旨在确保中间内容区域优先显示。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Holy Grail Layout</title>
    <style>
        .container {
            padding-left: 200px;
            padding-right: 200px;
        }
        
        .center {
            float: left;
            width: 100%;
        }
        
        .left {
            float: left;
            width: 200px;
            margin-left: -100%;
            position: relative;
            left: -200px;
            background-color: #f4f4f4;
        }
        
        .right {
            float: left;
            width: 200px;
            margin-left: -200px;
            position: relative;
            right: -200px;
            background-color: #f4f4f4;
        }
        
        .center-content {
            background-color: #ddd;
            height: 200px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="center">
            <div class="center-content">中间内容</div>
        </div>
        <div class="left">左侧栏</div>
        <div class="right">右侧栏</div>
    </div>
</body>
</html>

特点:

  • 中间内容区域优先加载,左侧和右侧栏通过负 margin 来定位。
  • 使用 margin 来控制中间内容区域的宽度。

5. 圣杯布局

圣杯布局与双飞翼布局类似,目标也是优先展示中间内容区域,但实现方式稍有不同。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Holy Grail Layout</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="container">
        <div class="center">中间内容</div>
        <div class="left">左侧栏</div>
        <div class="right">右侧栏</div>
    </div>
</body>
</html>
/* 圣杯布局的容器样式 */
.container {
    padding-left: 200px;  /* 左侧栏宽度 */
    padding-right: 200px; /* 右侧栏宽度 */
    overflow: hidden;     /* 清除浮动 */
}

/* 中间栏样式 */
.center {
    float: left;
    width: 100%;
    background-color: #ddd; /* 用于展示效果 */
}

/* 左侧栏样式 */
.left {
    float: left;
    width: 200px;        /* 左侧栏宽度 */
    margin-left: -100%;  /* 将左侧栏移到中间栏的左侧 */
    position: relative;
    left: -200px;        /* 将左侧栏移到正确的位置 */
    background-color: #f4f4f4; /* 用于展示效果 */
}

/* 右侧栏样式 */
.right {
    float: left;
    width: 200px;         /* 右侧栏宽度 */
    margin-left: -200px;  /* 将右侧栏移到中间栏的左侧 */
    position: relative;
    right: -200px;        /* 将右侧栏移到正确的位置 */
    background-color: #f4f4f4; /* 用于展示效果 */
}

特点:

  • 中间内容区域优先显示,并且左右侧栏通过 positionleft/right 进行精确定位。
  • 圣杯布局和双飞翼布局都适用于经典的三栏布局场景,但Flexbox和Grid布局更现代、更灵活。

圣杯布局 vs 双飞翼布局

  • 唯一区别在于center-content

小结

  • 传统布局:浮动布局、圣杯布局和双飞翼布局是经典的三栏布局方式,适用于需要兼容老旧浏览器的场景。
  • 现代布局:Flexbox和Grid布局是推荐使用的现代方法,代码简洁且易于实现响应式设计。

根据项目需求和浏览器支持情况,可以选择合适的布局方式。