浮动塌陷和margin塌陷

浮动塌陷

使用float浮动的时候,父元素的高度变成0。

    <style>
        * {
            margin: 0;
            padding: 0;
        }

        ul li {
            list-style: none;
            width: 200px;
            height: 200px;
            background-color: turquoise;
            float: left;
            margin: 0 20px;
        }

        p {
            text-align: center;
        }

        .red{
            width: 800px;
            height: 50px;
            background-color: red;
        }
    </style>

    <ul>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <div class="red"></div>

效果如下:


image.png

ul没有定义高度,继承了li的高度,但是浮动会导致ul的高度为0,因此下面的盒子就自动上去了。

解决方案

  • 给父元素设置高度
ul{
  hieght:200px
}
  • 给父元素加一个没用的子元素 给这个子元素设置清除浮动的属性clear;both
 <ul>
        <li></li>
        <li></li>
        <li></li>
        <div style="clear:both"><div>
    </ul>

  • 给父元素设置overflow溢出隐藏
ul{
  overflow:hidden;
}
  • 使用after伪类选择器 :
ul:after{ 
   content:'';
   clear:both; 
   display:block;   
   visibility:hidden; 
}

效果图


image.png

margin塌陷

发生在两个盒子嵌套的时候,父盒子和子盒子同时设置margin的时候会出现实际的magin取的是两个margin的最大值

    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .father{
            margin-top:150px;
            width: 500px;
            height: 200px;
            background-color: green;
        }

        .son{
            margin-top: 70px;
            width: 200px;
            height: 500px;
            background-color: red;
        }
       
    </style>

    <div class="father">
        <div class="son">

        </div>
    </div>
image.png

此时父盒子上边距是两者中的最大值也就是150px,而盒子没有撑开父盒子,绿色的子元素设置的margin失效了

解决方案

  • 给父元素一个边框border(如果你要边框就给个边框,不需要边框就给一个透明色的边框)
      .father{
            margin-top:150px;
            width: 500px;
            height: 200px;
            background-color: green;
            border: 1px solid rgba(0, 0, 0, 0);
            box-sizing: border-box;
        }

      .son{
            margin-top: 70px;
            width: 200px;
            height: 500px;
            background-color: red;
        }
  • 给父元素增加
overflow: hidden
  • 给父元素设置
display:fixed;
  • 给父元素添加
display: table;
  • 给子元素的前面添加一个兄弟元素属性为:
content:'';
overflow:hidden;

效果图

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、CSS入门 1、css选择器 选择器的作用是“用于确定(选定)要进行样式设定的标签(元素)”。 有若干种形式的...
    宠辱不惊丶岁月静好阅读 1,616评论 0 6
  • 什么是盒子? CSS处理网页时,它认为每个元素都包含在一 个不可见的盒子里。 我们只需要将相应的盒子摆放到网页中相...
    咻咻咻滴赵大妞阅读 937评论 0 0
  • 概述: CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明: 一、注释: CSS注释以 "/*" 开始,...
    进入web前端阅读 2,018评论 0 8
  • CSS 是什么 css(Cascading Style Sheets),层叠样式表,选择器{属性:值;属性:值}h...
    崔敏嫣阅读 1,508评论 0 5
  • 概述 在网易云课堂学习李南江老师的《从零玩转HTML5前端+跨平台开发》时,所整理的笔记。笔记内容为根据个人需求所...
    墨荀阅读 2,366评论 0 7