使用float实现css三栏布局时不在同一行

学习三栏布局的时候看到很多地方都提到了float的方式:左边栏左浮动,右边栏右浮动,中间栏写margin。
但是自己写的demo右边会在下一行, 去掉中间栏的时候表现是正常的, 下面是代码。

左中右,不在同一行:
图片描述

页面:
图片描述

去掉中间栏时,float表现正常:
图片描述

页面:
图片描述

阅读 5.9k
5 个回答
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>test</title>
    <style>
        .left{
            float: left;
            width:100px;
            background-color:red;
        }
        .right{
            float: right;
            width:100px;
            background-color:green;
        }
        .main{
            background-color:#000;
            margin: 0 100pxs;
        }
    </style>
</head>
<body>
    
    <div id="demo">
        <div class="left">123</div>
        <div class="right">789</div>

        <div class="main">456</div>
    </div>

</body>
</html>

当 <div class="main">456</div>写在right前面时,第一行已经没有位置去右浮动,会被挤到下一行.
浮动元素会生成一个块级框,当第一行排满后,会自动被第一行的块级元素挤到第二行.
当 <div class="main">456</div>写在right后面时,left和right相当于脱离了文档流,这时的main才能被放在了第一行;
主要是浮动空间小会被挤到下一行

因为float不完全脱离文档流,
我的理解是 虽然脱离文档流,但是会受到之前已经加载元素的影响,但是不影响后续加载的元素.

所以

  1. 改成postion来定位,完全脱离文档流,就不受其他代码影响.
  2. 右 代码放到中 代码之前,这样就不影响中 代码的加载.

中间栏 是块级元素,占据了一行,所以第三个元素也就是右边的 div 会自动换行

让浮动元素在前即可。

不过经典的圣杯布局和双飞翼布局是center部分在最前同时float设置在left/center/right上的。

宽度问题,中间的太宽了就挤下去了吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏