zoukankan      html  css  js  c++  java
  • 负margin伪等高布局原理

        最近工作不忙,沉下心来学习css,才发现自己很多东西自己都不明白为什么会达到这样的效果。在本文中,主要是记录下自己对负margin伪等高布局原理的理解。

       html代码:

    <div id="doc">
    	<div id="main">主内容栏<br>这里是主内容栏有很多内容</div>
    	<div id="aside">侧边栏</div>
    </div>
    

      css代码:

    #doc {
        overflow: hidden;
        width: 600px;
        margin: auto;
    }
    #main, #aside {
        margin-bottom: -999px;
        padding-bottom: 999px;
    }
    
    #main {
        float: left;
        width: 390px;
        background: #aaa;
    }
    #aside {
        float: right;
        width: 200px;
        background: #ccc;
    }

        实现等高布局的关键是 margin-bottom: -999px;和 padding-bottom: 999px;还有float让两列处在同一行,可以用display:inline-block;vertical-align:top代替;

        这里的负的margin-bottom的作用是让元素的包含块或者相邻的元素的向上移999px,这里是父元素包含块,关于包含块可以看看http://www.w3help.org/zh-cn/kb/008/,讲的很详细了,此时父元素的包含块底边向上移了999px,而上面两个都有padding-botttom:999px所以包含块刚好截取在最高的内容区域处,当内容区域内容变多时就把包含块即父元素内容区域给撑高了而另外一边是自身的高度加上一部分padding,造成了视觉上的等高。而父元素加上overflow:hidden就会把超出包含块的部分隐藏。当主内容区域的content box超过999px+侧边栏的content box的高度就会看到两边不等高了。因为侧边栏预留的padding-bottom已经用完了。

        总结:负margin实现伪等高布局关键在于负的margin-bottom会影响元素的Containing block或者相邻元素,而父元素的内容区域又可以被子元素撑高即改变了包含块的高度,overflow可以隐藏溢出包含块的部分,利用多余留着的padding就可以造成视觉上的等高。以上只是把自己的理解记录下,语言组织的不太通顺,有错误还请多多包涵并指正

    参考资料:

    包含块:http://www.w3help.org/zh-cn/kb/008/

    我知道你不知道的负margin:http://www.hicss.net/i-know-you-do-not-know-the-negative-margin/

  • 相关阅读:
    Git 多人协作开发的过程
    常见Http状态码大全
    网络请求之get post
    从前端面试过程中总结的一些经验
    HTML5新增标签
    前端小知识点--class命名规范
    前段工作第一天新知识点---handlebars.js和Seajs
    Javascript模式消息框--alert()、confirm()和prompt()的区别与用法
    用Margin还是用Padding
    Array实例对象的方法小结
  • 原文地址:https://www.cnblogs.com/liziyu91/p/8427048.html
Copyright © 2011-2022 走看看