CSS的一個有趣(但令人煩惱)特性是,子元素的背景可能會溢出父元素的圓角邊框。例如,一個包含內部元素的卡片,如果內部元素設置了背景,其背景可能會溢出卡片的邊框。
通常解決這個問題最簡單的方法是為卡片元素添加overflow: hidden
屬性。我相信這是大多數人在遇到這種情況時首先想到的解決方案。
但是,這樣做會產生一個新問題——卡片元素外部的內容會被裁剪掉——因此無法使用負邊距或position: absolute
來將子元素的內容移出卡片。
有一種稍微繁瑣但更有效的方法可以防止子元素的背景溢出父元素的圓角邊框,那就是為子元素添加相同的圓角邊框。
最簡單的方法是允許子元素繼承父元素的圓角邊框:
.child { border-radius: inherit; }
如果border-radius
簡寫太冗長,你仍然可以根據情況分別繼承四個角的圓角半徑:
.child { border-top-left-radius: inherit; border-top-right-radius: inherit; border-bottom-left-radius: inherit; border-bottom-right-radius: inherit; }
或者,對於那些願意使用邏輯屬性的人,這裡有等效的代碼。 (為了更容易理解邏輯屬性,將top
和left
替換為start
,將bottom
和right
替換為end
。)
.child { border-start-start-radius: inherit; border-start-end-radius: inherit; border-end-start-radius: inherit; border-end-end-radius: inherit; }
如果.card
元素本身包含border-radius
並直接設置背景,也能達到相同的效果。那麼,為什麼不這樣做呢?
嗯,有時你做不到。例如,當你的.card
元素被分成兩部分,只有一部分著色時。
安心可能是最好的理由。至少,你知道你不會在以後使用圓角半徑調整方案時創建問題。
當CSS錨點定位獲得完全支持時,這種模式將特別有用。我預計這將在1-2年內很快成為彈出式窗口定位的規範。
也就是說,對於彈出式窗口,我個人更傾向於將彈出式窗口內容從文檔流中移出,並作為直接子元素放入元素中。通過這樣做,當使用錨點定位時,我可以防止
overflow: hidden
裁剪掉任何彈出式窗口。
以上是用繼承的邊框半徑解決背景溢出的詳細內容。更多資訊請關注PHP中文網其他相關文章!