2010-10-28 94 views
12

我想爲div創建線性透明漸變。有沒有辦法用jQuery來做到這一點?或者我應該使用一些其他類似raphaeljs的圖書館嗎?我想實現類似如下效果:爲div創建線性透明漸變

alt text

+6

也許最穩健的解決方案是在div下面放置一個半透明的png。當然,這個漸變是垂直設置的。 – 2010-10-28 18:55:23

回答

19

爲什麼不保持輕盈和瀏覽器兼容。

div 
{ 
    backgroud-image: url('images/gradient.png'); 
    background-repeat: repeat-x; 
    background-position: top right; 
} 
+5

+1 - 猜猜我應該發表我的評論一個答案;) – 2010-11-07 03:12:44

+2

這是如何創建一個線性*透明*漸變?不gradient.png不得不假定它正在退色的顏色是什麼? – 2011-08-09 06:15:56

+2

PNG可以隨着透明度而褪色,所以背景顏色集將變爲褪色。 – 2011-08-09 16:05:31

13

你可以用CSS3做到這一點:

E.g.

div { 
    opacity: 0.5; 
    background: #999; /* for non-css3 browsers */ 

    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cccccc', endColorstr='#000000'); /* for IE */ 
    background: -webkit-gradient(linear, left top, left bottom, from(#ccc), to(#000)); /* for webkit browsers */ 
    background: -moz-linear-gradient(top, #ccc, #000); /* for firefox 3.6+ */ 
} 

http://www.webdesignerwall.com/tutorials/cross-browser-css-gradient/

http://gradients.glrzad.com/

http://www.colorzilla.com/gradient-editor/

http://css-tricks.com/css3-gradients/

+4

*「對於非css3瀏覽器」*?這裏使用的唯一CSS3屬性是'opacity',它不會做任何漸變。其他3個特性是供應商特定的。恕我直言,這不是一個好的解決方案:它不是「面向未來」的,並不是我想在網絡上看到的那種東西。 – 2010-11-03 09:53:04

3

這裏棘手的一點是,您示例中的漸變均勻地映射到文本以及容器。很多人已經顯示,將透明漸變映射到背景屬性很容易,但這會使文本保持不變。

不幸的是,我認爲沒有任何直接的方法可以獲得您想要的漸變效果而不做任何妥協,具體取決於您的需求,它們可能是有價值的解決方案。因此,爲了達到這個目的,下面是兩個使用<canvas>的示例,瞭解如何實現示例圖像中顯示的效果。

1.作假

Demo on JSLint.

這很簡單,你在你的文本塊中<canvas>元素位置和完全透明的漸變繪製文本塊下方的背景顏色。這不是真的透明,所以它實際上並沒有透露下面的任何信息,但如果你試圖褪色到一個固定的,預定的顏色,那麼這工作得很好。

2.帆布文本

Demo on JSLint

這個例子是比較複雜的,但完全複製在你的例子所示的透明效果。本質上,它完全拋棄HTML文本塊,並將整個shabang繪製到<canvas>上。但是,它也有一些缺點:

  1. 畫布似乎並不喜歡 文字換行,所以你必須指定 各條線。

  2. 帆布文本可能仍然有幾分低迷瀏覽器實現。

  3. 可訪問性& SEO,儘管您可以輕鬆地編寫一個jQuery插件,用於在運行時將帶有文本的常規DOM元素轉換爲此解決方案。

4

我使用jquery和112 div創建它。十行文本div的父div更加透明,而100 div的背景div更透明。

http://jsfiddle.net/generalhenry/bDd5w/

+3

好主意和實現+1,但實際上是一個desaster的xD – 2010-11-06 11:11:09

+1

有已經有一些比較實用的解決方案,我大多隻是個人感到好奇,如果它可以使用jQuery作爲主要工具來完成。 – generalhenry 2010-11-06 15:40:03

0

由於bArmageddon指出,接受的解決方案不能解決問題 - 它只是褪色的背景。一個簡單的解決方案是使用:before或:after在文本上添加漸變:

div { 
    position: relative; 
} 
div:before { 
    content: ""; 
    position: absolute; 
    bottom: 0; 
    left: 0; 
    width: 100%; 
    height: 20px; 
    background: url("transparent_fade.png") repeat-x; 
}