width:100%、width:auto、绝对定位、box-sizing:border-box、box-sizing:content-box 的混搭结论分析

3 篇文章 0 订阅

在开始之前,先回顾些知识点。

一、CSS盒模型

CSS的盒模型由外到内分别为 margin、border、padding、content。分为标准盒模型与IE盒模型,可使用 box-sizing 属性去切换盒模型。

  • 标准盒模型:box-sizing:content-box; 意味着该盒子的 width 包裹的是 content 盒子即 content 部分。
  • IE盒模型:box-sizing:border-box; 意味着该盒子的 width 包裹的是 border 盒子即 border + padding + content 部分。
    在这里插入图片描述

二、结论

这里给出几条实践后的结论

  1. 子元素设置为 width:100% 或 width:auto 将得到父元素 content 的宽度,子元素再进一步分配
  2. width:100%
    - 子元素的 width 为父元素的 content 的宽度。其中子元素的 width 遵循 box-sizing 的设置,分为 content-box 和 border-box 两种情况
    - 若子元素设置了 margin,将移动子元素,导致超出父元素 content 的区域
  3. width:auto
    - 无论 box-sizing 设置为哪种盒模型,表现形式为子元素的 margin + border + padding + content 等于父元素的 content 的宽度
  4. 绝对定位的情况:子元素绝对定位,父元素相对定位
    - 子元素的 width 为父元素 content + padding。其中子元素的 width 遵循 box-sizing 的设置,分为 content-box 和 border-box 两种情况

三、分析

<style>
  * {
    box-sizing: content-box; // 盒模型切换
  }
  .parent {
      height: 200px;
      width: 200px;
      padding: 10px;
      border: 20px solid red;
  }
  .child1 {
      width: 100%;
      padding: 10px;
      border: 20px solid blue;
      /* margin: 30px; */
  }
  .child2 {
      width: auto;
      padding: 10px;
      border: 20px solid blue;
      margin: 30px;
  }
</style>

<div class="parent">
  <div class="child1"></div>
</div>
<br>
<div class="parent">
  <div class="child2"></div>
</div>

width:100%

box-sizing:content-box; 子元素的 width(包含content)为父元素的 content,都为200px
在这里插入图片描述
box-sizing:border-box; 子元素的 width(包含content + padding + border)为父元素的 content,都为140px
在这里插入图片描述
设置了 margin 后,子元素移动 margin 距离为30px,超出父元素 content 部分刚好为 padding + border = 30px
在这里插入图片描述
width:auto
box-sizing:content-box; 子元素的 margin + border + padding + content 等于父元素的 content 的宽度,为200px
在这里插入图片描述

box-sizing:border-box; 子元素的 margin + border + padding + content 等于父元素的 content 的宽度,为140px
在这里插入图片描述
绝对定位:

<style>
	.parent2 {
		position: relative;
	    height: 200px;
	    width: 200px;
	    padding: 10px;
	    border: 20px solid red;
	}
	.child3 {
	    position: absolute;
	    width: 100%;
	    padding: 10px;
	    border: 20px solid blue;
        margin: 30px;
	}
</style>
<div class="parent2">
  <div class="child3">
  </div>
</div>

box-sizing:content-box; 子元素的 width(包含content)为父元素的 content + padding,都为220px在这里插入图片描述

box-sizing:border-box; 子元素的 width(包含content + padding + border)为父元素的 content + padding,都为160px
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值