2013年7月4日 星期四

compass: svg圖片替換文字

上一篇 compass:圖片替換文字中,logo圖片使用的格式為png格式,而png為點陣圖類型的圖片,內容的周圍難免會出現模糊的情況(圖片放大的情況下更為明顯)。然而logo作為網站的核心角色,我們會希望logo的呈現能夠越清晰、越銳利越好,假如使用svg格式的圖片作為logo,那麼圖片不管在什麼情況下,其品質都可以受到保證。下面圖片是png與svg圖片經過放大後的比較,左邊是png格式,右邊為svg格式,我們可以很清楚地看得出來品質的差距。

[[MORE]]

以上面OHM跨界所的例子舉例,如果我們要將logo使用替換文字的技術,並且將圖片從png格式變成svg格式,我們可以使用上一篇文章中所提到的mixin來實現這個效果,程式碼如下:

.logo a {
  /* 要將行內元素轉換成塊元素才能設定寬高 */
  display: block; 
  /* 將圖片設置為svg格式 */ 
  @include replace-text-with-dimensions("logo.svg");   
}

但是這樣會有個問題,因為有些瀏覽器(ie9前)沒有支援svg格式,所以在這些無法支援svg的瀏覽器中,logo是無法顯示的。這時候要想辦法讓不支援svg格式的瀏覽器採用替代方案(使用png格式),以下是改進的程式碼:

.logo a {
  /* 要將行內元素轉換成塊元素才能設定寬高 */
  display: block; 
  /* 自動設定容器寬高,並在svg不支援情況下,使用png格式圖片 */ 
  @include replace-text-with-dimensions("logo.png");   
  /* 多重背景,取消前面設定的背景,並且使用svg的圖片作為背景 */
  background-image: none, image-url("logo.svg"); 
  background-repeat: no-repeat; 
  /* 使背景尺寸等比縮放至容器設定的寬度與長度,讓背景始終被包含在容器中 */
  background-size: contain; 
}

這裡利用瀏覽器不支援svg格式也就不支援多重背景設定的特性,所以一旦瀏覽器沒有支援svg格式,那麼backgorung-image這段程式碼就不會執行,如此前面設置的png格式不會被覆蓋,這時候瀏覽器只會採用png格式來顯示。相反的,如果瀏覽器有支援svg格式,那麼多重背景的程式碼將會被執行,如此多重背景設定將覆蓋掉前面png格式的設定,此時瀏覽器將顯示svg格式的圖片。

參考資料:

  • OHM跨界所(http://ohm.com.tw/ )
  • compass(http://compass-style.org/reference/compass/typography/text/replacement/ )

沒有留言:

張貼留言