Skip to main content

XHTML Syntax

XHTML Syntax

XHTML syntax is very similar to HTML syntax and all the valid HTML elements are also valid in XHTML.

But XHTML is case sensitive.

Fundamentals points to remember for a XHTML document:

  • All documents must have a DOCTYPE.
  • All tags must be in lower case.
  • All documents must be properly formed.
  • All tags must be closed.
  • All attributes must be added properly.
  • The name attribute has changed.
  • Attributes can't be shortened.
  • All tags must be properly nested.

DOCTYPE Declaration

All XHTML documents must contain a DOCTYPE statement at the beginning of the document.

There are three types of DOCTYPE declarations:

  • Strict: it doesn't allow any presentational markup or deprecated elements (such as <font> elements) or framesets to be used. It validates loose HTML style markup.
  • Transitional: it allows some presentational markup and deprecated elements (such as <font> elements) but not framesets. It validates loose HTML style markup.
  • Frameset: it allows the use of frameset.

Example Strict:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

Example Transitional:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

Example Frameset:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">

Case Sensitivity: tags must be in lower case

XHTML is case-sensitive markup language All the XHTML tags and attributes must be written in lower case.

<!-- Invalid in XHTML -->
<A Href="/xhtml/xhtml-tutorial">XHTML Tutorial</A>
<!-- Valid in XHTML -->
<a href="/xhtml/xhtml-tutorial">XHTML Tutorial</a>

Closing Tags are mandatory

An XHTML must have an equivalent closing tag. Even empty elements should also have closing tags.

<!-- This is invalid in XHTML -->
<p>This paragraph is not written according to XHTML syntax.

<!-- This is also invalid in XHTML -->
<img src="/images/xhtml.gif">

<!-- This is valid in XHTML -->
<p>This paragraph is not written according to XHTML syntax.</p>

<!-- This is also valid now -->
<img src="/images/xhtml.gif"/>

Attribute Quotes

All the values of XHTML attributes must be quoted. Otherwise, your XHTML document is assumed as an invalid document.

<!-- This is invalid in XHTML -->
<img src="/images/xhtml.gif" width=250 height=50/>

<!-- Correct XHTML way of writing this is as follows -->
<img src="/images/xhtml.gif" width="250" height="50"/>

Attribute Minimization

XHTML doesn't allow you to minimize attributes. You have to explicitly state the attribute and its value.

<!--Invalid in XHTML -->
<option selected>

<!-- valid in XHTML-->
<option selected="selected">

A list of minimized attributes in HTML and the way you need to write them in XHTML is showed in the following table:

HTML StyleXHTML Style
compactcompact="compact"
checkedchecked="checked"
declaredeclare="declare"
readonlyreadonly="readonly"
disableddisabled="disabled"
selectedselected="selected"
deferdefer="defer"
ismapismap="ismap"
nohrefnohref="nohref"
noshadenoshade="noshade"
nowrapnowrap="nowrap"
multiplemultiple="multiple"
noresizenoresize="noresize"

The id Attribute

The id attribute replaces the name attribute. Instead of using name = "name", XHTML prefers to use id = "id"

<!-- This is invalid in XHTML -->
<img src="/images/xhtml.gif" name="xhtml_logo"/>

<!-- Correct XHTML way of writing this is as follows -->
<img src="/images/xhtml.gif" id="xhtml_logo"/>

The language attribute

The language attribute of the script tag is deprecated. You have to use the type attribute.

<!-- Invalid in XHTML -->
<script language="JavaScript" type="text/JavaScript">
document.write("Hello XHTML!");
</script>

<!-- Valid in XHTML -->
<script type="text/JavaScript">
document.write("Hello XHTML!");
</script>

Nested Tags

XHTML tags must be nested properly. Otherwise, your document is assumed as an incorrect XHTML document.

<!-- Invalid in XHTML -->
<b><i> This text is bold and italic</b></i>

<!-- Valid in XHTML -->
<b><i> This text is bold and italic</i></b>

Element Prohibitions

The following elements are not allowed to have any other element inside them. This is applicable for all the descending elements.

ElementProhibition
<a>It must not contain other <a> elements.
<pre>It must not contain the <img>, <object>, <big>, <small>, <sub>, or <sup> elements.
<button>It must not contain the <input>, <select>, <textarea>, <label>, <button>, <form>, <fieldset>, <iframe> or <isindex> elements.
<label>It must not contain other <label> elements.
<form>It must not contain other <form> elements.

Example

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/TR/xhtml1" xml:lang="en" lang="en">
<head>
<title>Your Title</title>
</head>
<body>
... your contents ...
</body>
</html>