顯示具有 compass 標籤的文章。 顯示所有文章
顯示具有 compass 標籤的文章。 顯示所有文章

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/ )

compass: 圖片替換文字

在制作網頁時,我們大部份將logo以圖片的形式呈現,但是圖片的內容是無法被搜尋機器人讀取的,所以我們就少了一個提升網站SEO的機會。這時候圖片替換文字的技術就派上用場了,它能夠讓我們輸入的文字被機器人讀取,又可以讓使用者只看到圖片的內容,同時達到視覺以及提升SEO的功能,實為一石二鳥之計。以下為實際的例子:

(截取至OHM跨界所)

[[MORE]]

使用者看到的是一張圖片,而html中是一個文字為OHM的a標籤,此段CSS程式碼為:

.logo a {
  display: block; /* 要將行內元素轉換成塊元素才能設定寬高 */
  text-indent: -119988px;
  overflow: hidden;
  text-align: left;
  background-image: url("/images/logo.png");
  background-repeat: no-repeat;
  background-position: 50% 50%;
  /* 圖片的大小 */ 
  width: 100px; 
  height: 48px;
}

但是這些css的程式碼非常的繁瑣,而且一旦圖片尺寸變更了,我們還要去重新設定樣式的寬高。還好compass提供了一個非常便利的mixin,此mixin最大的特點就是幫我們自動設定圖片尺寸的大小,一旦發生圖片尺寸被變更的情形,我們就不用再次設定樣式的長寬了,而且只需輸入一行程式碼就可以實現圖片替換文字的功能,這段程式碼如下:

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

這段程式碼經由compass編譯後,會自動產生前面所述的CSS程式碼,而且樣式的長寬也被設定好了。

需要的注意事項: 如果您欲設定的圖片替換文字的元素是行內元素的話,如a、span、strong ...等等標簽,一定要將行內標簽轉換成塊元素標簽(disaplay: block;),這樣設定的長寬才會有效果。

參考資料:

2013年6月26日 星期三

compass:文字過多溢出時自動省略

資訊非常豐富是入口型網站、拍賣網站、論壇網站…等等網站的共同特色,這些網站將資訊整理後,並且透過列表方式呈現,使得用戶可以在很短的時間內找到自己有興趣的主題下去閱讀。如下圖(截取至mobile01):

[[MORE]] 我們在制作這種列表的時候,一旦資料的字數過多時,將會導致版面不整齊。 如圖所示:

為了解決這種情形,我們有兩種解決方式:

1.藉由後端來控制資料的顯示字數。 2.透過CSS來控制資料的顯示。 不過第一種解決方式牽扯到後台的操作,所以這邊不會說明第一種方式解決。

使用CSS將過多的字數省略的語法如下:

.title {
  white-space: nowrap;
  overflow: hidden;
  -ms-text-overflow: ellipsis; /* 支援其他瀏覽器 */
  -o-text-overflow: ellipsis; /* 支援其他瀏覽器 */
  text-overflow: ellipsis;
}

加了此段樣式後,圖片中的標題就會變成單行顯示,並且在文字後面加上...的省略符號,如圖所示:

但是每次都要打這麼多行的程式碼,實在非常繁瑣。這時候如果使用compass的mixin,只需要一行程式碼就解決了,大幅減少撰寫程式的時間,程式碼如下:

.title {
  @include ellipsis;
}

這段程式碼將透過compass的編譯器自動轉成上面非常繁瑣的程式碼。

使用限制與缺點:

CSS控制文本溢出省略無法達成多行文字溢出的省略的效果,因為CSS會強制將文本變成單行顯示,而且ellipsis屬性只有在單行顯示才會執行自動省略的效果。所以如果想要完美的解決此問題,必須透過後端去控制資料的顯示。

參考資料:

compass: 使用compass清除浮動

我們經常利用浮動元素來達成頁面的排版,例如將<li>進行浮動來制作水平的菜單,或是浮動<div>來完成兩欄位的排版…等等,下圖為使用浮動來產生兩欄排版的例子:

不過一旦將元素進行浮動後,將導致浮動的元素脫離原本的資訊流,這使得包覆這些浮動元素的外層元素,無法偵測到這些被浮動元素的實際大小,進而影響外層元素的樣式設定,如背景、框線...等等。以下面例子舉例:

html-code:

<div class="content">
  <div class="sidebar">我是sidebar</div>
  <div class="main">我是main</div>
</div>

css-code:

.content {
  background-color: #ccc;
  padding: 1.5em;
}
.sidebar {
  float: left;
  width: 30%;
  background-color: #3498DB;
  height: 150px;
}
.main {
  float: left;
  width: 70%;
  background-color: #2ECC71;
  height: 150px;
}

實際呈現的情形如下圖:

這個問題很多的解決方式,而我採用的解決方式來自於A new micro clearfix hack這邊文章中,程式碼如下:

.content {
  background-color: #ccc;
  padding: 1.5em;
  *zoom: 1;
}
.content:after {
  content: "";
  display: table;
  clear: both;
}

結果如下圖:

而每次要解決這個問題都要打這麼多行的程式碼,實在非常浪費時間。在compass的幫助下,你只需要打一行程式碼,此段程式碼如下:

.content {
  @include pie-clearfix;
}

此段程式碼經過compass編譯後,就會自動產生上述繁瑣的程式碼,使我們節省這些寶貴的時間。

注意事項: 這個解決方法不適用於firefox 3.5之前的版本,如果需要支援firefox 3.5之前的版本,請使用compass提供的另外一個mixin,程式碼如下:

.content {
  @include legacy-pie-clearfix;
}

這段程式碼經過compass編譯後會產生以下的css程式碼:

.content {
  background-color: #ccc;
  padding: 1.5em;
  *zoom: 1;
 }
.content:after {
  content: "";
  display: block;
  height: 0;
  clear: both;
  overflow: hidden;
  visibility: hidden;
}

參考資料: