Skip to content

图标尺寸

本教程是 Iconify Icon Web 组件教程 的一部分。

默认情况下,图标高度设置为 "1em",图标宽度会根据图标的宽高比动态调整。

这使得只需在样式表或 style 中更改 font-size,即可轻松调整图标大小,就像使用图标字体一样:

html<p>
   <iconify-icon icon="cil:locomotive"></iconify-icon>
   <iconify-icon
       class="iconify"
       icon="cil:paper-plane"
       style="font-size: 36px"
   >
</iconify-icon>
   <iconify-icon class="big-icon" icon="cil:truck"></iconify-icon>
</p>
cssp {
   font-size: 24px;
}

.big-icon {
   font-size: 72px;
}

如果你想在 CSS 中使用 widthheight 控制图标尺寸,请参阅下方的 如何移除图标尺寸 部分。

单位

widthheight 均可作为属性和特性使用。

24px 图标的示例:

html<iconify-icon icon="mdi:home" height="24"></iconify-icon>
<iconify-icon icon="mdi:home" height="24px"></iconify-icon>
<iconify-icon
   icon="mdi:home"
   style="font-size: 16px;"
   height="1.5em"
>
</iconify-icon>

关键字 "auto"

特殊关键字 "auto" 会将尺寸设置为 viewBox 中的值。这使得按照图标的原始设计进行渲染变得十分简单。

只需将其中一个维度设置为 "auto",另一个维度也会自动设为 "auto",除非你另行指定。

例如,若 viewBox="0 0 24 24"height 设置为 "auto",则 height 将被设置为 24

html<iconify-icon icon="mdi:home" height="auto"></iconify-icon>

关键字 "none" 和 "unset"

特殊关键字 "none" 和 "unset" 会从生成的 SVG 中移除尺寸。

这将生成一个没有尺寸的图标。你应该在 CSS 中设置图标的 widthheight

只需将其中一个尺寸设置为 "unset",另一个尺寸也会自动设置为 "unset",除非你另行指定。

html<iconify-icon
   icon="mdi:home"
   height="none"
   style="width: 48px; height: 48px"
>
</iconify-icon>

这让您可以在 CSS 中分别完全控制每个图标的尺寸,而无需通过 font-size 同时控制它们。

有时您可能还需要在 CSS 中添加 display: block;,以确保图标正常显示。

仅设置宽度或高度

在上面的示例中,所有图标仅使用了 height

当仅设置一个维度时会发生什么?

  • 如果未设置宽度但设置了高度,则宽度将根据图标的宽高比进行计算。
  • 如果未设置高度但设置了宽度,则高度将根据图标的高宽比进行计算。
  • 如果属性中未设置任何尺寸,则高度将设置为 "1em",宽度将根据图标的宽高比进行计算。此时图标的表现类似于文本,可通过样式表中的 font-size 来调整其大小。

示例

许多图标是正方形的。对于此类图标,如果您设置了其中一个尺寸,另一个尺寸将具有相同的值。

然而,也有许多图标并非正方形。例如,从图标字体和 Font Awesome 导入的图标。

以下是 fa-regular:address-book 的数据:

json{
   "body": "<path d=\"M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-68 304H48V48h320v416zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64s-64 28.7-64 64s28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6c-10.8 0-18.7 8-44.8 8c-26.9 0-33.4-8-44.8-8c-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z\" fill=\"currentColor\"/>",
   "width": 448,
   "height": 512
}
图标尺寸为 448 x 512

如果您不设置任何尺寸,height 将被设置为 "1em",而 width 将被设置为 448 / 512 = "0.875em"。但是,小数点后超过两位的数值会进行四舍五入,因此实际的 width 将为 "0.88em":

html<svg
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   aria-hidden="true"
   focusable="false"
   role="img"
   class="iconify iconify--fa-regular"
   width="0.88em"
   height="1em"
   preserveAspectRatio="xMidYMid meet"
   viewBox="0 0 448 512"
>

   <path d="..." fill="currentColor"></path>
</svg>

如果您将 width 设置为 56,但不设置 height,则 height 将被设置为 56 * 512 / 448 = 64

html<svg width="56" height="64" ...>...</svg>

如果您同时设置这两个值:将 width 设置为 56,将 height 设置为 128,则数值将按您设置的那样生效(另请参阅下方的 "Alignment" 部分):

html<svg width="56" height="128" ...>...</svg>

对齐方式

如果你同时设置了 widthheight,且它们的比例与图标的宽高比不匹配,会发生什么?

例如,如果图标是 24x24,但你将一个维度设置为 40,另一个维度设置为 24,会发生什么?

Using box-shadow to show icon dimensions
html<iconify-icon icon="jam:info" width="40" height="24"></iconify-icon>
<iconify-icon icon="jam:info" width="24" height="40"></iconify-icon>

SVG 的行为与其他图像不同。当为其他图像格式设置错误的宽高比时,图像会被拉伸。但对 SVG 进行相同操作时,其边界框会发生改变,图像会在该边界框内对齐。

在上面的示例中,一个图标太宽,另一个图标太高。浏览器会将图标居中,而不是拉伸图标。

你可以使用 preserveAspectRatio 属性控制对齐方式。默认值为 "xMidYMid slice"。

裁剪

浏览器不仅可以在图标周围添加空白以使其适应边界框,还可以裁剪掉无法适应的部分。

要裁剪图标的部分区域,请向图标添加 preserveAspectRatio="xMidYMid slice"

Using box-shadow to show icon dimensions
html<iconify-icon
   icon="jam:info"
   width="40"
   height="24"
   preserveAspectRatio="xMidYMid slice"
>
</iconify-icon>
<iconify-icon
   icon="jam:info"
   width="24"
   height="40"
   preserveAspectRatio="xMidYMid slice"
>
</iconify-icon>

水平对齐

当...

  • 图标过宽时...
  • 图标过高且启用了裁剪(slice)时...

...你可以水平对齐图标。

要水平对齐图标,请将 preserveAspectRatio 中的 "xMid" 更改为 "xMin" 或 "xMax":

对齐宽图标的示例:

Using box-shadow to show icon dimensions
html<iconify-icon
   icon="jam:info"
   width="40"
   height="24"
   preserveAspectRatio="xMinYMid meet"
>
</iconify-icon>
<iconify-icon
   icon="jam:info"
   width="40"
   height="24"
   preserveAspectRatio="xMidYMid meet"
>
</iconify-icon>
<iconify-icon
   icon="jam:info"
   width="40"
   height="24"
   preserveAspectRatio="xMaxYMid meet"
>
</iconify-icon>

启用裁剪时对齐高图标的示例:

Using box-shadow to show icon dimensions
html<iconify-icon
   icon="jam:info"
   width="24"
   height="40"
   preserveAspectRatio="xMinYMid slice"
>
</iconify-icon>
<iconify-icon
   icon="jam:info"
   width="24"
   height="40"
   preserveAspectRatio="xMidYMid slice"
>
</iconify-icon>
<iconify-icon
   icon="jam:info"
   width="24"
   height="40"
   preserveAspectRatio="xMaxYMid slice"
>
</iconify-icon>

垂直对齐

当...

  • 图标过高时...
  • 图标过宽且启用了裁剪(slice)时...

...你可以垂直对齐图标。

要垂直对齐图标,请将 preserveAspectRatio 中的 "YMid" 更改为 "YMin" 或 "YMax":

对齐高图标的示例:

Using box-shadow to show icon dimensions
html<iconify-icon
   icon="jam:info"
   width="24"
   height="40"
   preserveAspectRatio="xMidYMin meet"
>
</iconify-icon>
<iconify-icon
   icon="jam:info"
   width="24"
   height="40"
   preserveAspectRatio="xMidYMid meet"
>
</iconify-icon>
<iconify-icon
   icon="jam:info"
   width="24"
   height="40"
   preserveAspectRatio="xMidYMax meet"
>
</iconify-icon>

启用裁剪时对齐宽图标的示例:

Using box-shadow to show icon dimensions
html<iconify-icon
   icon="jam:info"
   width="40"
   height="24"
   preserveAspectRatio="xMidYMin slice"
>
</iconify-icon>
<iconify-icon
   icon="jam:info"
   width="40"
   height="24"
   preserveAspectRatio="xMidYMid slice"
>
</iconify-icon>
<iconify-icon
   icon="jam:info"
   width="40"
   height="24"
   preserveAspectRatio="xMidYMax slice"
>
</iconify-icon>

垂直与水平对齐

你可以同时为图标添加水平和垂直对齐。

其中一种对齐方式将不会生效。例如,如果图标过高,水平对齐将被忽略,因为图标已经同时与左侧和右侧对齐。

Using box-shadow to show icon dimensions
html<iconify-icon
   icon="jam:info"
   width="40"
   height="24"
   preserveAspectRatio="xMinYMin meet"
>
</iconify-icon>
<iconify-icon
   icon="jam:info"
   width="40"
   height="24"
   preserveAspectRatio="xMinYMin slice"
>
</iconify-icon>