CSS布局笔记(2)

三栏布局(两端固定宽度,中间自适应)

1、利用position

代码如下:

<style>
        #left,#right{
            position: absolute;
            top: 0px;
            width: 200px;
            height: 100%;
        }

        #left{
            left: 0;
            background-color: coral;
        }
        #right{
            right: 0;
            background-color: #A7C942;
        }
        #main{
            margin: 0 210px;
            background-color: black;
            height: 100%;
        }
    </style>


<div id="left"></div>
    <div id="right"></div>
    <div id="main"></div>

注意:
1、左右两边采用绝对定位,已经脱离了文档流,所以main版块才是文档流,利用左右外边距使得被夹在中间,外边距和左右版块的差值就是空白。
2、main版块是文档流,必须把body、html的高度和main都设成100%,否则这个地方由于是空白块,中间部分高度将为0(只有main为100%是不行的)
3、div顺序可以换,不影响结果
在这里插入图片描述

2、利用float 布局

这是最简单直接的布局方法,代码如下:

<style>
        body{
            font-size: 20px;
        }
        #main{
            height: 200px;
            margin: 0 210px;
            background-color: #A7C942;
            color: white;
        }
        #left,#right{
            width: 200px;
            height: 200px;
            background-color: coral;
            color: white;
        }
        #left{
            float: left;
        }
        #right{
            float: right;
        }

    </style>

<div id="left">左边</div>
    <div id="right">右边</div>
    <div id="main">中间</div>

效果如图:
在这里插入图片描述
注意点:
1、同样是利用main区域的margin达到被夹在中间的目的
2、HTML源文件三个版块的顺序有要求,必须先把左右浮动元素排好再排文档流main元素,如果先排main效果如下:在这里插入图片描述
原因很简单,先排文档流之后浮动元素一定是从文档流下方开始布局;反之,先排浮动元素,文档流还是从最顶处开始布局,因为浮动元素脱离了文档流。
3、问了稳妥起见,可以最后清除浮动元素

3、利用flex弹性盒子布局

以上两种方法都是利用block元素框的水平宽度要撑满整行,会随着父元素的大小而改变,而要达到这种效果,个人感觉一行只能有一个block,即自适应窗口只能有一个,其他的框要么浮动要么absolute,脱离文档流。当然,如果一行需要两个自适应框,我觉得还是要设置成inline-block,这样就可以一行多个 排列。

另一种方法是利用flex弹性盒子的分配功能:
代码如下:

    <style>
        body{
            font-size: 20px;
            display: flex;
        }
        #main{
            height: 200px;

            background-color: #A7C942;
            color: white;
            flex: 1 auto;

        }
        #left,#right{
            width: 200px;
            height: 200px;
            background-color: coral;
            color: white;
            flex: 0 auto;
        }


    </style>

<div id="left">左边哈哈哈放大答案阿凡达</div>
<div id="main">中间</div>
<div id="right">右边</div>

在这里插入图片描述
注意:
1、在比例分配的时候,中间main的flex参数设为1,左右设为0,实现在给左右固定宽度分外之后剩下的所有全给中间部分。
2、左右两边的宽度可以设置为200px,然后flex第二个参数设为auto;当然也可以直接把flex第二个参数设为200px,就不用设置宽度了;同时我发现flex的优先级似乎比width高,如果我把auto改为210px,保留width=200px,最后效果是210px。
3、这样设置出来是没有间隔的,可以在main区间设置margin左右边距来增加间隔。

GitHub代码地址:三栏布局练习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值