原文地址:https://www.zhihu.com/question/37015526?sort=created
24 個回答
我來猜猜:
1、檢查字體路徑是否加載對了
2、font-awesome樣式文件是否加載對了
3、是HTML中用(千萬別加載CSS的硬編碼),是CSS中用(千萬別加載HTML的硬編碼)
4、是否跨域問題存在
嘗試檢查是否有下列問題:
1. 沒有加載 CSS;
2. 沒有加載字體文件。
因為我這邊的版本是4.4,已經改成了.fa-XXX的形式了。
然后我使用
<i class="fa-home"></i>首頁
然后查看了一下css,發現.fa這個樣式才是引入字體文件的。所以,這里的i還要加上.fa這個類
<i class="fa fa-home"></i>首頁
4之前的版本貌似還是icon,試試看吧!
我這兩天正好遇到一個類似的問題,困擾了兩天終於解決了,其實是沒有在web.xml做js和css文件的攔截處理而已。如果你的路徑確定對的並且下載的js文件也沒有錯,那肯定就是這個原因了。
解決辦法:添加如下js css攔截處理
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
原因:用servlet-mapping用來截獲請求的,在加載請求的時候攔截你定義的資源名或路徑,比如js、css、圖片等靜態資源的,如果沒有添加截獲請求,那在加載頁面的時候就無法處理靜態資源文件了,就加載不出來。
比如你在網上找到一個css樣式庫,引用在線的鏈接可以加載 如<link href="xxx.xxx.xxx.css">是可以的,
但是你把這個css下載下來,在本地引入 <link href="<%=request.getContextPath()%>/xxx.css" >就失敗了。
不知道這樣說清楚嗎?
(以上只是我的個人認為,不知道對不對,但大概就是這樣吧)
servlet-mapping / 攔截圖片 等靜態,資源
這種情況很明白不是嗎,有個框框說明html引用font-awesome.css沒問題,問題是你框框里的字體沒法顯示,就是說你缺少了字體。
而這字體是font-awesome項目文件里引用的,你直接本地下載單個font-awesome是沒用。
不信你把你引用的font-awesome路徑改成網絡獲取形式比如cdn或https而不是本地相對路徑,圖標就可能顯示。
答案就在font-awesome源代碼里

so, 既然要本地化那么就必然要遞歸下去。
同樣的道理在於在css文件里引用背景圖片等。
以上,希望有幫助