2013-09-25 34 views
37

在我的ASP.NET MVC應用程序中,我使用Bundles壓縮css和js文件。問題是 - 啓用優化模式後,字體未加載。字體文件未加載ASP.NET包

BundleTable.EnableOptimizations = true; 

下面是C#代碼

public static void RegisterBundles(BundleCollection bundles) { 
    RegisterStyles(bundles); 
    BundleTable.EnableOptimizations = true; 
} 

private static void RegisterStyles(BundleCollection bundles) { 
bundles.Add(new StyleBundle("~/BundleStyles/css").Include(
    "~/Content/Styles/bootstrap/bootstrap.css", 
    "~/Content/Styles/reset.css", 
    "~/Content/Styles/gridpack/gridpack.css", 

    "~/Content/Styles/fontFaces.css", 
    "~/Content/Styles/icons.css", 

    "~/Content/Styles/inputs.css", 
    "~/Content/Styles/common.css", 
    "~/Content/Styles/header.css", 
    "~/Content/Styles/footer.css", 
    "~/Content/Styles/cslider/slider-animations.css", 
    "~/Content/Styles/cslider/slider-base.css")); 
} 

這裏是字體的CSS。

@font-face { 
     font-family: ProximaNova; 
     src: url('../Fonts/ProximaNova/ProximaNova-Bold.otf') format('opentype'); 
     font-weight: bold; 
     font-style: normal; 
    } 

以下是CSS在頁面中引用的方式。

<link href="/BundleStyles/css?v=pANk2exqBfQj5bGLJtVBW3Nf2cXFdq5J3hj5dsVW3u01" rel="stylesheet"/> 

然而,當我使用Chrome調試工具的檢查,字體文件不加載到頁面,我的網頁看起來不好用錯誤的字體。

我在做什麼錯?

+0

只有fontFaces.css或任何其他css文件的問題也不是隻加載font-face的 –

+0

。該頁面看起來像是,但不是字體。其他的css文件被成功壓縮。如果不啓用優化模式,字體也會加載。 – Zafar

+0

我懷疑壓縮fontFaces.css時發生了什麼,如果在css語法中有問題,它會在瀏覽器試圖檢索時至少給出一個錯誤。現在,您只需移動代碼的@ font-face部分,並查看是否可以啓用優化。 –

回答

33

嗯,我認爲問題在於你的字體位置。我假設捆綁的css虛擬位置/BundleStyles/css實際上並不存在。如果你的文件夾結構如下圖所示

內容>字體

內容>風格

如果這是真的,那就試試這個

變化/BundleStyles/css/Content/css

<link href="/Content/css?v=pANk2exqBfQj5bGLJtVBW3Nf2cXFdq5J3hj5dsVW3u01" rel="stylesheet"/> 

並轉介ENCE您的字體像這樣

src: url('Fonts/ProximaNova/ProximaNova-Bold.otf') 
在這種情況下,你的字體將相對於位於其中還包含「字體」的內容文件夾中的「CSS」文件加載

如果我的假設是不正確的,請告訴我們你是如何構建你的文件

+3

當您部署到IIS時,您可能會發現這很有用,http://codingstill.com/2013/01/set-mime-types-for-web-fonts-in-iis/ – SimonGates

+1

我的答案有問題:它不會在調試模式下工作,因爲這些字體將在style文件夾下引用,所以下面是我如何解決它: 我有一個Content/css文件夾和一個Content/fonts文件夾。我將bundle虛擬路徑設置爲「〜/ Content/css/styles」,這樣我就不必從字體引用中刪除「../」,因爲字體文件夾將保持在「styles」文件的上一級。 也就是說,它在調試模式下保持正常工作,因爲路徑深度保持不變。 – Boanerge

+4

我有同樣的問題訪問字體真棒字體,**其他解決方案**嘗試這些鏈接處理'StyleBundle' **虛擬路徑**:[鏈接1](http://www.mvccentral.net/story/details/articles/kahanu/stylebundle-403-error-solved),[Link 2](http://forums.asp.net/t/1774324.aspx?MVC4+css+bundling+and+image+references), [鏈接3](http://ericpanorel.net/2013/10/25/font-awesome-4-0-mvc-bundling-and-minification/),[鏈接4](http://jameschambers.com/ 2014/08 /添加一些字體真棒到MVC和引導/ /),希望這可以幫助別人。 – stom

7

上面的很好的答案。

另一種方法 - 如果由於某種原因上述方法不適用於您 - 將改變@ font-face src屬性如何引用'Fonts'文件夾。 '../' -ing不能很好地捆綁從而直接從站點根文件夾中引用。 Assumung的「字體」文件夾是從根一跌,改變這種:

@font-face { 
    src: url('../Fonts/ProximaNova/ProximaNova-Bold.otf') format('opentype'); 
} 

要這樣:

@font-face { 
    src: url('/Fonts/ProximaNova/ProximaNova-Bold.otf') format('opentype'); 
} 

您將獲取相同的結果時,該網站在調試模式下跑了。

+1

如果您的應用程序作爲虛擬應用程序部署,它不起作用 – Laserson

+0

爲我工作;謝謝! – contactmatt

1

我今天去網上找了這個,因爲我遇到了這個問題。下面是我工作:

  1. 的/包/本來就不是一個問題(這個我試過第一次)
  2. 我改變單引號以雙引號&字體的工作 - 但不知道爲什麼,所以如果有人知道請隨時闡述。