CSS | 盒模型的宽度计算规则

本文详细介绍了CSS盒模型中宽度的计算规则,包括不同类型的元素(如行内非替换元素、行内替换元素、块级非替换元素等)的width属性应用,以及margin、padding、border的影响。内容覆盖了auto值的处理、静态位置计算和绝对定位元素的宽度计算等核心概念。
摘要由CSDN通过智能技术生成

前言

以下内容默认以标准盒模型即content-box为标准。

width 属性

width 属性:
在标准盒模型中,width指定了盒的内容宽度(content width)

属性 取值
可选值 指定长 / 百分比 / auto / inherit
默认值 auto
适用元素 除非替换的行内元素,表格行和行组(row group) 外的所有元素
可继承性

取值含义:

取值 含义
auto 宽度取决于其它属性的值
指定长度 用具体长度指定内容区宽度,负值非法。
百分比 参照包含块的宽度,以百分比形式指定当前盒宽度。注意:1.如果包含块的宽度取决于该元素宽度,使用百分比布局是未定义的。2.绝对定位元素的百分比参考的是其第一个非static祖先元素的padding box宽度

详细计算规则

盒模型的总宽度计算中,将涉及元素的属性left, margin, padding, border, width, right,以下将根据不同盒类型和场景进行分类解析:
其中相对定位元素的left与right值的计算规则请参考相对定位下,盒偏移量计算规则

计算值与应用值

下面的表述将涉及计算值与应用值两个概念。
计算值是经过层叠的指定值,直白地说,即初始值,继承值和用户指定值三者中最终参与计算的值。
应用值为实际用于布局时的值。大多数时候,应用值与计算值是相同的,都会根据规则将auto替换成相应合适的值。但下文将遵循文档原文,以“当计算值为XXX,其应用值为XXX”的语句来描述规则。

行内非替换元素

  • width属性不适用。行内非替换元素的宽度由实际内容宽度决定。

  • 当margin-left/margin-right的计算值为auto时,其应用值为0

 span{
   
            margin: auto
      }

根据规则根据规则根据规则

行内替换元素,常规流中的替换inline-block,浮动的替换元素

  • 当margin-left或margin-right的计算值为auto时,其应用值为0

  • 当height和width计算值都为auto,若该元素具有固有宽度,width的应用值为固有宽度值。

  • 当height和width的计算值都为auto,若该元素没有固有宽度,但具有固有高度或指定高度值,且拥有固有比例;则width的应用值 = (高度的应用值) * (固有比例)

  • 当height和width的计算值都为auto,若该元素没有固有宽高,则width的应用值是未定义的。

常规流中的块级非替换元素

常规流中的块级非替换元素的宽度计算规则满足以下恒等式:
margin-left + border-left + padding-left+ width + padding-right + border-right + margin-right = 包含块宽度

其中 margin,padding,border的默认值为0
在这里插入图片描述
此计算规则与BFC中块级元素“独占一行”的特性相吻合

  • 当width不为auto且 border + padding + width < 包含块宽度时,若margin-left/margin-right均有指定值,则margin被过度约束
    此时,若包含块的direction为ltr,则margin-left的指定值有效,margin-right指定值无效,根据恒等式重新计算该值。若包含块的direction为rtl,则margin-right的指定值有效。
    示例:
    下例中,包含块direction为ltr,margin-left指定值有效。

在这里插入图片描述

  .container {
   
            direction: ltr;

            background: orangered;
            width: 200px;
            height: 200px;
            margin: 50px;
        }

        .son {
   
            margin-left: 10px;
            margin-right
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值