【问题标题】:in asp.net.mvc, what is the correct way to reference images inside of css在 asp.net.mvc 中,在 css 中引用图像的正确方法是什么
【发布时间】:2011-08-09 11:41:41
【问题描述】:

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

包括:

  1. 完整路径

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

    #cluetip-waitimage {
        background-image: url(jQueryUI/images/ui-anim_basic_16x16.gif);  
    }
    
  3. 与“..”相关

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

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

【问题讨论】:

  • 真的不确定这与 MVC 有什么关系。路由与css和图片文件无关。
  • 我也看不出它与 MVC 有什么关系。
  • 这是个好问题。在 MVC 中,您可以路由 any url,其中包含 any 个 /'s 并将其路由到任何视图。在 WebForms 中,只有 1 条路由,所以这个问题只需要解决一次,并且使用了几种图像和 css 引用技术。现在我觉得我被推向一个完整的 url 或与域根相关的东西。

标签: css asp.net-mvc image relative-path


【解决方案1】:

我也有类似的问题。由于 MVC 允许使用 ~/(例如在 razor 视图中)来表示应用程序根,我想知道是否应该对我的 CSS 文件中的图像路径这样做。

当然,因为 CSS 文件不是在服务器端处理的,所以这是行不通的。但是我认为正确的方法是使用相对路径。这应该没问题,因为 CSS 文件的路径(例如在布局中)可以使用 ~/ ,然后从 CSS 文件到图像的路径将被固定;并且应用程序根在哪里都没有关系......或者布局或主视图是否在不同的区域中。

【讨论】:

    【解决方案2】:

    如果您的应用程序始终位于网站的根文件夹中(或者至少您的图像都将位于根文件夹中),那么您的第一个选项非常好。如果您在不同情况下可能有不同的路径(例如在开发或测试中拥有一个共享站点),那么这是行不通的。

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

    【讨论】:

      【解决方案3】:

      我一般都是这样的……

      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 都与 root 相关,这让我可以将我的程序放到任何文件夹中并轻松运行它。

      【讨论】:

      • 这将如何让您将您的应用程序放在任何文件夹中并让它运行而不复杂?如果您的应用程序位于站点的根文件夹中,那么它可以正常工作,但是如果您将应用程序放入网站的“/MyApp”文件夹中,您的图片链接将全部损坏,因为它们仍在查找对于“/content/jquery/images/ui-anim_basic_16x16.gif”而不是“/MyApp/content/jquery/images/ui-anim_basic_16x16.gif”。
      • 让我换个说法。它将允许您移动文件,而不会破坏您的 url 路径。没有真正的“正确”方法,这正是我发现最适合我的方法。
      • 至于您对它的评论,您可能是对的。我从来没有遇到过这种情况。每当我将应用程序放在子文件夹中时,我总是将特定应用程序的顶级文件夹视为根文件夹。也许我从来没有遇到过像你这样配置的服务器环境。
      • 我不知道您如何将应用程序的顶级文件夹视为根文件夹。这在任何服务器环境中都是不可能的。它甚至不是服务器——它是 HTML 和 CSS 的工作方式。如果您的应用程序位于www.mysite.com/myapp,那么指向/content/images/myimage.gif 的链接将指向www.mysite.com/content/images/myimage.gif not www.mysite.com/myapp/content/images/myimage.gif。没有服务器配置会改变这一点。
      • 不,相信我,虚拟文件​​夹与它完全无关。无论是否使用虚拟文件夹,它都将以相同的方式工作。回过头来看看你的网站实际上在做什么 - 我相信你会看到同样的事情。
      猜你喜欢
      • 1970-01-01
      • 2013-01-17
      • 2019-03-24
      • 2018-04-28
      • 2012-06-25
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2017-07-28
      相关资源
      最近更新 更多