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>

 

posted @ 2018-09-12 15:31  枫叶布  阅读(429)  评论(0编辑  收藏  举报