2012-01-21 27 views
4

如此看來,如果我給你一個字體系列擁有多項結束它不沾分配CSS fontFamily中與多家結束

a = document.createElement("div") 
a.style.fontFamily = "Arial" 

和隨後

<div style="font-family: Arial; "></div> 

a = document.createElement("div") 
a.style.fontFamily = "Goudy Bookletter 1911" 

和然後

<div></div> 

我很確定它的問題是結束數字。由於

a = document.createElement("div") 
a.style.fontFamily = "Goudy Bookletter blablabla" 

和隨後

<div style="font-family: 'Goudy Bookletter blablabla'; "></div> 

這是一個錯誤?我正在使用Chrome 16

+0

您應該設置一個http://jsfiddle.net,以便我們可以看到問題。 – mowwwalker

回答

3

有關空格和數字的問題會在設置font-family時引發問題。將字體家族名稱用單引號括起來,可以讓我在Chrome 16中工作。

http://jsfiddle.net/ZMxS4/1/

a.style.fontFamily = "'Goudy Bookletter 12'"; 

不帶引號,我看到下面的古怪行爲

a.style.fontFamily = "Goudy Bookletter12"; //works 
a.style.fontFamily = "Goudy 12Bookletter"; //works 
a.style.fontFamily = "Goudy 12 Bookletter"; //does not work 
0

初步檢查表明,當數字值位於其中時,瀏覽器不會解析fontFamily屬性。檢查這個jsfiddle。我會寫更多關於這個。

看來,如果您刪除包含數字值的字體名稱中的空間,它不會遇到問題。現在看到這個fiddle

If a font-family name contains whitespace, it must be quoted。這意味着你應該用引號(單或雙)來包裝你的字體名稱。最後的檢查fiddle

+0

在這裏,w3schools在技術上是錯誤的,font-family:Helvetica Neue是正確的(雖然總是引用多字字體系列更安全)。一個或多個標識符的未加引號序列是正確的字體系列,但標識符不能以數字開頭,這就是爲什麼Goudy Bookletter 1911不起作用。 –

1

根據the CSS specification

字體家族名必須給出報價爲字符串,或未加引號的 作爲一個或多個標識符的序列。這意味着大多數標點符號 每個標記開頭的字符和數字必須在 未加引號的字體名稱中轉義。

關於標識符:

在CSS中,標識符(包括元素名,類和在 選擇器的ID)可以只包含字符[A-ZA-Z0-9]和ISO 10646 字符U + 00A0或更高,加上連字符( - )和下劃線 (_);他們不能以數字,兩個連字符或一個數字後跟 開頭。標識符還可以包含轉義字符和任何ISO 10646字符作爲數字代碼(參見下一項)。例如, 標識符「B & W?」可寫成「B \ & W \?」或「B \ 26 W \ 3F」。

這意味着,不帶引號的Goudy Bookletter 1911是無效的字體,因爲1911年是不是一個有效的CSS標識。 "Goudy Bookletter 1911"是有效的,但是,沒有引用Goudy Bookletter blablabla

因此,你應該使用

a = document.createElement("div") 
a.style.fontFamily = '"Goudy Bookletter 1911"' 

順便說一句,a.style.fontFamily = "Goudy\\20 Bookletter\\20 1911"也是有效的,所以是a.style.fontFamily = "Goudy Bookletter \\31\\39\\31\\31"。兩者都適用於Chrome 16,但這種欺騙當然不推薦。