在asp.net.mvc中,在css中引用图像的正确方法是什么

leo*_*ora 15 css asp.net-mvc image relative-path

我正在审查一个网站,我看到很多不同的约定,审查如何在asp.net-mvc网站上的CSS引用图像.

包含:

  1. 完整路径:

    .ddTitle span.arrow {
        background: url('/content/images/dd_arrow.gif') no-repeat 0 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 与css所在位置相对的位置:

    #cluetip-waitimage {
        background-image: url(jQueryUI/images/ui-anim_basic_16x16.gif);  
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 相对于"......"

    #cluetip-waitimage {
        background-image: url(../../jQueryUI/images/ui-anim_basic_16x16.gif);  
    }
    
    Run Code Online (Sandbox Code Playgroud)

在asp.net-mvc中,有路由等..一个是正确的,另一个是错的还是这只是偏好或惯例?假设此站点可能与其他站点位于共享环境中.

Cha*_*ung 6

如果您的应用程序始终位于网站的根文件夹中(或者至少图像都位于该根文件夹中),则第一种选择就很好。如果您在不同情况下可能有不同的路径(例如在开发或测试中拥有一个共享站点),则此方法不起作用。

第二和第三个选项基本上是相同的。使用哪一个完全取决于图像相对于CSS文件的位置。我个人认为第二个看起来更干净,因此我尝试将CS​​S文件引用的所有图像放在相对于CSS所在的文件夹结构中。但是,有些人更喜欢将所有图像都放在一个位置(甚至将内容图像与站点“ chrome”图像混合在一起),因此可能需要使用相对路径../来实现此目的。


Cie*_*iel 5

我一般都是这样做的...

background-image: url('/jQuery/images/ui-anim_basic_16x16.gif');

开头/表示根文件夹,因此所有路径都可以相对于程序的根目录,而不是相对于页面运行的文件夹。这增加了一些输入,但它消除了父哈希的许多问题。

所以如果你的图像是这样的......

  • 解决方案
    • 控制器
    • 内容
      • jQuery
        • 图片

你的路径将是background-image: url('/content/jquery/images/ui-anim_basic_16x16.gif');

这样做可以消除任何类型路径的大部分影响。因为 ASP.NET 作为一种语言理解相对 url 的概念,所以这应该适用于几乎任何情况,除非您托管它的服务器有一些非常尴尬的配置 - 在这种情况下,标准和实践也不会帮助您远的。

根据我的经验,根相对 URL 还可以使您的应用程序更加模块化。这里可能有更有经验的程序员可以用理由反驳这一点,但从我构建的所有内容来看,使我的所有图像 url 相对于根目录允许我将程序放入任何文件夹并运行它,而不复杂。

  • 这将如何让您将应用程序放在任何文件夹中并让它轻松运行?如果您的应用程序位于网站的根文件夹中,那么它会正常工作,但如果您将应用程序放入网站上的“/MyApp”文件夹中,则您的图像链接将全部损坏,因为它们仍然会查找对于“/content/jquery/images/ui-anim_basic_16x16.gif”而不是“/MyApp/content/jquery/images/ui-anim_basic_16x16.gif”。 (4认同)
  • 我不知道您如何将应用程序的顶级文件夹视为根文件夹。这在任何服务器环境中都是不可能的。这甚至不是服务器的事情——这就是 HTML 和 CSS 的工作方式。如果您的应用程序位于“www.mysite.com/myapp”,则“/content/images/myimage.gif”的链接将指向“www.mysite.com/content/images/myimage.gif”*不是* `www.mysite.com/myapp/content/images/myimage.gif`。任何服务器配置都不会改变这一点。 (2认同)