2013-09-25 107 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. 我改变单引号以双引号&字体的工作 - 但不知道为什么,所以如果有人知道请随时阐述。