小记css的margin collapsing

最近在做web页面设计的时候,莫名的发现最上面会出现一个横条,颜色为html的背景颜色。本意是那一片空横条应该为header的背景色。查了一些资料,发现是margin collapsing的问题,记录下来,希望初学者少走弯路。

从问题说起

先给出demo的源码和截屏,给出一个直观的印象。代码如下:

<!DOCTYPE html>
<html>

<head>
    <style type="text/css">
    html {
        width: 100%;
        height: 100%;
        max-height: 100%;
        margin: 0px;
        padding: 0px;
        background-color: blue;
    }
    body {
        width: 100%;
        height: 100%;
        max-height: 100%;
        margin: 0px;
        padding: 0px;
        background-color: orange;
    }
    #header {
        width: 100%;
        height: 38%;
        margin: 0px;
        padding: 0px;
        background-color: red;
    }
    #main {
        width: 100%;
        height: 62%;
        margin: 0px;
        padding: 0px;
        background-color: green;
    }
    #container {
        width: 80%;
        max-width: 864px;
        margin: 0px;
        padding: 0px;
        background-color: green;
    }
    #footer {
        width: 100%;
        height: 38%;
        margin: 0;
        padding: 0;
        background-color: gray;
    }
    </style>
</head>

<body>
    <div id="header">
        <h1>Hello</h1>
    </div>
    <div id="main">
        <div id="container">
        </div>
    </div>
    <div id="footer">
    </div>
</body>

</html>

截屏如下(注意最上面的蓝色横条,本想设计为红色):

问题的原因

margin collapsing,边界合并。h1默认margin-top值大于0,h1的top margin与header的top margin合并,合并之后的top margin又与body的top margin合并,html是根元素,不再继续合并,所以那个横条是body的margin,颜色为html的背景色。

解决办法

解决办法的思路有两条。其一,去除margin,也就是把margin设置为0;其二是破坏margin collapsing。

margin设置为0

真的很简单,代码如下:

h1{
    margin-top: 0px;
}

破坏margin collapsing

这里的方法很多,只要是针对margin collapsing的规则,破坏其中的某一个或者多个环节。

设置父元素的overflow为auto或者hidden,代码如下:

#header {
    width: 100%;
    height: 38%;
    margin: 0px;
    padding: 0px;
    background-color: red;
    overflow: auto;
}

设为非负padding,代码如下:

#header {
    width: 100%;
    height: 38%;
    margin: 0px;
    padding: 0px;
    background-color: red;
    padding-top: 0.1px;
}

设置border, 代码如下:

#header {
    width: 100%;
    height: 38%;
    margin: 0px;
    padding: 0px;
    background-color: red;
    border:1px solid red;
}

参考链接

小记css的margin collapsing,布布扣,bubuko.com

时间: 2024-12-15 16:00:41

小记css的margin collapsing的相关文章

CSS padding margin border属性详解

图解CSS padding.margin.border属性W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层.盒模型主要定义四个区域:内容(content).内边距(padding).边框(border)和外边距(margin).对于初学者,经常会搞不清楚margin,background-color,background-image,padding,content,border之间的层次.关系和相互影响.

转-CSS padding margin border属性详解

原文链接:http://www.cnblogs.com/linjiqin/p/3556497.html 图解CSS padding.margin.border属性W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层.盒模型主要定义四个区域:内容(content).内边距(padding).边框(border)和外边距(margin).对于初学者,经常会搞不清楚margin,background-color,b

CSS padding margin border属性详解【转载】

本文转载自:http://www.cnblogs.com/linjiqin/p/3556497.html ,感谢相关博主. 图解CSS padding.margin.border属性 W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层.盒模型主要定义四个区域:内容(content).内边距(padding).边框(border)和外边距(margin).对于初学者,经常会搞不清楚margin,backgro

CSS中margin和padding的区别

本文导读:padding margin都是边距的含义,关键问题得明白是什么相对什么的边距.padding是控件的内容相对控件的边缘的边距.margin是控件边缘相对父空间的边距. 在CSS中margin是指从自身边框到另一个容器边框之间的距离,就是容器外距离.在CSS中padding是指自身边框到自身内部另一个容器边框之间的距离,就是容器内距离. 下面讲解 padding和margin常用的用法 一.padding 1.语法结构 (1)padding-left:10px; 左内边距 (2)pad

使用CSS中margin和padding的基础和注意事项

在CSS中,margin和padding是页面布局的主要属性,如何灵活有效使用对于基于DIV+CSS设计网页方法是非常重要的,笔者经常使用且经常误使用,所以根据经验和网上资料整理出切合自己的内容,以备以后使用. 一.首先了解CSS盒模型 Box Model 通过这个CSS盒模型模型就很容易理解Margin.padding和Border.. W3C定义的盒模式如下: width和height定义的是Content部分的宽度和高度,padding border margin的宽度依次加在外面.背景会

CSS中margin属性详解

margin属性概述margin是CSS层叠样式表中用来规定围绕在元素边框周围空白区域范围的属性. 该接受任何长度单位,可以是像素.英寸.毫米或 em. 相关属性margin 可以单独改变元素的上,下,左,右边距.也可以一次改变所有的属性. 使用语法1.使用单独属性设置四边的距离 #d2 { border: 1px solid blue; /*为了显示效果,所以让d2有了边框 */ margin-top: 20px; /*上边距为20px*/ margin-right: 30px; /*右边距为

[ css 外边距 margin ] css中margin外边距合并问题讲解及实例演示

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距;合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者 外边距合并外边距合并(叠加)是一个相当简单的概念.但是,在实践中对网页进行布局时,它会造成许多混淆.简单地说,外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者.当一个元素出现在另一个元素上面时,第一个元素的下外边距与第二个元素的上外边距会发生合并.请看下图: CSS 外边距合并实例 1 亲自试一试

CSS中margin的认识

margin中设置边框的顺序为上右下左 {margin:top right buttom right} 等同于单独设置中的 { margin-top: 20px; margin-right: 30px; margin-bottom: 30px; margin-left: 20px; } 省略的写法规则为: 如果为外边距指定了 3 个值,则第 4 个值(即左外边距)会从第 2 个值(右外边距)复制得到.如果给定了两个值,第 4 个值会从第 2 个值复制得到,第 3 个值(下外边距)会从第 1 个值

问题与对策:CSS的margin塌陷(collapse)

1: <!DOCTYPEHTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN"> 2: <html> 3: <head> 4: <title></title> 5: <metaname=""content=""> 6: <style> 7: *{ 8: margin:0px; 9: padding:0px; 10: }