CSS布局的两种方法

目录

双飞翼布局

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        .container{
           /* overflow:hidden;
            padding:0 400px 0 200px;*/
        }
        .main{
            width:100%;
            height:400px;
            background-color: #ffcc00;
            float:left;
        }
        .left{
            width:200px;
            height:300px;
            background-color: #CCCCCC;
            float:left;
            /*margin-left:-100%;
            position:relative;
            left:-200px;*/
        }
        .right{
            width:400px;
            height:300px;
            background-color: blue;
            float:left;
            /*margin-left:-400px;
            position:relative;
            right:-400px;*/
        }
    </style>
</head>
<body>
<div class="container">
    <div class="main"></div>
    <div class="left"></div>
    <div class="right"></div>
</div>
</body>
</html>

我将下面要解释的代码注释掉了,现在的效果为
这里写图片描述


为了使左边的块移动到上一行的左边,我们设置margin-left:-100%;然后效果为:这里写图片描述


同理,我们要设置右边的块到上一行的最右边,我们设置margin-left:-400px;然后效果为:


接着,我们给父元素设置padding属性,把container盒子的content往中间挤.
这里写图片描述


然后把left和right设置为绝对定位,然后往两边拉
这里写图片描述


这里会有一个问题:container的高度塌陷为了0,为了解决这个问题,我们要清除浮动,给父元素加上overflow:hidden即可.

Flex布局

需要仔细了解flex属性用法的可以看一看flex的用法
在这里简单补充一下flew:flex-grow flex-shrink flex-basis的用法.

flex-grow:
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍

flex-shrink:
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小

flex-basis:
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        .container {
            display: flex;
        }
        .main {
            flex-grow: 1;
            height: 300px;
            background-color: red;
        }
        .left {
            order:-1;
            flex: 0 1 200px;
            margin-right: 20px;
            height: 300px;
            background-color: blue;
        }
        .right {
            flex: 0 1 100px;
            margin-left: 20px;
            height: 300px;
            background-color: green;
        }
    </style>
</head>
<body>
<div class="container">
    <div class="main"></div>
    <div class="left"></div>
    <div class="right"></div>
</div>
</body>
</html>

最后效果为
这里写图片描述

flex也可以实现四栏的效果,有兴趣的可以试试.

其他方法

除了以上几种,还有其他方法,可以参考CSS布局的七种方法
还有calc函数也可以动态地计算div的宽度,实现自适应.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值