2008/11/14

@charset, @font-face, @media, @page

@charset | @font-face | @import | @media | @page
@charset

指定外在風格表檔案的文字編碼。其語法是:

@charset 文字編碼字串;

@charset 只能用在 外在風格表檔案。每一個外在風格表檔案只能有一個 @charset,要放在檔案最前面。請參考 IANA 文字編碼。可能的使用情形是,你的 HTML 檔案是用 unicode 編碼,然後要讀入一個用 latin-1 編碼的 CSS 檔案;這時在 CSS 檔案的第一行就要加上:

@charset "ISO-8859-1";

小心!不要少了行尾的";"。另外一個解決辦法是:將這個 CSS 檔案用 unicode 重新存檔,同一個網站的檔案用相同的編碼即可。由於部分字碼包容 ASCII 字集,如果檔案的內容只有 ASCII 字集,則可以不用加上 @charset。

如果你的 CSS 檔案內有用到 /* 中文註解 */,不同字碼的網頁讀取 CSS 檔時,可能會誤認 */ 是中文字碼的一部份,導致整個 CSS 檔都亂掉。

使用的時機,可能發生在跨網站的檔案存取上。例如你們公司在台灣與大陸都有網站,網頁內容大致相同,但是各自使用正體字與簡體字。如果有一份風格表檔案兩邊都會用到,兩邊各存一份,每次更改風格檔時,兩份都要改,挺麻煩的。使用 @charset 就可以只用一份風格檔了。台灣的編碼大部分用 BIG5,大陸則用 GB2312 或 GBK。

@charset "BIG5";

@charset "GB2312";

@charset "GBK";

下面的範例在個人電腦上測試:Firefox, Safari, Chrome 都成功。IE6 沒有 content 特徵,所以沒有測試;微軟的官方手冊有 @charset 的說明,所以應該可以使用。比較特殊的是,Firefox 的官方手冊找不到 @charset ,但是測試又可以用。因為部落格不能上傳 css 檔,所以沒法在部落格作測試。

c6.css 檔案的內容。

@page

宣告列印範圍的風格。其語法是:

@page 頁選擇器 { 風格定義區塊 }

頁選擇器有 :first, :left, :right

與列印有關的風格特徵有:page, page-break-after, page-break-before, page-break-inside, marks, orphans, widows, size。其中 size 可以指定直印或橫印。