Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is type="text/css" mandatory on the <link> element?

I'm trying to use Google Web Fonts, and on the official site it recommends using a <link> tag including the type attribute, as following:

<link href='http://fonts.googleapis.com/css?family=Ubuntu:400,700' rel='stylesheet' type='text/css'>`

In the official HTML5 boilerplate site they ommit the type attribute

<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:400,700">

According to this rather old answer, in HTML5 the type attribute is optional on the <style> tag and mandatory on the <link> tag.

However, the version without the type attribule validates fine on the W3C validator.

So, is the type attribute mandatory or not?

like image 286
That Brazilian Guy Avatar asked Jul 09 '13 17:07

That Brazilian Guy


1 Answers

I found the answer on the official W3C HTML5 draft:

The type attribute gives the MIME type of the linked resource. It is purely advisory. The value must be a valid MIME type.

For external resource links, the type attribute is used as a hint to user agents so that they can avoid fetching resources they do not support. If the attribute is present, then the user agent must assume that the resource is of the given type (even if that is not a valid MIME type, e.g. the empty string). If the attribute is omitted, but the external resource link type has a default type defined, then the user agent must assume that the resource is of that type. (...)

User agents must not consider the type attribute authoritative — upon fetching the resource, user agents must not use the type attribute to determine its actual type. Only the actual type (...).

The stylesheet link type defines rules for processing the resource's Content-Type metadata. (...)

If a document contains style sheet links labeled as follows:

 <link rel="stylesheet" href="A" type="text/plain">
 <link rel="stylesheet" href="B" type="text/css">
 <link rel="stylesheet" href="C">

...then a compliant UA that supported only CSS style sheets would fetch the B and C files, and skip the A file (since text/plain is not the MIME type for CSS style sheets).

For files B and C, it would then check the actual types returned by the server. For those that are sent as text/css, it would apply the styles, but for those labeled as text/plain, or any other type, it would not.

If one of the two files was returned without a Content-Type metadata, or with a syntactically incorrect type like Content-Type: "null", then the default type for stylesheet links would kick in. Since that default type is text/css, the style sheet would nonetheless be applied.

For the <style> attribute, the same document states:

The type attribute gives the styling language. If the attribute is present, its value must be a valid MIME type that designates a styling language. The charset parameter must not be specified. The default value for the type attribute, which is used if the attribute is absent, is "text/css". [RFC2318]

like image 182
That Brazilian Guy Avatar answered Oct 09 '22 20:10

That Brazilian Guy