CSS布局总结(二)

前言:今天实训课依旧很水,继续总结,今天主要补了一下布局的知识。响应式的作业还没做完...

一、两列布局

html部分

    <div class="parent">
        <div class="left">left</div>
        <div class="right">
            <p>right</p>
            <p>right</p>
            <p>right</p>
            <p>right</p>
            <p>right</p>
        </div>
    </div>

总体样式(为啥粘上去这么乱的...)

div{
      border:1px solid #444;
   }
 .parent{
      background-color: #eee;
   }
 .left{
        background-color: yellow;
   }
 .right{
        background-color: pink;
   }
  • 一列定宽,另一列自适应,两列的高度不会同时增加 
.left{
            float: left;
            width:100px;
        }

        .right{
            margin-left:120px;
        }
.parent{
            position: relative;
        }
        .left{
            position: absolute;
            width:100px;
        }
        .right{
            margin-left: 100px;
        }
  • 其中一列定宽或者不定宽都可以,另一列自适应,两列的高度不会同时增加
.left{
            float: left;
            margin-right:20px;
        }

        .right{
            overflow: hidden;
        }
  • 表格布局,父元素为table,子元素为table-cell,可以同时增加高度,如果不设置宽度,两者宽度相等
.parent{
            display: table;
            width:100%;
        }
        .left,.right{
            display: table-cell;
        }

        .left{
            width:100px;
        }
  • flex 两边高度会同时增加
.parent{
            display: flex;
        }
        .left{
            width: 100px;
        }
        .right{
            flex: 1;
        }
  • 表格布局,高度会同时增加
.parent{
            display: grid;
            grid-template-columns: 1fr 1fr;
        }

二、三列布局

这里主要记录两个经典布局

主要样式

div{
            border:1px solid #ccc;
            box-sizing: border-box;
        }

        .middle{
            background-color:#eee;
        }

        .content{
            background-color: purple;
        }

        .left{
            background-color: yellow;
        }

        .right{
            background-color: pink;
        }
  • 双飞翼布局
<div class="container">
        <div class="middle">
            <div class="content">
                <p>content</p>
                <p>content</p>
                <p>content</p>
                <p>content</p>
                <p>content</p>
            </div>
        </div>
        <div class="left">
            <p>left</p>
        </div>
        <div class="right">
            <p>right</p>
            <p>right</p>
            <p>right</p>
        </div>
    </div>
<!--1. 注意div的顺序 -->
<!--2. .middle设置100%; .middle,.left,.right都为float:left,此时它们将分别占据1、2、2 行 -->
<!--3. 为了让.left回到第一行的最左边,则需要设置margin-left:-100%; 为了让.right回到第一行的末尾,则需要设置margin-right:-自身的宽度 -->
<!--4. 此时三者在同一行,但是middle的内容会被遮挡住,故此时应该设置middle里面的content内容,则content设置:margin:0 right的宽度 0 left的宽度 -->

<!--p.s. 三列布局不等高 -->
 
.container{
            width:100%;
        }
        .middle{
            float: left;
            width:100%;
        }
        .left{
            width:200px;
            float: left;
            margin-left: -100%;
        }

        .right{
            width:300px;
            float: left;
            margin-left: -300px;
        }
        
        .content{
            margin: 0 300px 0 200px;
        }
  • 圣杯布局
<div class="container">
        <div class="middle">
            <p>content</p>
            <p>content</p>
            <p>content</p>
            <p>content</p>
            <p>content</p>
        </div>
        <div class="left">
            <p>left</p>
        </div>
        <div class="right">
            <p>right</p>
            <p>right</p>
            <p>right</p>
        </div>
    </div>

<!--p.s. 一开始跟双飞翼布局有点像 -->
<!--1. 注意div的顺序 -->
<!--2. .middle设置100%; .middle,.left,.right都为float:left,此时它们将分别占据1、2、2 行 -->
<!--3. 为了让.left回到第一行的最左边,则需要设置margin-left:-100%; 为了让.right回到第一行的末尾,则需要设置margin-right:-自身的宽度 -->


<!--4. 由于middle的内容被遮挡,此时是 设置container的padding:0 right的宽度 0 left的宽度-->
<!--5 此时内部直接往中间缩,则需要这是.left{position:relative;left:-自身的宽度;}    .right{position:relative;right:-自身的宽度;-->
.container{
            width:100%;
            padding:0 300px 0 200px;
            background-color: #7e7e7e;
        }
        .middle{
            float: left;
            width:100%;

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

        .right{
            width:300px;
            float: left;
            margin-left: -300px;
            position: relative;
            right:-300px;
        }
原文地址:https://www.cnblogs.com/armouy/p/10029852.html