服务时间:8:30-18:00

首页 >web前端网

css怎么设置margin

发布时间:2022-11-29 22:54 字数:2723字 阅读:176

css怎么设置margin?本节学习元素的外边距(margin)。margin的语法类似于padding,不同的是,margin在使用的过程中会导致两个问题:父子级之间margin传递;兄弟级之间margin叠压。下面介绍如何避免或解决这两个问题。

1、margin的作用

margin的作用就是调节元素之间的距离。

【例】在页面中创建一个div元素作为容器,给容器添加黑色边框,浏览器显示效果如图1所示。HTML代码如下。


<div class="page"></div>


CSS代码如下。


.page{
width:500px;
height:500px;
border:2px solid #000000;
}


创建一个div元素

图1 创建一个div元素

按F12快捷键进入开发者模式,查看body元素的默认外边框。由图2可知,div元素并没有紧贴浏览器显示,这是因为body元素默认有margin样式。

查看body元素的默认外边框

图2 查看body元素的默认外边框

一般在写页面时,会先设置body的外边距为0,这称为CSS的样式重置,作用是让页面样式更加精确,CSS代码如下。


body{margin:0;}


在容器中新建两个div元素,将class属性分别设置为box1、box2,背景色分别设置为浅绿色与橙色,浏览器显示效果如图3所示。CSS代码如下。


 .box1{
   width:100px;
   height:100px;
   background-color:#d9ebb1;
 }
 .box2{
   width:100px;
   height:100px;
   background-color:#f2ae7d;
 }


HTML代码如下。


<body>
    <div class="page">
      <div class="box1"></div>
      <div class="box2"></div>
    </div>
</body>


新建两个div元素

图3 新建两个div元素

给box1设置CSS样式margin:50px,浏览器显示效果如图4所示,box1在上侧和左侧距离容器50px,box2与box1距离50px,CSS代码如下。


 .box1{
   width:100px;
   height:100px;
   background-color:#d9ebb1;
   margin:50px;
 }


给box1设置CSS样式margin:50px

图4 给box1设置CSS样式margin:50px

margin同样可以单独设置4个不同方向,复合写法与padding一致,遵循顺时针的规律,此处不再赘述。

2、margin在使用中的问题

1. margin叠压

【例】创建两个div元素,外边距分别为100px和150px,浏览器显示效果如图5所示,CSS代码如下。


.box{
   width:100px;
   height:100px;
   background-color:#b6d16a;
}
.box:nth-of-type (1){
   margin:100px;
}
.box:nth-of-type (2){
   margin:150px;
}


HTML代码如下。


    <div class="box"></div>
    <div class="box"></div>


创建两个div元素

图5 创建两个div元素

如果两个元素的外边距可以叠加的话,它们之间的距离应该是100px+150px=250px。

打开开发者模式验证两个元素之间的实际距离,如图6所示,可以看到两个元素之间的实际距离只有150px,这个数值恰好是两个元素中外边距较大的那一个。

在开发者模式下查看两个元素之间的距离

图6 在开发者模式下查看两个元素之间的距离

当两个垂直外边距相遇时,它们将形成一个外边距,此时外边距的值是两个外边距中较大的那一个,这种现象称为margin的叠压现象,如图7所示。

margin的叠压

图7 margin的叠压

虽然没有方法能彻底解决margin的叠压,但可以通过其他写法来避免这个问题。例如,当希望两个元素之间的距离为250px时,直接设置其中一个元素的边距为250px;在没有边框和背景的情况下,使用padding来代替margin。另外,两个浮动元素之间不会发生margin的叠加。

2.margin的传递

【例】创建一个类名为box的div元素,内部有box1和box2两个子元素,运行结果如图8所示。代码如下。


<!DOCTYPE html>
<html>
    <head>
      <meta charset="UTF-8">
      <title>margin的传递 </title>
    </head>
    <style>
       .box{
          width:500px;
          height:500px;
          background-color:#fbcd5d;
       }
       .box1,.box2{
          width: 100px;
          height: 100px;
          background-color:#b6d16a;
       }
   </style>
    <body>
      <div class="box">
          <div class="box1"></div>
          <div class="box2"></div>
      </div>
    </body>
</html>


margin的传递

图8 margin的传递

给box1和box2添加100px的外边距,CSS代码如下,预期显示效果如图9所示,浏览器实际显示效果如图10所示。


   .box1,.box2{
      width: 100px;
      height: 100px;
      background-color:#b6d16a;
      margin:100px;
   }


预期显示效果

图9 预期显示效果

浏览器实际显示效果

图10 浏览器实际显示效果

由图10可知,紧邻父元素上边框的子元素并没有显示100px的margin-top,反而父元素获得了100px的margin-top,这种现象称为margin的传递。当父元素没有边框时,第一个子元素的margin-top会传递给父元素。

有3种处理margin传递的方法,处理后浏览器可显示如图9所示的预期效果。

(1)给父级元素添加属性overflow:hidden,CSS代码如下。


 .box{
   width:500px;
   height:500px;
   background-color:#fbcd5d;
   overflow: hidden;
 }


(2)给父级元素设置与内容同一颜色的上边框,此时要注意将父级元素的高度减去上边框的高度,CSS代码如下。


 .box{
   width:500px;
   height:499px;
   background-color:#fbcd5d;
   border-top:1px solid #fbcd5d;
 }


(3)用父级元素的padding-top代替box1的margin-top。设置box1的margin-top为0,设置父级元素的padding-top为100px,并且将父级元素的height属性减去100px,CSS代码如下。