position:fixed导致元素比浏览器宽

Col*_*byd 9 html css

任何人都可以告诉我为什么position:fixed导致元素比浏览器或页面上的其他内容更宽并导致水平滚动?

这是代码HTML

<header>
     this is a header
</header>

<div class="container">
     this is a container
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

 header {
      width: 90%;
      height: 100px;
      background: blue;
      position: fixed;
      z-index: 100;
 }

.container {
     width: 90%;
     height: 500px;
     background: red;
     position: relative;
     z-index: -2;
}
Run Code Online (Sandbox Code Playgroud)

这是codepen http://codepen.io/colbydodson/pen/wcgua的链接

Rok*_*jan 10

这是因为宽度不同地应用于relativefixed元素取决于容器margin和父可继承的样式属性 - 分别对应于它们的position属性,例如(你猜对了)width.

由于,如果你不使用任何CSS复位这样丑陋的家伙*{margin:0; padding:0;}
body标签将它的默认加上了8px利润率(http://www.w3.org/TR/CSS2/sample.html)

header固定,而无需任何top,left,rightbottom值将被定位为最接近的可用的地方- >但将继承文件/视口尺寸,使得它确实90%宽,只是定位在10px的"身体"余量抵消.

为了测试增加top:0; left:0;固定 header http://jsbin.com/ETAqADu/1/edit


.container作为block设置为relative位置的级别DIV元素,将是可用父级可用宽度的90%宽度,即bodyinnerWidth(不计算10 + 10px边距(X轴))

结果:逻辑上header将比.container原因位置宽20px 将元素移出body流量.

修复:逻辑上,body通过设置为0来控制parent()元素的默认边距

  • 优秀的解释. (3认同)

wil*_*lma 6

我只在移动设备上遇到了类似的问题.尽管没有边距,边框,任何父母的填充,我的固定元素仍然比视口宽,我没有选择使用width: auto.

如果您愿意不支持IE8及以下版本,您可以使用

width: 100vw
Run Code Online (Sandbox Code Playgroud)

我可以使用Viewport单位:vw,vh,vmin,vmax