CSS中 Padding和Margin两个属性的详细介绍和举例说明

代码示例:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
  <style type="text/css">
    *{padding:0;margin:0;}
    #div1{
        width:100px;
        height:100px;
        background-color:red;
        margin:0 auto;
    }
    #div2{
        width:100px;
        height:100px;
        background-color:green;
        /* margin-top:10px; *//* 元素与元素之间的距离 */
        border:3px solid #000;
        margin:10px auto 0px;
    }
    #div2 h1{
        font-size:12px;
        background-color:yellow;
        margin-top:10px;/* 元素与元素之间的距离 */
        /* padding-top:10px; *//* 增加了内容的宽高 */
    }
    #div2 span{
        /* 行内元素没有具体的宽高 */
        font-size:12px; 
        background-color:red;
        display:inline-block;/* 将行内元素转化为行内块,有了具体的宽高 */
        /* margin-top:10px; */
        padding-top:10px;
    }
  </style>
 </head>
 <body>
  <div id='div1'></div>
  <div id='div2'>
    <h1>我是标题</h1>
    <span>我是行内元素</span>
  </div>
 </body>
</html>

 

 

一、padding

 

1、语法结构

(1)padding-left:10px; 左内边距

(2)padding-right:10px; 右内边距

(3)padding-top:10px; 上内边距

(4)padding-bottom:10px; 下内边距

(5)padding:10px; 四边统一内边距

(6)padding:10px 20px; 上下、左右内边距

(7)padding:10px 20px 30px; 上、左右、下内边距

(8)padding:10px 20px 30px 40px; 上、右、下、左内边距

 

2、可能取的值

(1)length  规定具体单位记的内边距长度

(2)%       基于父元素的宽度的内边距的长度

(3)auto    浏览器计算内边距

(4)inherit 规定应该从父元素继承内边距

 

3、浏览器兼容问题

(1)所有浏览器都支持padding属性

(2)任何版本IE都不支持属性值“inherit”

 

 

二、margin

 

1、语法结构

(1)margin-left:10px; 左外边距

(2)margin-right:10px; 右外边距

(3)margin-top:10px; 上外边距

(4)margin-bottom:10px; 下外边距

(5)margin:10px; 四边统一外边距

(6)margin:10px 20px; 上下、左右外边距

(7)margin:10px 20px 30px; 上、左右、下外边距

(8)margin:10px 20px 30px 40px; 上、右、下、左外边距

 

2、可能取的值

(1)length  规定具体单位记的外边距长度

(2)%       基于父元素的宽度的外边距的长度

(3)auto    浏览器计算外边距

(4)inherit 规定应该从父元素继承外边距

 

3、浏览器兼容问题

(1)所有浏览器都支持margin属性

(2)任何版本IE都不支持属性值“inherit”

 

 

三、margin和padding的区别用图表示为

 

 例如:

在html文件的<body></body>之间写入如下代码:

 

<div id=”ID1″>
<h1 id=”ID2″>Margins of ID1 and ID2 collapse vertically.<br/>元素ID1与ID2的margins在垂直方向折叠.</h1>
</div>

 

在与其外联的css文件中写入:

 

* {
padding:0;
margin:0;
}
#ID1 {

color: #FFF;
margin-top: 10px;
margin-bottom: 10px;
}
#ID2 {
font: normal 14px/1.5 Verdana, sans-serif;
margin-top: 30px;
margin-bottom: 30px;
border: 1px solid #F00;
}

 

代码解释:

 

1. 在html写入的代码表示, 在html中插入id分别为ID1和ID2的两个块级元素div, h1;

 

2. *{padding:0; margin:0;}: 使浏览器默认的元素padding和margin值均归零;

 

3. #ID1{…}: 使id为ID1的元素div的背景颜色为#333, 字体颜色为#FFF, margin-top/bottom为10px;

 

4. #ID2{…}: 使id为ID2的元素h1的字体大小为14px, verdana字体, 行高为字体高的150%, 正常粗细. margin-top/bottom为30px, 边框为1px宽, 红色实线.

 

依据以上解释, 我们应该得到如下效果(Fig. 3):

 

j

 

即ID1的margin-top/bottom=ab=ef=10px;

 

ID2的margin-top/bottom=bc=de=30px;

 

但用浏览器打开html文件, 却得到Example4的效果, 如下图(Fig. 4):

 

j

 

即ab=cd=30px, ID1的margin-top/bottom=10px被折叠了, 而且ID1应有的margin黑色背景也一同被折叠消失了.

 

为什么会折叠: 造成以上现象的原因是, 我们在css中并没有声明id为ID1的元素div的height(高), 因此它的高便被设为auto(自动)了. 一旦其值被设为auto, 那么浏览器就会认为它的高为子元素ID2的border-top到border-bottom之间的距离, 即Fig. 4中bc的长度, 所以子元素ID2的margin-top/bottom(30px)就伸出到了父元素ID1之外, 出现了Fig. 4中ab与cd之间的空白区域. 因此父元素ID1的margin-top/bottom因子元素的”红杏出墙”而被折叠消失了.

 

如何解决折叠问题: 可能大家最初想到的办法就是根据折叠发生的原因—auto, 来解决问题. 但是, 在实际操作中, 某些元素如div, h1, p等, 我们是不可能预先知道它的高是多少的, 因此在css文件中是不能常规通过声明元素的高来解决折叠问题.

 

我们需要在css文件中加入如下代码(红色部分):

 

#ID1 {

color: #FFF;
margin-top: 10px;
margin-bottom: 10px;
padding-top:1px;
padding-bottom:1px;
}

 

或是:

 

#ID1 {

color: #FFF;
margin-top: 10px;
margin-bottom: 10px;
border-top:1px solid #333;
border-bottom:1px solid #333;
}

 

posted @ 2017-06-07 09:17  黄鹂  阅读(889)  评论(0编辑  收藏  举报