是否有一种方法可以让父容器DIV中的子DIV比父容器DIV宽。子DIV需要与浏览器视口的宽度相同。

请看下面的例子:

子DIV必须作为父DIV的子DIV。我知道我可以在子DIV上设置任意的负边距,使其更宽,但我不知道如何从本质上使它100%的浏览器宽度。

我知道我能做到:

.child-div{
    margin-left: -100px;
    margin-right: -100px;
}

但我需要子节点的宽度与浏览器的宽度相同,浏览器是动态的。

更新

感谢您的回答,到目前为止,似乎最接近的答案是使子DIV位置:绝对,并将左右属性设置为0。

下一个问题是,我有父位置:相对,这意味着左右属性仍然是相对于父div,而不是浏览器,见示例这里:jsfiddle.net/v2Tja/2

我不能从父对象中删除position: relative而不搞砸其他所有东西。


当前回答

使用绝对定位

.child-div {
    position:absolute;
    left:0;
    right:0;
}

其他回答

很长一段时间以来,我一直在到处寻找这个问题的解决办法。理想情况下,我们希望子进程大于父进程,但不需要事先知道父进程的约束条件。

我终于找到了一个很好的答案。 逐字抄写:

这里的想法是:将容器推到容器的确切中间 浏览器窗口左:50%;,然后将其拉回左边缘 与负-50vw边际。

.child-div {
  width: 100vw;
  position: relative;
  left: 50%;
  right: 50%;
  margin-left: -50vw;
  margin-right: -50vw;
}

使用绝对定位

.child-div {
    position:absolute;
    left:0;
    right:0;
}

假设父元素有一个固定的宽度,例如#page {width: 1000px;}和居中#page {margin: auto;},如果你想让子窗口适应浏览器视口的宽度,你可以简单地做:

#page {
    margin: auto;
    width: 1000px;
}

.fullwidth {
    margin-left: calc(500px - 50vw); /* 500px is half of the parent's 1000px */
    width: 100vw;
}
.parent {
    margin:0 auto;
    width:700px;
    border:2px solid red;
}
.child {
    position:absolute;
    width:100%;
    border:2px solid blue;
    left:0;
    top:200px;
}

添加到Nils Kaspersson的解决方案,我正在解决垂直滚动条的宽度。我以16px为例,从视图宽度中减去16px。这将避免出现水平滚动条。

width: calc(100vw - 16px);
left: calc(-1 * (((100vw - 16px) - 100%) / 2));