2014-12-07 64 views
1

我有一個CSS3陰影的問題,我以前沒有看過。 它看起來像一個盒子陰影,通過:before和:after選擇器應用於div,只有在div的容器沒有背景色設置的情況下才有可能。CSS3:只有沒有父背景的陰影

有什麼辦法可以做到這一點嗎?

<div class="container">  
    <div class="shadow-box"> 
     test 
    </div> 
</div> 

.container不得有背景顏色集。我在http://jsfiddle.net/v1utr15n/上創建了一個示例

+0

爲什麼不把陰影框內的陰影代碼? – MartaGom 2014-12-07 10:33:35

+1

我認爲這與'z-index'屬性沒有正確設置有關。陰影呈現在'.container'下面。當你在'.container'上設置一個'background-color'時,它將是不透明的,因此覆蓋陰影。順便給'.container添加一個不透明度:0.99'似乎可以解決它。這可能會指導你瞭解什麼是錯誤的 – ckuijjer 2014-12-07 10:41:48

回答

1

您需要確保該.container將開始一個新的堆疊順序。您可以通過設置position: relative; z-index: 0或除1之外的不透明度來完成此操作,例如opacity: .9999

.container { 
 
    background-color: #fff; 
 
    height: 500px; 
 
    position: relative; 
 
    z-index: 0; 
 
} 
 
.shadow-box { 
 
    background-color: #fff; 
 
    position: relative; 
 
    width: 300px; 
 
    height: 300px; 
 
} 
 
.shadow-box:before, 
 
.shadow-box:after { 
 
    content: ""; 
 
    position: absolute; 
 
    z-index: -1; 
 
    -webkit-box-shadow: 0 0 20px rgba(0, 0, 0, 0.3); 
 
    -moz-box-shadow: 0 0 20px rgba(0, 0, 0, 0.3); 
 
    box-shadow: 0 0 20px rgba(0, 0, 0, 0.3); 
 
    top: 50%; 
 
    bottom: 0; 
 
    left: 10px; 
 
    right: 10px; 
 
    -moz-border-radius: 100px/10px; 
 
    border-radius: 100px/10px; 
 
}
<div class="container"> 
 
    <div class="shadow-box"> 
 
    test 
 
    </div> 
 
</div>

對於在z-index和堆疊順序上下文的一些背景信息,請參見http://philipwalton.com/articles/what-no-one-told-you-about-z-index/

+0

非常感謝!另外,感謝有趣的背景資料! – schlimpf 2014-12-07 11:46:51

+0

不客氣! – ckuijjer 2014-12-07 11:58:39

0

將陰影框的代碼放在陰影框類中,而不是在之前或之後。

網址:http://jsfiddle.net/v1utr15n/1/

.container { 
 
    background-color: #fff; 
 
    height: 500px; 
 
} 
 
.shadow-box { 
 
    background-color: #fff; 
 
    position: relative; 
 
    width: 300px; 
 
    height: 300px; 
 
    -webkit-box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); 
 
    -moz-box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); 
 
    box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); 
 
} 
 
.shadow-box:before, 
 
.shadow-box:after { 
 
    content: ""; 
 
    position: absolute; 
 
    z-index: -1; 
 
    top: 50%; 
 
    bottom: 0; 
 
    left: 10px; 
 
    right: 10px; 
 
    -moz-border-radius: 100px/10px; 
 
    border-radius: 100px/10px; 
 
}
<div class="container"> 
 
    <div class="shadow-box"> 
 
    Shadow box 
 
    </div> 
 
</div>

+0

這當然會起作用,但會形成完全不同的影子,這不是我的意圖。在我的小提琴中刪除.container的背景顏色來試試吧 – schlimpf 2014-12-07 10:37:41

+0

¡我現在明白你的意思。我想...(謝謝你糾正CKUjjer) – MartaGom 2014-12-07 10:41:06

+0

不知道我明白,但你嘗試.container:background-color:rgba(255,255,255,0); ? – 2014-12-07 10:49:58