css-常用布局方法03-float浮动 + margin布局

一、css-常用布局方法
1. float
  • 元素“浮动”
  • 脱离文档流
  • 但不脱离文本流
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>float</title>
    <style>
        .container {
            background: red;
            width: 400px;
        }
        .p1 {
            background: green;
            float: left;
            width: 200px;
            height: 50px;
        }
    </style>
</head>
<body>
    <div class="container">
        <span class="p1">
            float
        </span>
        <div class="p2">
            很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字
        </div>
    </div>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BjoOfEod-1614823459856)(../css-imgs/image-20210302153626973.png)]

从图中,我们可以看出,明显的浮动效果,不会影响父元素的布局,但是会影响兄弟元素文字的排版。同样的,我们还可以看到float会对自身元素产生BFC,span本来是inline元素,却可以设置行高,就是因为float形成了块的效应。

2. float影响
  • 对自身的影响
    • 形成“块”(BFC)
    • 位置尽量靠上
    • 位置尽量靠左(右)
  • 对兄弟元素
    • 上面贴非float元素
    • 旁边贴float元素
    • 不影响其它块级元素位置
    • 影响其它块级元素内部文本
  • 对父级元素
    • 从布局上“消失”
    • 高度塌陷
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>float</title>
    <style>
        .container {
            background: red;
            width: 400px;
            /* margin: 20px; */
        }

        .p1 {
            background: green;
            float: left;
            width: 200px;
            height: 50px;
        }

        .container2 {
            background: gold;
 
        }
    </style>
</head>
<body>
    <div class="container">
        <span class="p1">
            float
        </span>
        <div class="p2">
            很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字很长的文字
        </div>
    </div>

    <div class="container container2">
        <span>写几个字</span>
        <span class="p1">
            float
        </span>
        <span class="p1">
            float
        </span>
    </div>
    <div class="container" style="height:200px;background:blue;">
        <p>第一行</p>
        <p>第二行</p>
        <p>第三行</p>
    </div>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-waYKhWsk-1614823459858)(../css-imgs/image-20210302165121818.png)]

解决方式一:

让父级元素也具备BFC特性,加上overflow:hidden

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XQ30LhRC-1614823459860)(../css-imgs/image-20210302165355765.png)]

解决方式二:

里面有个元素刚好到浮动的高度,从而达到清除浮动的效果

.container2::after{
  content: ' ';
  clear: both;
  display: block;
  visibility: hidden;
  height:0;
}
3. float浮动 + margin
  • 好处:兼容性比较好,支持大部分浏览器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AfHRYppz-1614823459863)(../css-imgs/image-20210302172114131.png)]

<!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>float+margin布局</title>
    <style>
        .container{
            width: 800px;
            height: 200px;
        }
        .left{
            background: red;
            float: left;
            height: 100%;
            width: 200px;
        }
        .right{
            background: blue;
            float: right;
            width: 200px;
            height: 100%;
        }
        .middle{
            margin-left: 200px;
            margin-right: 200px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="left">
            左
        </div>
        <div class="right">
            右
        </div>
        <div class="middle">
            中间
        </div>
    </div>
</body>
</html>

.left的样式也可以使用绝对定位来实现,也能达到相同的效果,但是高度就需要固定。

.left{
  background: red;
  width: 200px;
  position: absolute; 
  height:200px; 
}
4. 如何清除浮动
  • 原因:浮动元素不会占据父元素的空间,父元素布局的时候,不会管浮动元素,有可能浮动元素就会超出父元素,从而对其他元素造成影响,所以作为一个父元素一定要清除浮动,保证对外面是没有影响的。
  • 解决:让盒子负责自己的布局
    • overflow:hidden(auto)
    • ::after{clear:both}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值