2017-07-05 65 views
0

我需要让子div泄漏父容器的最大宽度。 现在,我只能泄漏父母填充(知道它)。div泄漏父容器最大宽度

我需要这个包装容器上的所有页面,并使一些部分泄漏。

没有这个,我将需要在每个部分设置容器。

下面是一些片段

Better snippet on codepen

.container { 
 
    max-width: 500px; 
 
    margin: 0 auto; 
 
    padding: 0 30px; 
 
    background: lightblue; 
 
} 
 

 
.child { 
 
    background: lightcoral; 
 
    height: 200px; 
 
} 
 

 
.child.cancel-padding { 
 
    margin: 0 -30px; 
 
} 
 

 
.child.leaked { 
 
} 
 

 
html, 
 
body { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
* { 
 
    text-align: center; 
 
    font-family: sans-serif; 
 
}
<small>note: see in fullscreen or on codepen</small> 
 
<h1>what i have</h1> 
 
<div class="container"> 
 
    <div class="child">A element inside a container</div> 
 
</div> 
 

 
<h1>what i need</h1> 
 
<div class="container-leaked"> 
 
    <div class="child leaked"> 
 
    a element inside the container, but leaking all view width (100vw) 
 
    </div> 
 
</div> 
 

 
<h1>what i can do now</h1> 
 
<div class="container"> 
 
    <div class="child cancel-padding">Make the element cancel the parent padding, that's all</div> 
 
</div> 
 

 
<h1>Why i need</h1> 
 
<p> 
 
    i will wrap all the page in the container, but sometimes i need sections to leak the container with full view width. 
 
</p>

注:在演示中,我已经设置了儿童身高,但我不会有控制权。这是一个动态内容div,所以高度是动态的。

回答

1

您可以通过使用相对定位做。事实上,你的容器上需要position: relative,并且你的孩子需要泄漏。然后,将您的孩子居中,使用

left: 50%; 
transform: translateX(-50%); 

这可以工作,因为您的容器是居中。因此,left: 50%将从其初始位置(即其父级的中心)将其左侧边缘移动到其父宽度的50%。然后,transform: translateX(-50%)会将您孩子的左侧边缘移动到其左侧宽度的50%。然后,您只需添加width: 100vw即可让您的孩子达到全宽。这里是片段:

.page { 
 
    position: relative; 
 
} 
 

 
.container { 
 
    max-width: 100px; 
 
    margin: 0 auto; 
 
    padding: 0 30px; 
 
    background: lightblue; 
 
    position: relative; 
 
} 
 

 
.child-leak { 
 
    height: 200px; 
 
    background: lightcoral; 
 
    position: relative; 
 
    left: 50%; 
 
    transform: translateX(-50%); 
 
    padding: 10px; 
 
    width: 100vw; 
 
} 
 

 

 
html, body{ 
 
    margin: 0; 
 
    padding: 0; 
 
    text-align: center; 
 
    font-family: sans-serif; 
 
}
<div class="page"> 
 
    <h1>My title</h1> 
 
    <div class="container"> 
 
    <div class="child-leak"> 
 
     My full width child 
 
    </div> 
 
    </div> 
 
    <div>Below content</div> 
 
</div>

这种技术用于水平中心的元素作品也为垂直居中。这样做是因为对顶部在%的值,离开底部第一个非静态父宽度和高度。另一方面,translate以%为值使用元素的宽度和高度。

+0

这太棒了!但总的来说,我不会控制孩子的身高。我只为示范设定高度,但我需要更多动态的东西。不过,这将有助于我控制孩子的身高。 –

+0

我已经更新了代码,它现在完全动态并且使用了非常好的技术来对一个元素进行居中。 –

+0

现在工作!感谢你这么好的想法。我不想使用转换,因为它会给内容带来一些限制,但这可以解决。我已经添加了框的大小到子元素(因为它是填充,它溢出了正文)。 +1 –

0

这里有一个方法,你可以尝试:

.container { 
 
    max-width: 500px; 
 
    margin: 0 auto; 
 
    padding: 0 30px; 
 
    background: lightblue; 
 
} 
 

 
.child { 
 
    background: lightcoral; 
 
    height: 200px; 
 
    width: 400%; 
 
    margin-left: -150%; /* (width of child - 100)/2 */ 
 
} 
 

 
html, 
 
body { 
 
    margin: 0; 
 
    padding: 0; 
 
    overflow: hidden; /* prevent horizontal scroll bar */ 
 
} 
 

 
* { 
 
    text-align: center; 
 
    font-family: sans-serif; 
 
}
<div class="container"> 
 
    <div class="child">I am outside the parent</div> 
 
</div>

+0

这是一个很好的方法,但是孩子泄漏太多了。我需要一些仍然适合视图宽度的东西。你可以考虑一个可以做到这一点的消极保证金数学吗? (你仍然知道容器填充和最大宽度,并有CSS的计算和断点) –

+0

你好,我已经创建了另一个相关的问题:https://stackoverflow.com/questions/48300255/section-leak-generating-horizo​​ntal - 滚动 –

1

这可能有点破解,但我之前通过添加:: before和:: after来完成。添加位置:相对于.child,然后添加下面的css

.child.leaked:before{ 
    content:""; 
    display: block; 
    position: absolute; 
    height: 100%; 
    width: 100%; 
    left: -100%; 
    background-color: red; 
    top: 0; 
} 

.child.leaked:after{ 
    content:""; 
    display: block; 
    position: absolute; 
    height: 100%; 
    width: 100%; 
    right: -100%; 
    background-color: red; 
    top: 0; 
} 
+0

附注,添加overflow-x:隐藏到身体,如果你没有它已经应用 – Rob

+0

使用这个工程,当我只有颜色块泄漏,但我仍然需要一种方法来泄漏真正的孩子,一些消除容器限制的东西。 –

+0

你好,我已经创建了另一个相关的问题:https://stackoverflow.com/questions/48300255/section-leak-generating-horizo​​ntal-scroll –