zoukankan      html  css  js  c++  java
  • 详解块级格式化范围(block formatting context)

    详解块级格式化范围(block formatting context)

    前几天讲闭合浮动元素的时候提到了块级格式化范围(block formatting context),现在我来详细解释一下。先看图片:
    我没有产生块级格式化范围我有产生块级格式化范围
    这两个普通的div的边距都是20px,但实际的边距不是20px+20px=40px,而是取20px,这就是最开始学css的同学总和我说的边距重叠,当俩个普通的div相遇时会有以下规则:

    1. 当两个div的边距都是正的时取最大的margin最为边距。
    2. 当两个div的边距都是一正一负时,边距为他们的边距相加。

    刚才说的是普通情况下,所谓的普通就是没有长生格式化范围,看第二个图是产生格式化范围的情况,就是边距没有重叠,真是的边距就是20+20=40px,到现在我们知道了,产生块级格式化范围有两个特性,一个是清除浮动,一个是不会产生边距共享。下面看一下怎么才能产生块级格式化范围:

    • 浮动元素,left或right皆可
    • 绝对定位的元素
    • table-cell table-captions 类型元素
    • overflow 取职非visible的元素

    还有一个问题就是当两个元素一个产生了块级格式化范围,一个没有时浏览器会怎么处理,ie6和ie7人为认为只要有一个产生了块级格式化就不应该和其他共享边距,而Firefox,opera,chrome,safari,ie8则认为应该共享边距。

    边距共享还有另外一种形式就是div的嵌套,先看图片
    block3
    这就是边距重叠的另外一种形式,由于div的嵌套,只有上下重叠,而左右没有重叠,当你最外层div设置padding和margin时就不会产生边距重叠,还有就是当最外成产生块级元素格式化范围时也可以避免边距重叠。

    总结一下,产生块级元素格式化范围可以清除浮动和避免边距共享,而float有能产生块级元素格式化范围,所以很多人就会有float来实现上面的两个问题,或者是初学者不知道怎么回事,反正用float就能解决,这个不可取的,因为float很让人头痛。相比之下用overflow可能要好一些,但是有时定义了height或者max-height会产生一些问题,并且ie6也不会产生块级元素格式化范围,不会还好这个属性可以出发layout,可以达到同样的效果。

  • 相关阅读:
    python近期遇到的一些面试问题(一)
    python selenium 三种等待方式详解
    Nginx的ip_hash指令
    Nginx Tengine ngx_http_upstream_check_module 健康功能检测使用
    一个奇怪的网络故障 默认网关为0.0.0.0(Windows)
    win2003 server的域用户加入本地管理员组
    linux 添加secondary ip
    亚马逊云VPS AWS更改LINUX为ROOT权限密码登陆
    亚马逊云EC2做PPTP SERVER的笔记
    Linux性能分析 vmstat基本语法
  • 原文地址:https://www.cnblogs.com/taoze/p/1989145.html
Copyright © 2011-2022 走看看