width:100%和width:inherit

前几天遇到过这么一个问题。我想让子盒子的宽度等于父盒子的宽度。父盒子宽度为一个具体值比如说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;
    }
时间: 2024-10-12 21:20:18

width:100%和width:inherit的相关文章

CSS的width:100%和width:auto区别

CSS的width:100%和width:auto区别 一.   问题 前段时间在调整树结构的时候,发现如果树的节点名称比较长的话在IE6下则不会撑开外面的元素,导致节点的名称只显示了一半,同时图标和名称换行显示了,但是在IE8和IE9下则显示正常.定位到问题后,最终发现是下面的属性导致的,如下图红色所致,把width的值设置为auto后即可解决问题: .TreeView,.TreeView ul{ padding:0px 0px 0px  19px; list-style:none; marg

css width=&quot;100&quot; style =&quot;width:100px&quot; 区别

1. width="100"是正确的,而 width="100px"是错误的, style = "width:100px"是正确的 2. style ="width:100px"优先级较高 3. 只有有限的元素支持width="100"属性,例如table, td等 4. JQuery中获取width如下 <div style="width:200px;height:200px;"

css中width:auto和width:100%的区别是什么

width的值一般是这样设置的: 1,width:50px://宽度设为50px 2,width:50%://宽度设为父类宽度的50% 3,还有一个值是auto(默认值),宽度是自动的,随着内容的增加而增加,随着浏览器的宽度而换行 width:auto和width:100%的区别: 一.width:auto 1.块级元素默认的宽度值,意味着浏览器会自己选择一个合适的宽度值. 2.内容的宽度='margin-left' + 'border-left-width' + 'padding-left'

width:100%与绝对定位同时存在,偏移出父级容器

当父级容器内的子元素width设为100%,而子元素又有绝对定位时,子元素伸展超出父级容器,像下面 出现这种情况的原因,width:100%,这个百分之百是相对其定位父级而言的,其定位父级有多宽,这个子元素就有多宽,所以子元素跑到了父级容器外 html <div class="container"> <div class="content">好的</div> </div> css .container { positi

web前段设计之痛:手机浏览器和pc浏览器的width:100%的自适应问题

Tips: 调试 iPad 或 iPhone 可在设置中启动调试模式,在 Mac 中的 Safari 浏览器 同样开启开发者模式后,进行联机调试.功能彪悍. 最近在做一个页面时,发现在 iPad 的 Safari 浏览器中背景显示不全,定位到该 div 后发现所指定 css 的宽度为 100% : 到百度搜索后发现,safari 中 viewport 默认宽度为 980px,若事先未指定其初始 viewport 宽度,则会默认按照 980px 处理. 可以默认初始化 viewport 宽度或在

CSS width:100%和width:auto的区别

width:100%和width:auto的区别 width:auto比较聪明,如果margin已经左右占去10px的空间,那么width给的值就是580px. <style> div{ width:600px; overflow:auto; background:#ccc; } p{ width:auto; margin:10px; background:red; } </style> </head> <body> <div> <p>

style=&quot;width:100px&quot; 和width=100 异同

异: 1.width属性不是每个元素都支持的,一般就table和body支持. 2.style="width: 100px"是CSS样式. 2.1.CSS样式有多种方式设置,直接写成这个样子属于内联CSS,也可以把这个提出来单独放到<style>里 <html> <head>    <style>      .mydiv { width: 100px; }      div { background-color: #ddd; margin

width:100%缩小窗口时背景图片出现空白bug

页面容器(#wrap)与页面头部(#header )为100%宽度.而内容的容器(#page)为固定宽度960px.浏览窗口缩小而小于内容层宽度时会产生宽度理解上的差异.如下图所示窗口宽度大于内容层宽度: 改变浏览器窗口的大小,小于内容层宽度,如下图所示. 拖动水平滚动条,出现了bug的样子.右边的背景不存在了.如下图所示. 问题的根本在于:当窗口缩小时,浏览器默认100%宽度为浏览器窗口的宽度.而忽略了下部内容层固定宽度(960px).从而出现了固定宽度大于100%宽度的现象.浏览以此理解来解

width:auto; 和 width:100%;的不同

width:auto:会将元素撑开至整个父元素width,但是会减去子节点自己的margin,padding或者border的大小.width:100%:会强制将元素变成和父元素一样的宽,并且添加额外的空间到这个元素的width上.就是因为这个,会导致很多问题. 使用width:100%永远都不是一个好主意.这个属性容易让人产生你正在定义一个元素可视大小,其实,你是在对这个元素的状态做了巨大的改变. 块元素会填满其父元素的整个width,因为块元素默认的是width:auto;的. See th