关于两栏布局的一个小问题

先贴代码

<!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>两栏</title>
  <style media="screen">
    html,body,p{
      margin: 0;
      padding: 0;
    }
    #header,#footer{
      height: 40px;
      background: red;
    }
    #content{
      overflow: auto;
    }
    #content .main{
      overflow: auto;
      background: pink;
    }
    #content .test{
      background: yellow;
    }
    #content .aside{
      background: #aaa;
      width: 300px;
      float: left;
    }
  </style>
</head>
<body>
  <div id=header>
    header
  </div>
  <div id=content>
    <div class="aside">aside</div>
    <div class="main">
      我是main
      我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main
      我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main
      我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main
      我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main
      我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main
      我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main
      <div class="test">
        我是main
        我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main
        我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main
        我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main
        我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main
        我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main
        我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main 我是main
      </div>
    </div>
  </div>
  <div id=footer></div>
</body>
</html>

问题

如果将content块中main由div改为p标签,并且删去test块,则依然为两栏布局。效果同两个div并列。

aside为div,main为p

但此时若不删去test块,test块就会占据一整行:

mian作为p标签包含div的情况

若是main为div,则不管aside周围是不是文字(float:left;会出现文字环绕浮动的效果),都可以实现两栏布局:

div包含文本和div
div包含div

我们知道此时形成两栏布局的原因是main形成了BFC,而main形成BFC的原因是overflow:auto;此时main已经设置了overflow:auto;所以main中的div已经包含在main形成的BFC中,所以两栏布局依然可以实现。而p标签并没有这种效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,845评论 1 92
  • 前言 现在,我们被称为前端工程师。然而,早年给我们的称呼却是页面仔。或许是职责越来越大,整体的前端井喷式的发展,使...
    Calvin李阅读 520评论 0 0
  • relative:生成相对定位的元素,通过top,bottom,left,right的位置相对于其正常位置进行定位...
    zx9426阅读 996评论 0 2
  • (一)被辜负的写作天赋 坐在咖啡厅,品着苦咖啡,多米望着窗外,若有所思的说:好怀念大学时我深...
    云洱涡阅读 441评论 2 4
  • 十年后的我,应该已经离婚了吧。 可能会离婚并不意味着我现在有多不幸福。事实上,我现在挺幸福的,四口之家,老公事业发...
    10年一梦阅读 233评论 5 0