zoukankan      html  css  js  c++  java
  • css盒模型

    1.盒模型基本概念:content padding border margin

    2.标准盒模型和IE盒模型

    标准模型中,盒模型的宽高只是内容(content)的宽高

    IE模型中盒模型的宽高是内容(content)+填充(padding)+边框(border)的总宽高

    3.css如何设置两种盒模型

    /* 标准模型 */
    box-sizing:content-box;
    
     /*IE模型*/
    box-sizing:border-box;

    4.js获取元素的宽高

          元素宽高设置方式:内联样式,元素节点样式,外联样式

    • dom.style.width/height                                            只能取到dom元素内联样式所设置的宽高
    •  dom.currentStyle.width/height                               三种样式设置方式的值都能取到,只支持IE
    •  window.getComputedStyle(dom).width/height      三种样式设置方式的值都能取到,各浏览器兼容
    •  dom.getBoundingClientRect().width/height     根据元素在视窗中的绝对位置来获取宽高的
    •  dom.offsetWidth/offsetHeight                                最常用的,也是兼容最好的

    5.边距重叠

    父子元素间:子元素的margin-top会使父元素高度只有子元素高度那么高

    兄弟元素间:兄元素的下边距和弟元素的上边距重叠,取两者中的较大值较大值

    空元素:空元素的上下边距重叠,中两者中的较大值

    6.BFC

    概念:BFC全英文拼写为 Block Formatting Context 直译为“块级格式化上下文”

    原理:

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

    创建BFC的css方法:

    • 根元素或其它包含它的元素
    • float属性不为none
    • position属性为absolute或fixed
    • display属性为inline-block、table-cell、table-caption、flex、inline-flex
    • overflow属性不为visible

    BFC用途:

    • 自适应两栏布局
    • 清除内部浮动
    • 防止垂直margin重叠

    自适应两栏布局

    <style >
    body{
      position: relative;
      height: 400px;
    }
    .aside{
      height: 200px;
      width: 200px;
      background-color: pink;
      float: left;
    }
    .main{
      background-color: grey;
      height: 300px;
    }
    </style>
    <body>
        <div class="aside"></div>
        <div class="main"></div>
    </body>

    根据BFC原理的第三条:每个元素的margin box的左边,与包含块border box的左边相接触(对于从左到右的格式化,否则相反)。即使存在浮动也是如此。因此,即使存在浮动的aside,但是main还是与包含块的左边相接触;

    按照BFC原理的第四条:BFC的区域不会与float box重叠。因此,可以通过使main触发BFC,来实现自适应两列布局

    .main{
      overflow: hidden;
    }

    当main触发BFC后,其不会与浮动的aside重叠。因此会根据包含块的宽度和aside的宽度,自动变窄,效果如下:

    清除内部浮动

    当子元素均浮动时,其无法撑开父元素,此时可以让父元素生成BFC,如下:

    <style>
        .par {
            border: 5px solid #fcc;
            width: 300px;
        }
     
        .child {
            border: 5px solid #f66;
            width:100px;
            height: 100px;
            float: left;
        }
    </style>
    <body>
        <div class="par">
            <div class="child"></div>
            <div class="child"></div>
        </div>
    </body>

    根据BFC原理的第六条:计算BFC的高度时,浮动元素也参与计算。因此为了达到清除内部浮动,可以让.par触发BFC,那么计算par的高度时,浮动元素也参与计算,par就被撑开了。

    .par{
        overflow: hidden;
    }

    防止margin重叠

    <style>
        p {
            color: #f55;
            background: #fcc;
            width: 200px;
            line-height: 100px;
            text-align:center;
            margin: 100px;
        }
    </style>
    <body>
        <p>Haha</p>
        <p>Hehe</p>
    </body>

    可以发现,两个p元素之间的垂直margin出现了重叠。根据BFC的第二条规则:Box垂直方向的距离由margin决定,属于同一BFC的两个Box会发生margin重叠。因此,可以在其中一个p上包裹容器,然后触发其BFC,这样两个p就不在同一个BFC,就不会发生重叠。

    <style>
        .wrap {
            overflow: hidden;
        }
        p {
            color: #f55;
            background: #fcc;
            width: 200px;
            line-height: 100px;
            text-align:center;
            margin: 100px;
        }
    </style>
    <body>
        <p>Haha</p>
        <div class="wrap">
            <p>Hehe</p>
        </div>
    </body>

  • 相关阅读:
    高斯消元算法
    Fermat小定理的证明
    Pollard Rho 算法简介
    做一些无聊的题
    永远不要相信自己的傲慢
    笔记-数据结构进阶
    笔记-区间问题
    线段树板子
    [DarkBZOJ3694] 最短路
    [CF321D] Ciel and Flipboard
  • 原文地址:https://www.cnblogs.com/sghy/p/9635080.html
Copyright © 2011-2022 走看看