box-shadow 設置后看不到的問題


引子

在修復問題的時候,發現一個元素設置了 box-shadow 屬性,其它的元素也有公用,但這個元素的陰影看不見,試着把顏色值變的更明顯,但還是看不到。問題示例,示例二維碼。

qrcode-question

問題原因

首先想到是不是屬性寫錯了,但其它的元素都正常顯示,這個是公用的樣式。那么是不是有樣式覆蓋呢?在瀏覽器中仔細看了下,樣式是有覆蓋,但沒有覆蓋 box-shadow 屬性。於是就仔細的跟正常顯示的元素進行對比,發現有一點不同:一個元素的父元素可以滾動,另外一個元素的父元素不可以滾動。於是嘗試把設置 overflow-y 屬性去掉,然后就好了!

雖然解決了問題,但想要明白其中的一些緣由,於是查找相關資料,發現了一些說明,感覺有用,下面是部分內容的翻譯。

外陰影投射陰影時,元素的邊框盒子好像是不透明的,假定擴散的距離是 0,它的邊界有着跟邊框盒子一樣的大小和形狀。陰影從邊框外邊界繪制,陰影在元素盒子邊框內側被剪切。

內陰影投射陰影時,內邊距邊界之外的一切好像都是透明的,假定擴散的距離是 0,它的邊界有着跟內邊距盒子一樣的大小和形狀。陰影從內邊距邊界內側繪制,陰影在元素內邊距盒子之外被剪切。

陰影效果從前到后應用:第一個陰影在最頂層,其它的在這個陰影的下層。陰影不會影響布局,可能會與其它盒子重疊或者跟他們自己的陰影重疊。從內容堆疊和繪制順序來說,一個元素外陰影,會立即在元素背景之下繪制,內陰影會立即在元素的背景之上繪制,如果有邊框的話,內陰影也會在邊框和邊框背景圖片之下。

根據以上的內容,結合遇到的問題,就得出了一個想法:既然陰影的繪制不會影響布局,那么是不是說陰影並不會占據實際的空間。測試示例,示例二維碼。

qrcode-space

由此可見,陰影是不占據正常文檔流里面的空間。

再回到問題上來,父元素設置了 overflow 屬性,其值除了 visible 之外,當內容超過了內邊距時都會被剪切掉。其子元素的高度、寬度和父元素一樣,子元素設置 box-shadow 時,繪制的陰影從子元素的邊框邊界向外繪制,子元素邊界跟父元素的邊框邊界相同,繪制出的陰影超出了父元素的內邊距邊界,被屬性 overflow 的作用剪切掉了,就出現了看不見陰影的現象。

相關資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM