2017-07-05 95 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 –