2011-12-28 89 views
2

假設我有一個簡單的div,裏面有一些段落。文本上方的顯示框陰影

enter image description here

我想達到的DIV底部的漸變效果。

enter image description here


我試圖建立一個白色的影子

box-shadow: inset 0 -15px 10px white; 

但顯然這並不工作,因爲box-shadow總是下的文字出現。

如何在純CSS中完成此操作?

謝謝。

回答

2

我能夠複製僅適用於CSS的效果,但它是一個小的hackish:

http://jsfiddle.net/EaXTB/1/

我把兩個div作爲兄弟:

<div class="container"> 
    <div class="shadow"></div> 
    <div class="copy"> 
    <p>Lorem ipsum dolor sit amet, ...</p> 
    </div> 
</div> 

以及位於它們絕對:

.container { position:relative; } 

.shadow { 
    -webkit-box-shadow: inset 0px -15px 10px 0px rgba(255, 255, 255, 1); 
    -moz-box-shadow: inset 0px -15px 10px 0px rgba(255, 255, 255, 1); 
    box-shadow: inset 0px -15px 10px 0px rgba(255, 255, 255, 1); 
    height: 200px; 
    width: 300px; 
    z-index: 100; 
    position:absolute; 
} 

.copy { 
    max-height: 200px; 
    width: 300px; 
    overflow: hidden; 
    z-index: 0; 
    position: absolute; 
} 

唯一的麻煩就是對於這個工作時,您必須指定.shadow類的高度。如果它將始終是相同的大小,那麼你可以使用它。否則使用PNG覆蓋可能會更有效。

喜歡的東西:

.shadow { 
    background: url(overlay.png) repeat-x bottom; 
} 
+1

對.shadow類做'''top:0; right:0; bottom:0; left:0;'''而不是設置高度和寬度。不需要z-index。 – 2013-08-10 04:11:22

+1

http://jsfiddle.net/EaXTB/4/簡化版 – 2013-08-10 04:29:26

+0

這是不好的做法。它阻止文本,所以你不能選擇它。 – yarl 2016-12-10 23:35:46

0

在所有其他div下創建一個div,併爲該div和頂部投影設置負底部邊距。你可以做到這一點,或者你可以做我所做的。用淡出保存一個PNG圖像,並將其設置爲絕對定位的div,位於包含文本的相對定位的div的底部。

+0

提醒我前景圖像CSS規則會派上用場。 – DanMan 2011-12-28 15:29:57

9

什麼用 「後」 CSS選擇器?它甚至與IE8的工作:http://caniuse.com/#search=after

.container{ 
    position: relative; 
    height: 100px; 
    overflow: hidden; 
} 

.container:after{ 
    content: ""; 
    position: absolute; top: 0; bottom: 0; left: -15px; right: -15px; 
    box-shadow: inset white 0 -15px 10px; 
} 

我使用負左邊和右邊放箱內主箱外,以避免對兩側的陰影。

+0

這是我也使用的更乾淨的版本。 – actimel 2014-05-31 10:47:01

+0

「它甚至可以與IE8一起工作」但是box-shadow沒有,所以誰在乎ie8 ?! :D – wintercounter 2014-07-22 11:24:37

+0

這是對的,所以我想你可以使用這個技巧,並使用位於「後」塊底部的背景圖像,而不是「盒子陰影」。 – 2014-07-22 19:47:38

2
div { 
    height:300px; 
    color:red; 
    overflow-y: scroll; 
} 

div:after { 
    content: ""; 
    box-shadow: 0px -50px 50px -50px #000 inset; 
    position:fixed; 
    top: 250px; 
    left:0; 
    width:100%; 
    height:50px; 
    overflow: hidden; 
}