當具有指定邊距值的HTML 元素嵌套在另一個容器元素中時,人們可能會期望父元素始終包圍邊緣。然而,這種期望並不總是能得到滿足。令人驚訝的行為出現了,父容器的某些特徵(例如邊框、定位或溢出設定)決定了是否包含邊距。
這種奇怪的行為引發了幾個問題:
為了解開這個謎團,讓我們深入研究 CSS 的深度和邊距相互作用的複雜性。
透過實驗,我們發現幾個CSS 屬性會影響邊距包含:
奇怪的是,這些觸發器與邊距屬性沒有直接關係。例如,實心邊框似乎不太可能影響邊距控制。
深入研究 CSS 邊距的 W3C 規範頁面,人們會期望找到一個清晰的答案對這種令人費解的行為的解釋。然而,令我們驚訝的是,規範並沒有提供所觀察到的行為的明確定義。
深入挖掘,我們發現規範混淆了兩個概念:
這種令人費解的組合產生了歧義,為
要理解邊距遏制背後的邏輯,我們必須查閱CSS 規範的「折疊邊距」部分。它指出:
"If the top and bottom margins of a box are adjoining, then it is possible for margins to collapse through it."
這意味著如果子元素的頂部和底部邊距接觸或重疊,它們將成為單一邊距。元素的位置取決於它與折疊邊距中其他元素的關係:
本質上,邊距的包含與「常規 div」的預設行為無關。相反,它取決於邊距、邊框、定位和溢出設定的相互作用。
邊距遏制的奧秘已被揭開,揭示了看似不一致的行為是由邊距崩潰的複雜規則。 CSS 規範中缺乏清晰的文件導致了混亂,需要進行大量的測試和實驗才能完全掌握 CSS 這個複雜方面的細微差別。
以上是為什麼邊距根據父元素屬性表現不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!