当 ng 服务 Angular 应用程序时,不考虑在组件 css 中配置的背景图像的相对路径

Posted

技术标签:

【中文标题】当 ng 服务 Angular 应用程序时,不考虑在组件 css 中配置的背景图像的相对路径【英文标题】:Relative path is not considered for background image configured in component css when ng serve Angular app 【发布时间】:2019-07-23 15:33:10 【问题描述】:

我有两个div id div1div2,我需要为它们设置两个不同的背景图片,图片名称相同但位于不同的文件夹中,所以我配置如下,

app.component.html:

<div id="div1"></div>
<div id="div2"></div>

app.component.css:

background-image 每个div 的路径不同。

#div1 
  background-image: url('../assets/images/videos/back.jpg');
  /* other styles */


#div2 
  background-image: url('../assets/images/blogs/back.jpg');
   /* other styles */

问题:

当我使用 ng serve 为应用程序提供服务时,两个 div 都显示相同的背景图像。

请注意两张图片的路径不同但名称相同

原因:

在浏览器的开发者工具中查看时,样式如下,

#div1 [_ngcontent-c0] 
    background-image: url(back.jpg);
    /* other styles */


#div2 [_ngcontent-c0] 
        background-image: url(back.jpg);
        /* other styles */

这不是url('../assets/images/blogs/back.jpg'),而是url(back.jpg) - 没有相对路径,因此两者都在背景中显示相同的图像。

问题:

这是 angular 的预期行为吗?如果不是,我在这里想念什么?

【问题讨论】:

可以用背景属性试试吗? 您可以构建您的应用并检查 dist 文件夹中的内容吗? @FatemeFazli 与背景属性相同。 @AmirArb*** ,在构建时它会在根目录中以新名称创建每个文件的副本。所以它工作正常 - 仍然不是使用原始文件,而是它的副本 【参考方案1】:

CSS 中的相对路径应该相对于基本 URL,而不是相对于 src 目录中的组件。因此,请从路径中删除前导 ..,但请确保您有前导斜杠:

#div1 
  background-image: url('/assets/images/videos/back.jpg');


#div2 
  background-image: url('/assets/images/blogs/back.jpg');

根据实验,我可以看到,当使用相对于源代码的路径时,CLI 会创建引用图像的副本并将其放在dist 文件夹的根目录中。这会导致dist 文件夹如下所示:

/dist
  // This is the image that the CLI created 
  // and your component is referencing, but 
  // you want to reference the images in the
  // assets folder.
  back.jpg
  /assets
      /images
          /videos
              back.jpg
          /blogs
              back.jpg

【讨论】:

相对于基本 URL 的路径工作正常。就像你说的那样,CLI 在根目录中创建了一个副本,构建也将文件重命名为唯一的名称,所以它不会产生任何问题也是。但此问题仅在与ng serve 一起使用时才会出现。所以要么它应该强制使用与基本 URL 相关的路径,还是它与 build 和 ng serve 一起工作,对吗?是不是很奇怪? 如果存在重复的资产文件名(不同的内容/图像),则使用 relative 会出现问题,它们会在根目录中相互覆盖,并且哪一个胜出不一致。这是我的经验。【参考方案2】:

我必须为我的工作做一个内联样式

<section id="hero" style="background-image: url(./assets/pic.jpg)">

【讨论】:

以上是关于当 ng 服务 Angular 应用程序时,不考虑在组件 css 中配置的背景图像的相对路径的主要内容,如果未能解决你的问题,请参考以下文章

分配失败 - 当 ng serve 时,Angular 11 中的 JavaScript 堆内存不足

当同时运行 ng build --watch 和 ng serve 时,Angular 7 库 html-template 更改不会影响到应用程序

当 ng-repeat 上的复选框具有所需属性时,Angular ng-model 更改为 undefined

Angular2:当jquery插件附加到ng-form对象时如何触发ng-valid?

当 ngIf 为 false 时构建 Angular4 ng-content

Angular框架中使用ng-zorro-antd实现可编辑的table表格