是否有辦法完全禁用邊界摺疊?我發現的唯一解決方案(通過名稱「uncollapsing」)需要使用1px邊框或1px填充。我覺得這是不可接受的:無關的像素使計算複雜化,沒有理由。有沒有更合理的方法來禁用這個邊緣摺疊?如何禁用邊緣摺疊?
回答
主要有兩種類型的保證金崩潰:在相鄰元件之間
- 摺疊利潤率
- 摺疊父和子元素
之間的利潤使用填充或邊框將防止崩潰只在後一種情況。此外,overflow
與應用於父級的默認值(visible
)不同的值將防止崩潰。因此,overflow: auto
和overflow: hidden
都具有相同的效果。也許使用hidden
時唯一的區別是隱藏內容的意想不到的後果,如果父母具有固定的高度。
,一旦應用於父其它性能,可以幫助解決這個問題是:
float: left/right
position: absolute
display: inline-block
你可以在這裏測試他們都: http://jsfiddle.net/XB9wX/1/。
我應該補充說,像往常一樣,Internet Explorer是個例外。更具體地說,在爲父元素指定某種佈局時,IE 7邊距不會摺疊,例如width
。
來源:SitePoint的文章Collapsing Margins
overflow:hidden
可以防止塌陷餘量,但它不是免費的副作用 - 即它...隱藏溢出。
除了這個以及你所提到的,你只需要學習它們,並在今天學習,當他們真正有用(每3到5年)。
已經把我的答案INT o社區wiki。我想我已經在第二段的最後兩行中提到了你提到的副作用:_或許使用隱藏的唯一區別是隱藏內容的意想不到的結果,如果父對象具有固定的height_。但如果您覺得需要進一步澄清,請隨時參與。謝謝。 – hqcasanova
'overflow:auto'很好用來防止隱藏溢出,並且仍然可以防止收縮邊距。 – Gavin
您也可以使用這個好老微clearfix。
#container:before, #container:after{
content: ' ';
display: table;
}
見更新小提琴:基於http://jsfiddle.net/XB9wX/97/
已將我的答案轉化爲社區wiki。請隨意用您的答案來擴展它。謝謝。 – hqcasanova
我不明白這一點,當我查看示例中的利潤正在崩潰(只有div的,而不是20像素之間10px的垂直空間) – Andy
這有助於僅去除兄弟姐妹,所有已應用此clearfix之間的崩潰。我已經舉了一個例子來證明這一點:http://jsfiddle.net/dpyuyg07/ ---即使這不是全部。它只會消除源自應用修復程序的元素的子元素的利潤率的崩潰。如果你想補充容器本身的利潤率仍然會崩潰,可以在這個叉子上可見保證金:http://jsfiddle.net/oew7qsjx/ – NicBright
每一個WebKit瀏覽器應該支持的屬性-webkit餘裕崩潰。還有一些子屬性只能將其設置爲頂部或底部邊距。您可以將值設爲collapse(默認值),放棄(如果存在相鄰邊距,則將邊距設置爲0),並將其分隔(防止邊距摺疊)。
我測試過這個版本適用於2014版Chrome和Safari。不幸的是,我不認爲這會在IE中被支持,因爲它不是基於webkit。
閱讀Apple's Safari CSS Reference有完整的解釋。
如果您檢查Mozilla's CSS webkit extensions page,它們將這些屬性列爲專有,並建議不要使用它們。這是因爲他們很可能不會很快進入標準CSS,只有基於webkit的瀏覽器纔會支持它們。
這很好,因爲它可以幫助我們消除Safari和Chrome處理邊距時的不一致性。 – bjudson
一個巧妙的方法來禁用保證金崩潰不具有視覺衝擊力,因爲據我所知,在父的填充設置爲0.1px
:
.parentClass {
padding: 0.1px;
}
的填充不再是0,所以壓扁贏得」 t發生了,並且填充小於0.5px,因此在視覺上它將舍入爲0.
如果需要其他填充,則僅將填充應用於不需要使用邊緣摺疊的「方向」,例如padding-top: 0.1px;
。
工作例如:
.noCollapse {
padding: 0.1px;
}
.parent {
background-color: red;
width: 150px;
}
.children {
margin-top: 50px;
background-color: lime;
width: 100px;
height: 100px;
}
<h3>Border collapsing</h3>
<div class="parent">
<div class="children">
</div>
</div>
<h3>No border collapsing</h3>
<div class="parent noCollapse">
<div class="children">
</div>
</div>
這是我最喜歡的解決方案。您甚至可以將其作爲默認樣式。爲什麼不? '* {填充頂:0.1px}'。我們確定它可以在所有瀏覽器中使用嗎? –
到目前爲止我的工作還算不錯,但我並沒有聲稱在大多數瀏覽器中對它進行了徹底的測試。 –
非常好的解決方案,它似乎在大多數瀏覽器上按預期工作。感謝分享! – wiredolphin
我知道,這是一個很老的文章,但只是想說,使用父元素Flexbox的將禁用保證金坍塌其子元素。
不僅對於它的子元素 - 它還防止父母和第一個和最後一個孩子之間的邊緣崩潰。 –
我有類似的問題,因爲家長有position
設置爲相對邊緣崩潰。以下是可用於禁用邊緣摺疊的命令列表。
這裏是操場自我測試
剛剛嘗試任何parent-fix*
類分配給div.container
元素,或任何一類children-fix*
到div.margin
。選擇最適合您需求的產品。
當
- 保證金倒塌是禁用,
div.absolute
用紅色背景將被放置在頁面的最頂端。 - 利潤率崩潰
div.absolute
將被定位在相同的Y座標爲div.margin
html, body { margin: 0; padding: 0; }
.container {
width: 100%;
position: relative;
}
.absolute {
position: absolute;
top: 0;
left: 50px;
right: 50px;
height: 100px;
border: 5px solid #F00;
background-color: rgba(255, 0, 0, 0.5);
}
.margin {
width: 100%;
height: 20px;
background-color: #444;
margin-top: 50px;
color: #FFF;
}
/* Here are some examples on how to disable margin
collapsing from within parent (.container) */
.parent-fix1 { padding-top: 1px; }
.parent-fix2 { border: 1px solid rgba(0,0,0, 0);}
.parent-fix3 { overflow: auto;}
.parent-fix4 { float: left;}
.parent-fix5 { display: inline-block; }
.parent-fix6 { position: absolute; }
.parent-fix7 { display: flex; }
.parent-fix8 { -webkit-margin-collapse: separate; }
.parent-fix9:before { content: ' '; display: table; }
/* Here are some examples on how to disable margin
collapsing from within children (.margin) */
.children-fix1 { float: left; }
.children-fix2 { display: inline-block; }
<div class="container parent-fix1">
<div class="margin children-fix">margin</div>
<div class="absolute"></div>
</div>
這裏是jsFiddle與例如,您可以編輯
爲了您的您可以使用01的信息格但副作用:)
.parent {
display: grid
}
其實,有一個完美的作品:
顯示:彎曲;柔性方向:列;
只要你可以只支持IE10生活和高達
.container {
display: flex;
flex-direction: column;
background: #ddd;
width: 15em;
}
.square {
margin: 15px;
height: 3em;
background: yellow;
}
<div class="container">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
<div class="container">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
- 1. 可摺疊樹D3的邊緣
- 2. flexbox邊緣在兒童之間摺疊
- 3. 浮動元素摺疊邊緣
- 4. 添加邊緣摺疊以COSE佈局
- 5. Firefox中的摺疊邊緣對齊
- 6. UIImageView的摺疊/捲曲邊緣
- 7. 如何使代碼摺疊工作從邊緣?
- 8. 邊緣疊加
- 9. 摺疊邊框
- 10. 如何平滑曲折線的邊緣?
- 11. 如何「軟化」折線的邊緣?
- 12. 如何禁用Emacs中的邊緣?
- 13. 在IE8上僅使用jQuery幻燈片效果摺疊邊緣
- 14. 是否可以使用CSS創建邊緣或摺疊?
- 15. 如何使邊緣在Graphviz中重疊?
- 16. 禁用ExpandableListView的摺疊
- 17. 爲什麼getComputedStyle不考慮邊緣摺疊?
- 18. Graphviz重疊邊緣標籤
- 19. d3邊緣重疊節點
- 20. 邊緣標籤重疊
- 21. VIM語法摺疊:禁用摺疊多行註釋
- 22. Flexbox中的邊距摺疊
- 23. 可摺疊邊距HTML/CSS
- 24. React JS:可摺疊邊欄
- 25. 平滑摺疊邊欄
- 26. 如何摺疊/摺疊UITableView的部分?
- 27. 用CSS清除修復和未摺疊的邊緣而沒有副作用?
- 28. CSS邊框半徑和邊框摺疊
- 29. 使用margin的CSS邊距摺疊:auto;
- 30. 實現css可摺疊禁用
使用Flex或網格佈局,其中利潤率倒塌不存在:HTTPS: //stackoverflow.com/a/46496701/3597276 –
時,只需提供元素值'保證金bottom'但留下'保證金top'爲0 –