• 精通css 高级web标准解决方案——可视化格式模型-盒模型


    1-盒模型的两种标准:

    IE :width 和 height属性 是包括padding和border在内的。

    w3c:width 和 height 属性,就是单纯的内容的宽高,padding 是内容之外的附加值。

    IE标准盒模型 w3c标准盒模型

          我发现我以前总是记得有点混乱。现在绝对不会忘记了。box-sizing属性可以定义要使用哪种盒模型

    解决这个问题分方法1:不要给元素添加具有指定宽度的内边距,尝试将内边距或者外边距添加到元素的父元素或者子元素。

    方法2:待补充??

    2-对box-sizing进一步了解:

    box-sizing:content-box | border-box  (默认值为:content-box)

    不具有继承性,适用于所有可以用属性width 和 height 的元素

    content-box:padding和border不被包含在定义的width和height之内。对象的实际宽度等于设置的width值和border、padding之和,即 ( Element width = width + border + padding )此属性表现为标准模式下的盒模型。就是上面的w3c标准的盒模型。

    border-box:padding和border被包含在定义的width和height之内。对象的实际宽度就等于设置的width值,即使定义有border和padding也不会改变对象的实际宽度,即 ( Element width = width )此属性表现为怪异模式下的盒模型。 同上面IE 标准的盒模型。

    插入一下标准和怪异盒模型的实例代码和盒模型:

    标准 怪异
    .test1{
        box-sizing:content-box;
        width:200px;
        padding:10px;
        border:15px solid #eee;
    }

    .test1{
        box-sizing:border-box;
        width:200px;
        padding:10px;
        border:15px solid #eee;
    }

    box-sizing的兼容性如下:

    3-外边距叠加

    概念:当两个或者是更多个垂直外边距相遇时,他们将形成一个外边距,这个外边距的高度等于两个发生叠加的外边距的高度重视的较大者。(当一个元素位于另一个元素上方时,第一个元素的底外边距会和第二个元素的顶外边距发生叠加。)

    测试如下:

    代码
    <!DOCTYPE html>
    <html>
        <head>
            <title>css bug 测试</title>
            <meta charset = "utf-8">
            <style type="text/css">
                .box-top{
                    width: 50px;
                    height: 50px;
                    background-color: red;
                    margin: 30px;
                }
                .box-bottom{
                    width: 50px;
                    height: 50px;
                    background-color: green;
                    margin: 20px;
                }
            </style>
        </head>
        <body>
            <div class="box-top"></div>
            <div class="box-bottom"></div>
        </body>
    </html>
     图片结果

    外边距的叠加问题在水平方向是没有问题的。

    当两个元素为父子元素时,并且没有边框或者内边距将两个外边距分隔开,他们的顶和底外边距也会发生叠加。

    如下例子所示:

    代码
    <!DOCTYPE html>
    <html>
        <head>
            <title>css bug 测试</title>
            <meta charset = "utf-8">
            <style type="text/css">
                .box-top{
                    width: 50px;
                    height: 50px;
                    background-color: red;
                    margin: 30px;
                }
                .box-bottom{
                    width: 30px;
                    height: 30px;
                    background-color: green;
                    margin-top: 20px;
                    border: 1px solid red;
                }
            </style>
        </head>
        <body>
            <div class="box-top">
                <div class="box-bottom"></div>
            </div>
            
        </body>
    </html>
    示例图1

    示例图2

    tips:之前在写代码的时候,会发现这样的问题。却不知道是什么问题。理所应当的认为第一个div是相对浏览器定位的,而第二个div是相对第一个的,因为它是它的子元素。但是变化div2的外边距却怎么也不对。查了资料才知道是外边距叠加。要解决这个问题的方法为:

    触发block formatting context即可,触发的方法:
    1. float不为none
    2. overflow不为visible
    3. display设为‘table-cell’, ‘table-caption’, 或‘inline-block’
    4. position既不是static也不是relative
    5. zoom:1, IE的hasLayout特性会建立一个新的block formatting context
    (作者:张克军
    链接:http://www.zhihu.com/question/19823139/answer/13079933
    来源:知乎)
     
     
     

    注:只有普通文档流中块框的垂直外边距才会叠加,行内框,浮动框和绝对定位框之间的外边距是不会叠加的!

  • 相关阅读:
    structInMemory
    合并字符串
    eggs
    1005. Spell It Right (20) -PAT
    60 人工智能
    50 计算机网络
    20数据结构
    40操作系统
    10 C/C++/python
    30汇编
  • 原文地址:https://www.cnblogs.com/lal-fighting/p/5598204.html
Copyright © 2020-2023  润新知