CSS盒模型笔记

作者: 听书先生 | 来源:发表于2021-07-18 22:42 被阅读0次

    css中盒子模型是重要的概念之一,页面中所有元素都可以看做为一个矩形盒子,这个盒子包含元素的内容、内边距、边框和外边距。
    内边距:是内容区周围的空间,给元素应用的背景会作用于元素内容内边距,因此,内边距通常用于分隔内容,使其不致于散布到背景的边界,边框会在内边距外侧增加一条框线,边框的外侧就是外边距,外边距:是围绕在盒子可见部分之外的透明区域,用于在页面中控制元素之间的距离。

    盒子大小

    默认情况下,元素盒子的width和height属性指的是内容盒子,也就是元素可渲染内容区的宽度和高度,这个时候添加边框和内边距不会影响盒子的大小,但会导致整个元素盒子变大,如果想给盒子的每一边都添加5px的内边距和边框,同时又想让元素盒子的宽度为100px,则应如下设置:

    .box {
      width:80px;
      padding:5px;
      border:5px solid #f0f0f0;
    }
    

    通过修改box-sizing属性可以改变计算盒子大小的方式,box-sizing的默认值为content-box,将宽度应用到内容区,通过修改box-sizing的值,设置元素的width和height属性,就可以影响元素盒子的不同区域。但是有些浏览器出于兼容性的考虑,会给一些表单元素应用不同的box-sizing默认值。
    如果把box-sizing的值修改为border-box,那么width和height属性的值将会包含内边距和边距,此时,外边距仍然会影响到盒子在页面中占据的整体空间,即它的宽度不会算到width中去。

    .box {
        box-sizing: border-box;
        width:100px;
        padding:5px;
        border: 5px;
    }
    

    把box-sizing设置为border-box,这种计算盒子大小的方式将会更加的直观,IE6以及更加早期的IE版本便是这样计算盒子宽度的。
    实际上,box-sizing的主要用途是应用在响应式布局中,可以通过设置box-sizing属性来覆盖默认行为,如:想要在父元素.pBox下的.cBox一直占据父元素宽度的一半,则只需要

    .pBox .cBox {
      width: 50%;
    }
    

    这样设置在子元素.cBox不设置边距的情况下是没有什么问题的,但是如果给.cBox加上内边距,则会打破原本设定的布局规则。


    image.png

    要解决这个问题,有两种解决途径,一种是增加一个内部元素,然后改为这个元素添加内边距,或者设置一个不同的box-sizing值,从而修改盒子宽度的计算方式。

    .pBox .cBox {
      width:50%;
      box-sizing:border-box;
      padding:20px;
    }
    

    box-sizing可以保证无论是否添加了内边距,内部盒子的宽度始终都是50%。

    最大值max-width和最小值mix-width

    使用最大值和最小值,块级盒子就可以默认自动填充父元素的宽度,但不会收缩到比min-width指定的值更窄,或者拓展到比max-width指定的值更宽

    可见格式化模型

    常见的p、h1和article这些元素都是块级的元素,意味着显示为内容块或块级盒子的形式,相对而言,strong、span和time这些元素就是被称为行内元素,因为他们的内容为行内盒子的形式显示在行内。
    CSS中存在有几种不同的定位模型,浮动、绝对定位和相对定位,除非特别指定,否则元素盒子都会在常规文档流中生成,即position属性的默认值为static。指的是常规文档流中元素盒子的位置由元素在html文档中的位置决定。

    匿名盒子

    多数的盒子都是基于明确定义的元素生成的,不过有一种情况,就算不明确定义元素也会生成块级盒子,如下,在section这个块级元素的开头加入一些文本,此时,这些文本就算没有定义为块级元素,也会被当成块级元素

    <section>
        something
        <p>more</p>
    </section>
    

    这个盒子就被称为匿名盒子,因为这个盒子并不与任何特定的元素相关。

    外边距折叠

    常规块盒子有一种机制叫做外边距折叠,外边距折叠是指的垂直方向上的两个外边距相遇时,会折叠为一个外边距,折叠后,外边距的高度等于两者中较大的那一个。


    image.png

    相关文章

      网友评论

        本文标题:CSS盒模型笔记

        本文链接:https://www.haomeiwen.com/subject/scdzpltx.html