提问者:小点点

显示SVG图标的Angular可重用组件的宽度/高度没有设置在任何位置&位于图标的正下方,stackblitz位于内部


这里是Stackblitz链接。

所以我使用全局图标定义加载到应用程序组件中一次,然后用这个可重用的图标在整个应用程序中指向它。

在大多数情况下,它工作得很好&; 很好,但是由于某种原因,我注意到SVG的位置在图标组件的边界之外,相反,它在SVG的底部显示为一些空的div,屏幕截图:

这是相关图标组件代码:

<svg
    version="1.1"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    [style.width]="width ? width : size"
    [style.height]="height ? height : size"
    [style.margin]="margin ? margin : '0'"
    [style.padding]="padding ? padding : '0'"
>
    <use [style.fill]="color ? color : 'white'" [attr.xlink:href]="absUrl + '#' + name"></use>
</svg>

和实际ts代码:

import { Component, ChangeDetectionStrategy, Input } from "@angular/core";

@Component({
    selector: "icon",
    templateUrl: "./icon.component.html",
    styleUrls: ["./icon.component.scss"],
    changeDetection: ChangeDetectionStrategy.OnPush,
})
export class IconComponent {
    @Input() name: string;
    @Input() size: string;
    @Input() color: string;
    @Input() width?: string;
    @Input() height?: string;
    @Input() margin?: string;
    @Input() padding?: string;
    get absUrl() {
        return window.location.href.split("#")[0];
    }
}

我尝试用!important将行高和图标高设置为0,这一点都不起作用/影响任何东西。

但是,如果我将整个图标div设置为hidden,SVG也不会显示。

不知道还有什么可以尝试的,谢谢!


共1个答案

匿名用户

Svg是一个内联元素。 内联元素保留空白。 如果在svg元素或图标组件上设置display:block,它将被修复。

请尝试以下操作:

icon.component.scss

:host{
  display: block;
}

分叉示例

详细说明