# The “type” attribute for the “style” element is not needed and should be omitted.

> Canonical HTML version: https://rocketvalidator.com/html-validation/the-type-attribute-for-the-style-element-is-not-needed-and-should-be-omitted
> Attribution: Rocket Validator (https://rocketvalidator.com)
> License: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

In earlier versions of HTML (HTML 4 and XHTML), the `type` attribute was required on the `<style>` element to declare the MIME type of the styling language being used. The value was almost always `text/css`, as CSS has been the dominant stylesheet language for the web since its inception.

With HTML5, the specification changed. The `type` attribute on `<style>` now defaults to `text/css`, and since no browser supports any other styling language, the attribute serves no practical purpose. The WHATWG HTML Living Standard explicitly notes that the attribute is unnecessary and can be omitted. The W3C validator flags its presence as a warning to encourage cleaner, more modern markup.

## Why This Matters

- **Cleaner code:** Removing unnecessary attributes reduces file size (even if marginally) and improves readability. Every attribute should earn its place in your markup.
- **Standards compliance:** Modern HTML encourages omitting default values when they add no information. Including `type="text/css"` signals outdated coding practices.
- **Consistency:** The same principle applies to `<script>` elements, where `type="text/javascript"` is also unnecessary. Keeping your markup consistent by omitting both makes your codebase easier to maintain.

## How to Fix It

The fix is straightforward: find every `<style>` element in your HTML that includes a `type` attribute and remove it. No other changes are needed — the browser behavior will be identical.

If you're working on a large codebase, a simple search for `<style type=` across your files will help you find all instances.

## Examples

### ❌ Incorrect: Redundant `type` attribute

```html
<style type="text/css">
  p {
    color: red;
  }
</style>
<p>This text will be red.</p>
```

The `type="text/css"` attribute is unnecessary and triggers the W3C validator warning.

### ✅ Correct: `type` attribute omitted

```html
<style>
  p {
    color: red;
  }
</style>
<p>This text will be red.</p>
```

Without the `type` attribute, the browser still interprets the contents as CSS — the behavior is exactly the same.

### ❌ Incorrect: Other variations that also trigger the warning

The warning is triggered regardless of how the `type` value is formatted:

```html
<style type="text/css" media="screen">
  body {
    font-family: sans-serif;
  }
</style>
```

### ✅ Correct: Other attributes are fine, just remove `type`

```html
<style media="screen">
  body {
    font-family: sans-serif;
  }
</style>
```

Note that other valid attributes like `media` or `nonce` should be kept — only the `type` attribute needs to be removed.
