前端页面经典布局方案总结

本文详细介绍了前端布局中的两种经典解决方案——圣杯布局和双飞翼布局,用于实现三列布局,两边固定宽度,中间自适应。通过HTML和CSS代码展示了两种布局的实现过程,并分析了其实现原理和关键点,强调了布局稳定性与响应式设计的重要性。此外,还提及了弹性布局、定位方式和网格布局作为实现此类布局的其他选项。
摘要由CSDN通过智能技术生成

1. 三列布局

1. 圣杯布局实现

1.1 效果图

三列布局,两边固定,中间自适应
在这里插入图片描述

1.2 实现代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>圣杯布局</title>
    <style>
        html,
        body {
            height: 100%;
            overflow: hidden;
        }

        .container {
            height: 100%;
            min-width: 200px;
            padding: 0 200px;
            background-color: gray;
        }

        .left,
        .right {
            width: 200px;
            min-height: 200px;
            background-color: lightblue;
        }

        .center {
            width: 100%;
            min-height: 400px;
            background-color: lightsalmon;
        }

        .left,
        .center,
        .right {
            float: left;
        }

        .left {
            margin-left: -100%;
            position: relative;
            left: -200px;
        }

        .right {
            margin-right: -200px;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="center">center</div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
</body>
</html>

1.3 实现分析

主要使用浮动实现

知识点:floatmagin-leftmargin-rightpaddingposition:relative

思路分析:

  1. 父容器.container设置左右内边距padding
  2. 父容器左内边距区域、content内容区域及右内边距区域分别对应三列布局的左边列、中间列和右边列
  3. 定义三个子元素分别表示左、中和右三列,将若是按上述代码结构定义,则将第二个子元素放到父容器的左内边距区域,将最后一个子元素放到右内边距区域,中间列元素定义宽度为100%自动占满父容器content区域,使用上述代码实现方式时,一定要注意中间列要设置做小宽度min-width为左边列子元素的宽度,否则浏览器窗口变小然后容器自适应宽度跟着变小时,左边列会因为所在父容器宽度不够而换行显示,而打乱布局
  4. 相对定位position:relative不脱离文档流,虽然使用相对定位的元素使用left等属性显示到其它地方去,但它在文档流中的位置不变

关键点:一定要设置父容器的最小宽度且其值不能小于左边列的往左偏移量,具体偏移方式使用margin-leftposition:relative实现。否则若父容器宽度不够,由于使用了浮动,左边列元素及其它后面的元素都会被挤到中间列元素下面,从而打乱布局

2. 双飞翼布局实现

2.1 效果图

三列布局,两边固定,中间自适应
在这里插入图片描述

2.2 实现代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>双飞翼布局</title>
    <style>
        html,
        body{
            height: 100%;
            min-width: 400px;
            overflow: scroll;
        }
        .container{
            background-color: lightgray;
            width: 100%;
            height: 100%;
        }
        .container .center{
            background-color: lightsalmon;
            margin: 0 200px;
            min-height: 400px;
        }
        .left,
        .right{
            background-color: lightskyblue;
            width: 200px;
            min-height: 200px;
        }
        .container,
        .left,
        .right{
            float: left;
        }
        .left{
            margin-left: -100%;
        }
        .right{
            margin-right: -200px;
            position: relative;
            right: 200px;
        }

    </style>
</head>
<body>
    <div class="container">
        <div class="center">center</div>
    </div>
    <div class="left">left</div>
    <div class="right">right</div>
</body>
</html>

2.3 实现分析

主要使用浮动实现

知识点:floatmagin-leftmargin-rightmarginposition:relative

思路:和圣杯布局思路差不多,都主要使用了浮动,只是html 标签结构有些许区别,再有就是圣杯使用内边距padding,双飞翼使用外边距margin

关键点:需要给外层父容器设置最小宽度min-width为左右外边距的和(即左边列和右边列宽度和),否则左边列在宽度不够时依然会换行显示,打乱布局

3. 弹性布局方式实现

Flex 布局教程:语法篇 阮一峰老师

3.1 效果图

三列布局,两边固定,中间自适应
在这里插入图片描述

3.2 实现代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>弹性布局实现</title>
    <style>
        html,
        body{
            height: 100%;
            overflow: scroll;
        }
        .container{
            width: 100%;
            height: 100%;
            background-color: lightgray;
            display: flex;
            justify-content: space-between;
        }
        .left,
        .right{
            flex: 0 0 200px;
        }
        .left{
            background-color: lightgreen;
            
        }
        .center{
            background-color: lightsalmon;
            width: 100%;
            min-height: 400px;
        }
        .right{
            background-color: lightseagreen;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="left">left</div>
        <div class="center">center</div>
        <div class="right">right</div>
    </div>
</body>
</html>

3.3 实现分析

主要使用弹性布局方式实现

知识点:display:flexflex:0 0 200px

思路:

  1. 项目对齐方式justify-content: space-between
  2. 左右两列使用flex: 0 0 200px 来固定位置
  3. 中间列宽度100%

关键点:需要给外层父容器设置最小宽度min-width为左右外边距的和(即左边列和右边列宽度和),否则左边列在宽度不够时依然会换行显示,打乱布局

4. 定位方式实现

4.1 效果图

三列布局,两边固定,中间自适应
在这里插入图片描述

4.2 实现代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>弹性布局实现</title>
    <style>
        html,
        body{
            height: 100%;
            overflow: scroll;
        }
        .container{
        	height: 100%;
            background-color: lightslategray;
            position: relative;
        }
        .left,
        .right{
            width: 200px;
            min-height: 200px;
            position: absolute;
        }
        .left{
            background-color: lightsteelblue;
            left: 0;
            top: 0;
        }
        .center{
            background-color: lightcyan;
            margin: 0 200px;
            min-height: 400px;
            
        }
        .right{
            background-color: lightblue;
            right: 0;
            top: 0;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="left">left</div>
        <div class="center">center</div>
        <div class="right">right</div>
    </div>
</body>
</html>

4.3 实现分析

主要使用绝对定位方式实现

知识点:position

思路:左右两列的区域为中间列的左右外边距margin: 0 200px

5. 网格布局方式实现

CSS Grid 网格布局教程

5.1 效果图

在这里插入图片描述

5.2 实现代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>网格布局实现</title>
    <style>
        html,
        body{
            height: 100%;
            overflow: scroll;
        }
        .container{
            background-color: lightcyan;
            height: 100%;
            display: grid;
            grid-template-rows: 400px;
            grid-template-columns: 200px auto 200px;
        }
        .left{
            background-color: lightgreen;
        }
        .center{
            background-color: lightsalmon;
        }
        .right{
            background-color: lightskyblue;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="left">left</div>
        <div class="center">center</div>
        <div class="right">right</div>
    </div>
</body>
</html>

5.3 实现分析

网格布局(Grid)是最强大的 CSS 布局方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值