2012-03-06 57 views
2

假設我在一些@font-face CSS規則中定義了一個webfont。在運行時我想通過JS添加更多的CSS。我不是在說FOUT at load time如何防止重複webfont定義閃爍?

它恰巧發生了,我的框架偶爾再次添加非常相同的@font-face規則。原來,這使Firefox和Chrome嘗試重新下載(或加載磁盤緩存)字體文件,並導致閃爍。

演示:http://jsfiddle.net/Hg9Pc/(火狐,這個特殊的情況下,在Chrome中正常工作)

是否有辦法防止除了「只是不去做」這個閃爍等? 瘋狂的緩存頭或什麼?

+0

你應該看看爲什麼你的框架添加規則兩次。 – RoToRa 2012-03-06 10:54:26

+0

@RoToRa事實上,我自己部分編寫了這個框架,要防止這個問題很難。這當然是可能的,但會需要大量的工作。 – user123444555621 2012-03-06 11:56:12

回答

2

我不認爲你可以防止閃爍,如果你實際上調用另一個@font-face調用。但是,好像你也許可以做到以下兩種情況之一:

  1. 有JavaScript的篩選,並刪除了該加載到頁面(之前更加清晰,這將無可否認的是一個相當困難的任務我認爲,但不是不可能的)。

  2. 如果可以,請用不同的字體名稱定義原始實現。例如,原始字體可能被定義爲My Arial,所以稍後當Arial(我知道你不會使用@font-face作爲Arial,這僅僅是一個例子)通過框架加載(兩者都指向同一個文件來定義),閃爍不應該發生,因爲頁面實際上並未試圖取代My Arial定義。與此問題將是如果有的情況下,你想要它覆蓋,它不會。

+0

1.幾乎所有我打算做的事情:) 2.沒有選擇。基本上我的網絡應用程序允許用戶定義的CSS - 認爲JSFiddle沒有服務器往返。那麼,不完全是這樣的。 – user123444555621 2012-03-06 12:46:25

+0

@ Pumbaa80 - 用戶css只是爲了實現頁面的一部分,還是應該影響整個頁面?你是否試圖避免在他們的區域或整個頁面上閃爍? – ScottS 2012-03-06 13:52:19

+0

兩者。我很想展示一些代碼,但這是我公司的一個封閉源代碼項目。 – user123444555621 2012-03-07 16:40:29