• margin重叠与穿透问题


    margin重叠是指两个同级元素之间。margin穿透指的是,子元素margin超出父元素而未被父元素包含的现象。

    出现margin重叠的原因: 同一个BFC里面两个块级元素会出现margin折叠。

    解决方式:让两个块级元素不在一个BFC内。

    默认情况,子元素设置margin-top或者margin-bottom会影响其父元素,这就是所谓的margin穿透。解决方式:1.给父元素加个border; 2.将父元素变成BFC。

    BFC: Block Formatting Context 简称 块级格式化上下文

    BFC的特点: BFC是一个绝对的独立空间,它的内部元素是不会影响到外部元素的!!!

    BFC布局规则:

    1. 内部的Box会在垂直方向,按照从上到下的方式逐个排列。
    2. Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
    3. 每个元素的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此
    4. BFC的区域不会与float box重叠
    5. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此
    6. 计算BFC的高度时,浮动元素的高度也参与计算

    元素首先需要是一个block元素,才能变成BFC;

    触发BFC的条件:

    • 根元素,body
    • float的值不为none
    • overflow不为visible;可以是hidden或auto或scroll
    • display的值设置为inline-block,flex或者inline-flex,table-cell,table-caption或者inline-table
    • position的值设置为absolute、fixed

    因此通过将其中一个元素display属性设置为inline-block,width设置为100%是比较好的解决方式;既解决了margin穿透问题,又达到与display为block一样的效果。

    延伸:

    与BFC对应的另外一个概念IFC(inline formatting context) 行内格式化上下文

  • 相关阅读:
    C# MVC跳转
    从字符串中提取数字
    使用Node.js+Socket.IO搭建WebSocket实时应用
    C# 计算当前时间距离今晚00:00:00还有多少分多少秒
    C#错误异常列表
    HTTP请求报文和HTTP响应报文
    Selenium2(webdirver)入门之环境搭建(Java版)
    mysql grant ,User,revoke
    mysql 用drop和delete方法删除用户的区别
    [MySQL]
  • 原文地址:https://www.cnblogs.com/rencoo/p/11628775.html
Copyright © 2020-2023  润新知