css常见布局实现

最近面试呢总虐在css这块,然后总结了面试中常问的两栏、三栏布局的实现

一、两栏布局

左边固定宽度,右边自适应
1.设置浮动
在这里插入图片描述
设置浮动可以有三种实现
两个div,左边都一样。左边:左边设置宽度和float:left
右边可以1.什么也不做,2.overflow:hidden,3.margin-left:左边宽度

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>左边float,右边什么也不做</title>
    <style>
        div{
            height: 300px;
        }
        .left{
            width: 200px;
            background-color: #6ab3f8;
            float: left;
        }
        .right{
            background-color: pink;
            /*overflow: hidden;*/
            /*margin-left: 200px;*/
        }
    </style>
</head>
<body>
    <div class="left"></div>
    <div class="right"></div>
</body>
</html>

2.相对+绝对实现

三个div,父容器包裹左右子容器
父:相对定位
子左:position:absolute
子右:position:absolute; left:左宽; right:0;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>相对+绝对</title>
    <style>
        div{
            height: 200px;
        }
        .container{
            /*position: relative;*/
        }
        .left{
            position: absolute;
            width: 200px;
            background-color: #6ab3f8;
        }
        .right{
            position: absolute;
            left: 200px;
            right: 0;
            background-color:pink ;
        }
    </style>
</head>
<body>

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

3.flex布局
三个div,父容器包裹子容器
父:display:flex;
子左:设置宽度
子右:flex:1;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>flex实现</title>
    <style>
        .container{
            display: flex;
            height: 200px;
        }
        .left{
            width: 200px;
            background-color: #6ab3f8;
        }
        .right{
            flex: 1;
            background-color: pink;
        }
    </style>
</head>
<body>

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

三栏布局

1.设置浮动
在这里插入图片描述

三个div。
左:float:left
右:float:right
中间:overflow:hidden; 或者 中间:margin-left:左边宽度; margin-right:右边宽度 或者什么都没有

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三栏-float</title>
    <style>
        div{
            height: 300px;
        }
        .left{
            width: 200px;
            background-color: #6ab3f8;
            float: left;
        }
        .right{
            width: 200px;
            background-color: #FFB866;
            float: right;
        }
        .main{
            margin-left: 200px;
            margin-right: 200px;
            background-color: pink;
            /*overflow: hidden;*/
        }

    </style>
</head>
<body>
    <div class="left"></div>
    <div class="right"></div>
    <div class="main"></div>

</body>
</html>

但是这种方法有缺点:注意main在html中需要放在最后,会使得左右两边先加载,中间最后加载。这也是后面双飞翼布局出现的原因

2…双飞翼布局
需要四个div

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>双飞翼</title>
    <style>
        div{
            height: 200px;
        }
        .container{
            float: left;
            width: 100vw;
        }
        .center{
            margin-left: 200px;
            margin-right: 200px;
            background-color: pink;
        }
        .right{
            float: left;
            margin-left: -200px;
            width: 200px;
            background-color: #FFB866;
        }
        .left{
            float: left;
            margin-left: -100vw;
            width: 200px;
            background-color: #6ab3f8;
        }
    </style>
</head>
<body>

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

3.绝对定位
四个div,父容器包裹三个子容器
左边position:absolute,left:0,top:0
右边position:absolute,right:0,top:0
中间margin-left:左边宽度,margin-right:右边宽度。注意margin设置为0

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三栏-绝对定位</title>
    <style>
        body{
            margin: 5px 0 0 0;
        }
        div{
            height: 200px;
            margin: 0;
            padding: 0;
        }
        .container{
            width: 100%;
        }
        .left{
            position: absolute;
            left: 0;
            top: 5px;
            width: 200px;
            background-color: #6ab3f8;
        }
        .center{
            margin-left: 200px;
            margin-right: 200px;
            background-color: pink;

        }
        .right{
            position: absolute;
            right: 0;
            top: 5px;
            width: 200px;
            background-color: #FFB866;

        }
    </style>
</head>
<body>

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

4.flex布局
四个div,父容器包裹三个子容器
父:display:flex
子左:width:200px
子右:width:200px
子中间:flex:1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三栏flex</title>
    <style>
        div{
            height: 200px;
        }
        .container{
            display: flex;
        }
        .left{
            background-color: #FFB866;
            width: 200px;
        }
        .center{
            background-color: pink;
            flex: 1;
        }
        .right{
            background-color: #6ab3f8;
            width: 200px;
        }
        
    </style>
</head>
<body>

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

5.table布局
四个div,父容器包裹子容器
父:display:table
三个子display:table-cell
左右定宽:width:200px
中间自适应

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三栏table布局</title>
    <style>
        div{
            height: 200px;
        }
        .container{
            display: table;
            width: 100vw;
        }
        .left,.center,.right{
            display: table-cell;
        }
        .left{
            width: 200px;
            background-color: #6ab3f8;
        }
        .right{
            width: 200px;
            background-color: #FFB866;
        }
        .center{
            background-color: pink;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="left"></div>
        <div class="center"></div>
        <div class="right"></div>
    </div>
</body>
</html>

圣杯布局
四个div,父容器包裹三个子容器
父margin-left:左边子宽度,mergin-right:右边子宽度

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>圣杯布局</title>
    <style>
        div{
            height: 200px;
        }
        .container{
            margin-left: 200px;
            margin-right: 200px;
        }
        .center{
            float: left;
            width: 100%;
            background-color: pink;
        }
        .left{
            float: left;
            width: 200px;
            margin-left: -100%;
            position: relative;
            left: -200px;
            background-color: #6ab3f8;
        }
        .right{
            float: left;
            margin-left: -200px;
            right: -200px;
            position: relative;
            width: 200px;
            background-color: #FFB866;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="center"></div>
        <div class="left"></div>
        <div class="right"></div>
    </div>
</body>
</html>

总结:
两栏布局
1.浮动设置:float+overflow和float+margin-left
2.绝对定位 position:absolute和left
3.flex布局 右边设置flex:1
三栏布局
1.浮动设置float+overflow:hidden和float+margin-left+margin-right(注意此时html中间区域最后加载)
2.绝对定位 两边absolute,设置top和right,中间设置margin-left和mergin-right
3.双飞翼布局(为了解决浮动设置时中间内容后加载的缺点,双飞翼布局是先加载中间区块)
4.圣杯布局
5.flex布局中间设置flex:1
6.table布局,父display:table,子设置display:table-cell

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值