2010-01-11 103 views
2

我想使用WebKit的box-shadow css屬性來創建一個下拉列表。該代碼是這樣:帶有陰影的漸進增強

.drop_down{ 
    -webkit-box-shadow: 1px 1px 4px #888; 
    box-shadow: 1px 1px 4px #888; 
} 

然而,對於瀏覽器不具備這個能力,我想用邊界逼近這個陰影,就像這樣:

.drop_down{ 
    border-top: 1px solid #bbb; 
    border-left: 1px solid #bbb; 
    border-right: 2px solid #bbb; 
    border-bottom: 2px solid #bbb; 
} 

的問題是,我不希望基於邊框的陰影出現在支持box-shadow的瀏覽器上。我想避免瀏覽器嗅探,因爲我認爲很難涵蓋所有情況。什麼是最簡單的方法來做到這一點?我更喜歡無javascript的解決方案,但我也會考慮簡單的基於JavaScript的解決方案。

回答

4

Modernizr確實檢測到了特徵。代碼將是:

.drop_down{ 
    border-top: 1px solid #bbb; 
    border-left: 1px solid #bbb; 
    border-right: 2px solid #bbb; 
    border-bottom: 2px solid #bbb; 
} 
.boxshadow .drop_down{ 
    border: 0px none; 
    -webkit-box-shadow: 1px 1px 4px #888; 
    box-shadow: 1px 1px 4px #888; 
} 

您需要包括modernizr JavaScript庫爲此工作。

+0

Modernizr是一個不錯的圖書館。它允許你以一種乾淨的方式做條件式的CSS。 – airportyh 2010-07-02 01:23:17

3

這不會覆蓋所有情況下,我認爲它在Opera失敗了,但我會做到這一點:

.drop_down{ 
    -webkit-box-shadow: 1px 1px 4px #888; 
    -moz-box-shadow: 1px 1px 4px #888; 
    box-shadow: 1px 1px 4px #888; 
    border: solid 1px #bbb; 
    border: solid 0px rgba(0,0,0,0); /* Ignored by browsers that don't support it */ 
} 

測試結果

顯然rgba在Firefox 3.0中引入,但是-moz-box-shadow在3.5中引入。所以,Firefox 3.0未通過測試。下面是我們的立場至今:

Test Page

  • 火狐2.0 - 山口(灰色1px的線)
  • 火狐3.0 - 失敗
  • 火狐3.5 - 山口(影子)
  • Internet Explorer 6.0 - 通過(灰色1像素行)
  • Internet Explorer 7.0 - 通過(灰色1像素行)
  • 的Internet Explorer 8.0 - 山口(灰色1px的線)
  • Safari瀏覽器3.0 - 山口(影子)
  • Safari瀏覽器4.0 - 山口(影子)
  • 的Chrome 3.0 - 山口(影子)
  • 歌劇院10 - 失敗
+0

是不支持rgba的瀏覽器是不支持陰影的瀏覽器嗎? – 2010-01-11 20:59:46

+1

@Gaby我知道那些支持盒子陰影支持rgba,但我不積極,這是另一種方式...嘗試運行一些測試。 – 2010-01-11 21:07:11

+0

這裏很棒的工作。但我想還沒有找到一個好的解決方案。 – airportyh 2010-01-12 16:50:40

1

沒有簡單的方法來做到這一點,而無需使用特定的技巧每個瀏覽器...

無論是IE條件註釋(因爲我覺得只有在IE中沒有做t支持一些版本的box-shadow現在..)或者css黑客..

+0

我其實也沒有意識到FF現在也支持它。我想我只是針對不同的IE。謝謝。 – airportyh 2010-01-11 21:16:25

+1

問題是隻有3.5+的FF支持shadow,所以以前的版本+ Opera + IE都不支持shadow。 – 2010-01-11 21:18:53

+0

確實道格...我的錯誤.. – 2010-01-11 22:29:27

3

蓋掉Gaby說的話,不僅沒有一個好的方法來完成這個任務,而且它與Progressive Enhancement的想法背道而馳。

這裏有幾個原因考慮做你提出什麼:

  1. 這些邊界將在具有適當的盒子模型的任何瀏覽器添加寬度你的元素。如果你不打算增加寬度,這可能會導致浮動元素碰到新行。
  2. 漸進增強是關於以累加方式構建的。創建「替代」條件式樣會引發維護頭痛。
  3. 如果您選擇有吸引力的邊框樣式,它們實際上可能會在陰影時看起來更好。我發現在許多項目中都是如此。陰影真的使邊界以吸引人的方式脫穎而出。

希望有幫助。

+0

看來你建議建立最低的共同標準。我認爲他所做的是完全可以接受的:使用支持它的瀏覽器的好東西,使用其他瀏覽器有點不錯的選擇。您的寬度點是有效的,但很容易解釋。 – 2010-01-11 21:49:33

+0

他問漸進式增強,這是網頁設計中的一個特定的哲學/範式。這不是最低的共同標準。它是從最基本的功能層面開始的,*逐步地*以視覺或功能*增強*以非破壞性的方式進行分層,以便所有的瀏覽器都得到支持,但最新的則得到最炫的玩具。查看ALA文章,瞭解Progressive Enhancement的一個很好的評論:http://www.alistapart.com/articles/understandingprogressiveenhancement/ – 2010-01-11 22:20:49

+0

Gabriel:我同意你說的大部分內容,但我不同意有條件的風格反對漸進式增強的想法。條件行爲和樣式是很多Javascript庫所做的。尤其是jQuery在測試功能和有條件地完成不同的事情上有很大的幫助。我認爲這個特別的問題更多地談到了CSS的弱點。例如,如果我們可以測試某個屬性是否受支持,並且如果不是以標準方式應用不同的樣式,那麼我認爲這樣可以解決一大類問題,而不會遇到麻煩。 – airportyh 2010-01-12 17:31:27