<link>元素上是否必须输入type ="text/css"?

Tha*_*Guy 4 html css webfonts google-webfonts

我正在尝试使用Google Web Fonts,并且在官方网站上它建议使用<link>包含该type属性的标记,如下所示:

<link href='http://fonts.googleapis.com/css?family=Ubuntu:400,700' rel='stylesheet' type='text/css'>`
Run Code Online (Sandbox Code Playgroud)

在官方的HTML5样板网站中,他们省略了该type属性

<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:400,700">
Run Code Online (Sandbox Code Playgroud)

根据这个相当古老的答案,在HTML5中,type属性在<style>标签上是可选的,在标签上是必需的<link>.

但是,没有typeattribule 的版本在W3C验证器上验证正常.

那么,type属性是否是强制性的?

Tha*_*Guy 5

我在官方的W3C HTML5草案中找到了答案:

type属性提供链接资源的MIME类型.这纯粹是建议性的.该值必须是有效的MIME类型.

对于外部资源链接,type属性用作用户代理的提示,以便它们可以避免获取它们不支持的资源.如果属性存在,则用户代理必须假定资源属于给定类型(即使它不是有效的MIME类型,例如空字符串).如果省略该属性,但外部资源链接类型已定义默认类型,则用户代理必须假定该资源属于该类型.(......)

用户代理不得将type属性视为权威的 - 在获取资源时,用户代理不得使用type属性来确定其实际类型.只有实际的类型(...).

样式表链接类型定义用于处理资源的Content-Type元数据的规则.(......)

如果文档包含标记如下的样式表链接:

 <link rel="stylesheet" href="A" type="text/plain">
 <link rel="stylesheet" href="B" type="text/css">
 <link rel="stylesheet" href="C">
Run Code Online (Sandbox Code Playgroud)

...然后,仅支持CSS样式表的兼容UA将获取B和C文件,并跳过A文件(因为text/plain不是CSS样式表的MIME类型).

对于文件B和C,它将检查服务器返回的实际类型.对于那些以text/css格式发送的内容,它会应用样式,但对于那些标记为text/plain或任何其他类型的样式,它不会.

如果返回的两个文件之一没有Content-Type元数据,或者语法错误类型如Content-Type:"null",则样式表链接的默认类型将启动.由于该默认类型为text/css,尽管如此,样式表仍然适用.

对于该<style>属性,同一文档指出:

type属性提供样式语言.如果该属性存在,则其值必须是指定样式语言的有效MIME类型.不得指定charset参数.如果缺少该属性,则使用type属性的默认值为"text/css".[RFC2318]