Is an empty class
attribute valid HTML in the following formats:
<p class="">something</p>
<p class>something</p>
I found this question which is similar, but asks specifically about custom data attributes.
Is an empty class
attribute valid HTML in the following formats:
<p class="">something</p>
<p class>something</p>
I found this question which is similar, but asks specifically about custom data attributes.
After looking at the specifications referred to in the other answers, I have found the sections that actually do answer the raised question.
<p class>
is not allowedThe specification on attributes section 3.2.3.1 on Empty Attribute Syntax states the following:
An empty attribute is one where the value has been omitted. This is a syntactic shorthand for specifying the attribute with an empty value, and is commonly used for boolean attributes. This syntax may be used in the HTML syntax, but not in the XHTML syntax.
(...)
This syntax is permitted only for boolean attributes.
Seeing that the description of the class attribute (obviously) does not mention it being a boolean attribute, omitting the value is not permitted.
<p class="">
is allowedFrom the section on class we learn that:
Every HTML element may have a class attribute specified.
The attribute, if specified, must have a value that is a set of space-separated tokens representing the various classes that the element belongs to.
and from the definition of space-seperated tokens:
A set of space-separated tokens is a string containing zero or more words (known as tokens) separated by one or more space characters, where words consist of any string of one or more characters, none of which are space characters.
we can conclude that the attribute value can in fact be empty (i.e. containing zero tokens).
From the HTML5 Reference page, section 3.2.3 Attributes:
Elements may have attributes that are used to specify additional information about them. Some attributes are defined globally and can be used on any HTML element, while others are defined for specific elements only. Every attribute must have an attribute name that is used to identify it. Every attribute also has an associated attribute value, which, depending on the attribute's definition, may represent one of several different types. The permitted syntax for each attribute depends on the given value.
So to answer your question,
Invalid:
<p class>
Valid (empty value)
<p class="">
See http://dev.w3.org/html5/html-author/ For all the reference regarding HTML5 you need.
` is invalid. However, surely some attributes do not need an explicit value (`) so how do you draw this conclusion? Is there something i am missing here? Are boolean attributes not covered by your referenced section?
– Thorkil Holm-Jacobsen Jun 10 '15 at 06:51Not having any values won't make it invalid. I have tested it in http://validator.w3.org/#validate_by_input
Put this code there and test:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div class>Validiity
<input type="text" disabled>
</div>
</body>
</html>
Without quotes, just attribute names are drafted for boolean attribute like disabled
, required
A number of attributes are boolean attributes. The presence of a boolean attribute on an element represents the true value, and the absence of the attribute represents the false value.
More here: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes
Read this Q/A on boolean attribute discussion - What does it mean in HTML 5 when an attribute is a boolean attribute?
Class attribute should contain a value. without value its not a valid one. but it shows no impact while rendering.