width:100%和width:inherit (实用,赞)

205 篇文章 0 订阅
191 篇文章 0 订阅

原文出处:https://www.cnblogs.com/ada-blog/p/7257406.html

前几天遇到过这么一个问题。我想让子盒子的宽度等于父盒子的宽度。
父盒子宽度为一个具体值比如说200px.我将子盒子宽度设为了100%。按道理说应该是可以等于父盒子的宽度的,但结果并没有,而是通栏了。然后我又将子盒子宽度设为了inherit结果宽度就是父盒子的宽度了。

HTML结构如下:

<body>
    <div class="parent">
        <div class="child">
            hello world
        </div>
    </div>
</body>

我想了很久没有想出来,后来请同事帮我一看。原来我的子盒子设了绝对定位,但父盒子没有设置相对定位。所以子盒子脱离了父盒子,导致子盒子的百分之百直接和body的宽度一致了。而子盒子虽然定位上脱离了文档流,但在节点树上他依然是父盒子的儿子,所以如果设置width:inherit的时候,浏览器会将父盒子的宽度赋值给他。

那么解决的办法有两种,一种是像我这样设置成width:inherit。这样的好处是节约代码,但有一点点小小的兼容问题。ie8以下的浏览器不支持inherit属性值。如果你们公司放弃IE8以下的兼容,那我觉得用inherit是很好的一种方式。
 

.parent{
    width: 300px;
    height: 300px;
    background: deeppink;        
}
.child{
    width: inherit;
    position: absolute;     // 子盒子设了绝对定位
    background: pink;
}

第二种就是在父盒子上加上相对定位,这种方法的好处是兼容性比较好,缺点就是代码量稍微多了两句,而且要细心一些不能像我一样忘记加相对定位
 

.parent{
          width: 300px;
          height: 300px;
          background: deeppink;
          position: relative;    // 父盒子加上相对定位
    }
.child{
          width: 100%;
          position: absolute;    // 子盒子设了绝对定位
          background: pink;
}


个人总结:

1、100% 是以参考定位的容器来计算;
2、inherit 是以DMO节点上的父容器来计算;
3、被参照盒子要显式声明height或width;
      例如:孙盒子想通过inherit获得爷爷盒子相同的height,父盒子要有height=100%或height=inherit 声明 

示例:
 

<div class="box box-1">
  <div class="box box-2">
    <div class="box box-3">
      Hello!
    </div>
  </div>
<div>

.box-1{
  width: 200px;
  height: 200px;
  background-color: red;
}

.box-2{
  background-color: yellow;

  height: inherit;      // 这行不能少
}

.box-3{
  background-color: green;
  height: inherit;
}

如果 .box-2 样式中没有:height: inherit;  ,效果如下左图, 加上如下右图,才是我们想要的效果



 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值