前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >盒模型使用margin相关技巧及解决margin-top塌陷问题

盒模型使用margin相关技巧及解决margin-top塌陷问题

作者头像
Devops海洋的渔夫
发布2019-05-31 16:35:42
1.5K0
发布2019-05-31 16:35:42
举报
文章被收录于专栏:Devops专栏Devops专栏

仅供学习,转载请注明出处

margin相关技巧

1、设置元素水平居中: margin:x auto; 2、margin负值让元素位移及边框合并

练习

1、制作一个600*100的盒子,边框1像素黑色,距离浏览器顶部100px,水平居中。 2、制作下面的菜单效果:

实现代码如下:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">
    <style type="text/css">
        .box1,.box2,.box3,.box4,.box5{
            width:202px;
            height: 31.2px;
            background-color: gold;
            border: 1px solid green;
            margin: 0 auto;
        }
        .box2,.box3,.box4,.box5{
            margin-top: -1px;
        }
    </style>
</head>

<body>
    <div class="box1">1</div>
    <div class="box2">2</div>
    <div class="box3">3</div>
    <div class="box4">4</div>
    <div class="box5">5</div>
</body>
</html>

浏览器展示如下:

外边距合并

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。解决方法如下:

1、使用这种特性 2、设置一边的外边距,一般设置margin-top 3、将元素浮动或者定位

练习

使用div标签制作如下布局:

实现代码如下:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        .outside{
            border: 1px solid #000;
            width: 502px;
            margin: 0 auto;
        }
        .outside div{
            margin-top: 20px;
            margin-left: 20px;
            margin-right: 20px;
            margin-bottom: 20px;
        }
    </style>
</head>
<body>
    <div class="outside">
        <div>
            外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
        </div>
        <div>
            外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
        </div>
        <div>
            外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
        </div>
        <div>
            外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
        </div>
    </div>
</body>
</html>

浏览器展示如下:

从上面的代码来看,可以看到里面的四个div都有margin-top和margin-bottom,所以两个div加起来按照道理应该是40px,但是由于外边距的这个特性,margin-top会和margin-bottom合并,此时距离也是只有20px,才可以呈现上面的效果。

margin-top 塌陷

在两个盒子嵌套时候,内部的盒子设置的margin-top会加到外边的盒子上,导致内部的盒子margin-top设置失败,解决方法如下:

1、外部盒子设置一个边框 2、外部盒子设置 overflow:hidden 3、使用伪元素类:

代码语言:javascript
复制
.clearfix:before{
    content: '';
    display:table;
}

练习

分别使用margin间距和padding间距制作下面的例子:

首先来看看这个margin-top坍陷是什么情况

先写好两个box来看看。

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        .outside{
            width: 202px;
            height: 202px;
            background-color: gold;
        }
        .inside{
            width: 120px;
            height: 50px;
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="outside">
        <div class="inside">1</div>
    </div>
</body>
</html>

浏览器展示如下:

按照道理,给内部的绿色div设置一个与外部div顶部的margin-top为76px,那么绿色 的div应该就会移动下来的了。

给绿色的div设置margin-top为76px

浏览器显示如下:

这就是传说之中的margin-top塌陷现象。

那么怎么解决呢?

可以用上面介绍的三种方法: 1、外部盒子设置一个边框 2、外部盒子设置 overflow:hidden 3、使用伪元素类:

代码语言:javascript
复制
.clearfix:before{
    content: '';
    display:table;
}

首先使用第一种解决方法,设置外边框

再来看看 overflow:hidden 的方式

这种方法挺好的,但是缺点就是 overflow:hidden 是本来用来遮掩溢出的元素的。用来修复这个bug的确不合适。

下面来看看另一种方法。

使用伪元素类,其实就是相当于创建一个外边框

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.01.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • margin相关技巧
  • 练习
  • 外边距合并
  • 练习
  • margin-top 塌陷
  • 练习
  • 首先来看看这个margin-top坍陷是什么情况
  • 给绿色的div设置margin-top为76px
  • 首先使用第一种解决方法,设置外边框
  • 再来看看 overflow:hidden 的方式
  • 使用伪元素类,其实就是相当于创建一个外边框
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档