为替换元素添加样式

有些 CSS 属性适用于所有元素,有些仅适用于网格和弹性容器,还有些仅适用于可变形元素。本指南将介绍仅适用于可替换元素的属性。

可替换元素是其表现形式超出 CSS 范围的元素;它们是外部对象,其表现形式独立于 CSS 格式化模型。某些可替换元素,例如 <iframe> 元素,可能拥有自己的样式表,但它们不会继承父文档的样式。

将 CSS 与可替换元素配合使用

在某些情况下,CSS 会特别处理可替换元素,例如在计算外边距和一些 auto 值时。只有可替换元素才能拥有固有尺寸。某些可替换元素(但不是全部)具有固有尺寸或定义的基线,CSS 属性(例如 vertical-align)会使用这些尺寸或基线。

尽管文档样式可以设置可替换元素的大小和位置,但文档样式不影响可替换元素的内容,但也有一些例外:CSS 图像模块包含支持控制元素内容在其框内定位的属性。

控制内容框中对象的位置

CSS 图像模块定义了两个属性,可用于指定可替换元素中包含的对象应如何在其元素框区域内定位。object-fit 属性用于调整对象大小,而 object-position 属性用于定位对象。

object-fit 属性

object-fit 属性指定可替换元素的内容对象应如何适应包含元素的框。该属性定义图像、视频和其他可嵌入媒体格式如何响应可替换元素内容框的高度和宽度。如果元素的高度、宽度或宽高比与将占用为该元素保留空间的资源不同,fillcontaincoverscale-downnone 值定义浏览器应缩放资源、覆盖分配的空间、将资产包含在空间内,还是允许资源变形。

当内容被包含或缩小后,框中未被可替换元素覆盖的任何区域将显示元素的背景。

object-fit 属性对 <iframe><embed><fencedframe> 元素没有影响。

A square photo of the progressive pride flag flying near a chimney.

如果我们将一张宽高比为 1:1 的正方形图像放入一个 100px x 300px(宽高比为 1:3)的框中,默认情况下,图像将填充该框并自身扭曲。我们可以使用 object-fit 属性来定义当图像被强制放入不同大小和宽高比的框中时,它应该如何渲染。

css
img:nth-of-type(1) {
  object-fit: fill;
}
img:nth-of-type(2) {
  object-fit: cover;
}
img:nth-of-type(3) {
  object-fit: contain;
}
img:nth-of-type(4) {
  object-fit: scale-down;
}
img:nth-of-type(5) {
  object-fit: none;
}
img:nth-of-type(6) {
  /* no object-fit property */
  outline: 2px dashed red;
}

勾选此框可设置高度和宽度值。请注意,只有 fill 值(默认值)会扭曲原始图像。使用所有其他值时,图像的固有宽高比会保持不变。

object-position 属性

object-position 属性指定可替换元素内容对象在元素框内的对齐方式。

它通常与 object-fit 属性结合使用,其值是 <position> 值,与 background-position 中使用的值类型相同。

css
img {
  object-position: bottom right;
}

它可以在不使用 object-fit 的情况下使用。在这种情况下,图像以其固有大小(218px x 218px)渲染,图像内容的位置由 object-position 值设置。

css
img {
  outline: 2px solid;
  object-position: 114px 72px;
}

object-position 属性与 <iframe><video><embed> 元素配合使用时与 <img> 元素同样有效。

另见