type()

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

type() CSS 函数允许你指定一个特定的数据类型,并被以下 CSS 特性使用:

  • attr() 函数,用于指定属性值应被解析成的数据类型。
  • @function at-rule,用于为 CSS 自定义函数的参数和结果指定允许的数据类型。

备注: @property at-rule 的 syntax 描述符值使用相同的 <syntax> 来定义已注册自定义属性所允许的数据类型,但是,它总是以字符串的形式出现。

语法

css
/* Single value */
type(<color>)
type(auto)

/* "|" combinator for multiple types */
type(<length> | <percentage>)

/* Space-separated list of values */
type(<color>+)

/* Comma-separated list of values */
type(<length>#)

/* Multiple keywords */
type(red | blue | green)

/* Combination of data type and keyword */
type(<percentage> | auto)

/* Universal syntax value */
type(*)

参数

type() 函数的语法如下:

type(<syntax>)

<syntax> 参数是定义数据类型的表达式。它可以采用以下形式:

<ident>

一个 CSS 关键字值,书写时不带尖括号。

<syntax-type>

一个类型名称,用尖括号括起来,表示一个 CSS 数据类型。支持以下数据类型:

<angle>

接受任何有效的 <angle> 值。

<color>

接受任何有效的 <color> 值。

<custom-ident>

接受任何有效的 <custom-ident> 值。

<image>

接受任何有效的 <image> 值。

<integer>

接受任何有效的 <integer> 值。

<length>

接受任何有效的 <length> 值。

<length-percentage>

接受任何有效的 <length><percentage> 值,以及任何有效的组合了 <length><percentage> 值的 calc() 表达式。

<number>

接受任何有效的 <number> 值。

<percentage>

接受任何有效的 <percentage> 值。

<resolution>

接受任何有效的 <resolution> 值。

<string>

接受任何有效的 <string> 值。

<time>

接受任何有效的 <time> 值。

<transform-function>

接受任何有效的 <transform-function> 值。

<transform-list>

接受一个由有效 <transform-function> 值组成的列表。它等价于 "<transform-function>+",并且其后不能跟 +# 符号。

<url>

接受任何有效的 <url> 值。

*

通用语法。

你可以使用以下符号组合 <syntax-type> 值:

+

表示期望一个以空格分隔的值列表。

#

表示期望一个以逗号分隔的值列表。

此外,在为期望的语法指定多个值或组合 <ident><syntax-type> 值时,可以使用 | 符号作为分隔符。

返回值

数据类型定义。

描述

当你需要定义数据类型时,会使用 type() 函数。它可以被看作是用于定义每个 CSS 属性和函数的有效值集合的整体值定义语法的一个子集。

最常见的情况是,你会看到 type() 用于指定单一数据类型。下一个示例使用 attr() 函数将 background-color 属性设置为用户定义的 data-background 属性的值。该值所需的数据类型已被指定为 <color>

css
background-color: attr(data-background type(<color>), red);

你也可以指定一个确切的关键字要求(例如,type(blue)),但这会过于局限。

指定 type(*) 允许任何有效的 CSS 值。这是通用语法,不能被乘积或与其他语法组件组合。

指定多个允许的类型

当指定一系列允许的数据类型、关键字或两者的组合时,你可以使用 | 符号作为分隔符。例如:

  • type(<length> | <percentage>)
  • type(red | green)
  • type(<length> | auto)

以下示例展示了如何使用 @function at-rule 来定义一个自定义函数,该函数接受两个颜色参数,并返回第一个颜色,除非视口宽度小于 700px,在这种情况下它返回第二个颜色。第一个颜色允许是 redgreen,而第二个必须是 blue

css
@function --color-choice(--color1 type(red | green), --color2 blue) {
  result: var(--color1);
  @media (width < 700px) {
    result: var(--color2);
  }
}

备注: 对于 @function 的数据类型,如果只指定了一个数据类型或关键字,你可以省略 type() 函数,只写值本身。前面的自定义函数中对 blue 类型的定义就是这种情况。但这种简写对 attr() 函数无效。

指定类型列表

可以在 <syntax-type> 后附加 +# 符号,分别表示期望一个以空格分隔的列表或一个以逗号分隔的列表。例如:

  • <color>+ 参数期望一个以空格分隔的 <color> 值列表,例如 red blue #a60000 rgb(234 45 100)
  • <length># 参数期望一个以逗号分隔的 <length> 值列表,例如 30px, 1em, 15vw

你可以使用 | 作为分隔符来组合多个符号。例如,<color># | <integer># 表示期望一个以逗号分隔的 <color> 值列表或一个以逗号分隔的 <integer> 值列表。

正式语法

<type()> = 
type( <string> )

示例

你可以在 attr()@function 的文档中找到其他几个示例。

基本的 @function 数据类型定义

此示例定义了一个用于组合多个字符串的 CSS 自定义函数。

HTML

HTML 包含一个带有文本内容的 <section> 元素。

html
<section>What you gonna say?</section>

CSS

在 CSS 中,我们首先指定一个名为 --combine-strings@function。它有一个名为 --strings 的参数,其数据类型被指定为一个或多个以空格分隔的 <string> 值。它返回这些字符串值,并在末尾附加一个空格和一个心形表情符号。

css
@function --combine-strings(--strings type(<string>+)) {
  result: var(--strings) " ❤️";
}

然后,我们为 <section> 元素指定一些基本样式,并使用 --combine-strings() 函数来指定其 content 属性的值,其中包含了两个以空格分隔的字符串作为参数。

css
section {
  font-family: system-ui;
  background-color: lime;
  padding: 20px;
}

section::after {
  content: --combine-strings("hello" "goodbye");
}

结果

规范

规范
CSS 函数与混入模块
# funcdef-function-type

浏览器兼容性

另见