Edition for Web Developers — Last Updated 17 December 2024
Features listed in this section will trigger warnings in conformance checkers.
Authors should not specify a border
attribute on an
img
element. If the attribute is present, its value must be the string "0
". CSS should be used instead.
Authors should not specify a charset
attribute on a
script
element. If the attribute is present, its value must be an ASCII
case-insensitive match for "utf-8
". (This has no effect in a
document that conforms to the requirements elsewhere in this standard of being encoded as
UTF-8.)
Authors should not specify a language
attribute on a
script
element. If the attribute is present, its value must be an ASCII
case-insensitive match for the string "JavaScript
" and either the
type
attribute must be omitted or its value must be an
ASCII case-insensitive match for the string "text/javascript
".
The attribute should be entirely omitted instead (with the value "JavaScript
", it has no effect), or replaced with use of the type
attribute.
Authors should not specify a value for the type
attribute on script
elements that is the empty string or a JavaScript MIME type
essence match. Instead, they should omit the attribute, which has the same effect.
Authors should not specify a type
attribute on a
style
element. If the attribute is present, its value must be an ASCII
case-insensitive match for "text/css
".
Authors should not specify the name
attribute on
a
elements. If the attribute is present, its value must not be the empty string and
must neither be equal to the value of any of the IDs in the
element's tree other than the element's own ID, if
any, nor be equal to the value of any of the other name
attributes on a
elements in the element's tree. If this attribute is
present and the element has an ID, then the attribute's value
must be equal to the element's ID. In earlier versions of the
language, this attribute was intended as a way to specify possible targets for fragments in URLs. The id
attribute should be used instead.
Authors should not, but may despite requirements to the contrary elsewhere in this
specification, specify the maxlength
and size
attributes on input
elements whose type
attributes are in the Number state. One valid reason for using these attributes
regardless is to help legacy user agents that do not support input
elements with
type="number"
to still render the text control with a useful width.
Elements in the following list are entirely obsolete, and must not be used by authors:
applet
acronym
Use abbr
instead.
bgsound
Use audio
instead.
dir
Use ul
instead.
frame
frameset
noframes
Either use iframe
and CSS instead, or use server-side includes to generate complete pages with the various invariant parts merged in.
isindex
Use an explicit form
and text control combination instead.
keygen
For enterprise device management use cases, use native on-device management capabilities.
For certificate enrollment use cases, use the Web Cryptography API to generate a keypair for the certificate, and then export the certificate and key to allow the user to install them manually. [WEBCRYPTO]
listing
menuitem
To implement a custom context menu, use script to handle the contextmenu
event.
nextid
Use GUIDs instead.
noembed
param
Use the data
attribute of the object
element to set the
URL of the external resource.
plaintext
Use the "text/plain
" MIME type instead.
rb
rtc
Providing the ruby base directly inside the ruby
element or using nested
ruby
elements is sufficient.
strike
Use del
instead if the element is marking an edit, otherwise use s
instead.
xmp
Use pre
and code
instead, and escape "<
" and "&
" characters as "<
" and "&
" respectively.
basefont
big
blink
center
font
marquee
multicol
nobr
spacer
tt
Use appropriate elements or CSS instead.
Where the tt
element would have been used for marking up keyboard input,
consider the kbd
element; for variables, consider the var
element; for
computer code, consider the code
element; and for computer output, consider the
samp
element.
Similarly, if the big
element is being used to denote a heading, consider using
the h1
element; if it is being used for marking up important passages, consider the
strong
element; and if it is being used for highlighting text for reference
purposes, consider the mark
element.
See also the text-level semantics usage summary for more suggestions with examples.
The following attributes are obsolete (though the elements are still part of the language), and must not be used by authors:
charset
on a
elementscharset
on link
elementsUse an HTTP `Content-Type
` header on the linked resource instead.
charset
on script
elements (except as noted in the previous section)Omit the attribute. Both documents and scripts are required to use UTF-8, so
it is redundant to specify it on the script
element since it inherits from the
document.
coords
on a
elementsshape
on a
elementsmethods
on a
elementsmethods
on link
elementsUse the HTTP OPTIONS feature instead.
name
on a
elements (except as noted in the previous section)name
on embed
elementsname
on img
elementsname
on option
elementsUse the id
attribute instead.
rev
on a
elementsrev
on link
elementsUse the rel
attribute instead, with an opposite term. (For example, instead of
rev="made"
, use rel="author"
.)
urn
on a
elementsurn
on link
elementsSpecify the preferred persistent identifier using the href
attribute instead.
accept
on form
elementsUse the accept
attribute directly on the input
elements instead.
hreflang
on area
elementstype
on area
elementsThese attributes do not do anything useful, and for historical reasons there are no
corresponding IDL attributes on area
elements. Omit them altogether.
nohref
on area
elementsOmitting the href
attribute is sufficient; the nohref
attribute is
unnecessary. Omit it altogether.
profile
on head
elementsUnnecessary. Omit it altogether.
manifest
on html
elementsUse service workers instead. [SW]
version
on html
elementsUnnecessary. Omit it altogether.
ismap
on input
elementsUnnecessary. Omit it altogether. All input
elements with a type
attribute in the Image
Button state are processed as server-side image maps.
usemap
on input
elementsusemap
on object
elementsUse the img
element for image maps.
longdesc
on iframe
elementslongdesc
on img
elementsUse a regular a
element to link to the
description, or (in the case of images) use an image
map to provide a link from the image to the image's
description.
lowsrc
on img
elementsUse a progressive JPEG image (given in the src
attribute),
instead of using two separate images.
target
on link
elementsUnnecessary. Omit it altogether.
type
on menu
elementsTo implement a custom context menu, use script to handle the contextmenu
event. For toolbar menus, omit the
attribute.
label
on menu
elementscontextmenu
on all elementsonshow
on all elementsTo implement a custom context menu, use script to handle the contextmenu
event.
scheme
on meta
elementsUse only one scheme per field, or make the scheme declaration part of the value.
archive
on object
elementsclassid
on object
elementscode
on object
elementscodebase
on object
elementscodetype
on object
elementsdeclare
on object
elementsRepeat the object
element completely each time the resource is to be reused.
standby
on object
elementsOptimize the linked resource so that it loads quickly or, at least, incrementally.
typemustmatch
on object
elementsAvoid using object
elements with untrusted resources.
language
on script
elements (except as noted in the previous section)Omit the attribute for JavaScript; for data blocks, use
the type
attribute instead.
event
on script
elementsfor
on script
elementsUse DOM events mechanisms to register event listeners. [DOM]
type
on style
elements (except as noted in the previous section)Omit the attribute for CSS; for data blocks, use
script
as the container instead of style
.
datapagesize
on table
elementsUnnecessary. Omit it altogether.
summary
on table
elementsUse one of the techniques for describing
tables given in the table
section instead.
abbr
on td
elementsUse text that begins in an unambiguous and terse manner, and include any more elaborate text after that. The title
attribute can also be useful in including more detailed text, so that the cell's contents can be made terse. If it's a heading, use th
(which has an abbr
attribute).
axis
on td
and th
elementsscope
on td
elementsUse th
elements for heading cells.
datasrc
on a
, button
, div
, frame
, iframe
, img
, input
, label
, legend
, marquee
, object
, option
, select
, span
, table
, and textarea
elementsdatafld
on a
, button
, div
, fieldset
, frame
, iframe
, img
, input
, label
, legend
, marquee
, object
, select
, span
, and textarea
elementsdataformatas
on button
, div
, input
, label
, legend
, marquee
, object
, option
, select
, span
, and table
elementsUse script and a mechanism such as XMLHttpRequest
to populate the page dynamically. [XHR]
dropzone
on all elementsUse script to handle the dragenter
and dragover
events instead.
alink
on body
elementsbgcolor
on body
elementsbottommargin
on body
elementsleftmargin
on body
elementslink
on body
elementsmarginheight
on body
elementsmarginwidth
on body
elementsrightmargin
on body
elementstext
on body
elementstopmargin
on body
elementsvlink
on body
elementsclear
on br
elementsalign
on caption
elementsalign
on col
elementschar
on col
elementscharoff
on col
elementsvalign
on col
elementswidth
on col
elementsalign
on div
elementscompact
on dl
elementsalign
on embed
elementshspace
on embed
elementsvspace
on embed
elementsalign
on hr
elementscolor
on hr
elementsnoshade
on hr
elementssize
on hr
elementswidth
on hr
elementsalign
on h1
—h6
elementsalign
on iframe
elementsallowtransparency
on iframe
elementsframeborder
on iframe
elementsframespacing
on iframe
elementshspace
on iframe
elementsmarginheight
on iframe
elementsmarginwidth
on iframe
elementsscrolling
on iframe
elementsvspace
on iframe
elementsalign
on input
elementsborder
on input
elementshspace
on input
elementsvspace
on input
elementsalign
on img
elementsborder
on img
elements (except as noted in the previous section)hspace
on img
elementsvspace
on img
elementsalign
on legend
elementstype
on li
elementscompact
on menu
elementsalign
on object
elementsborder
on object
elementshspace
on object
elementsvspace
on object
elementscompact
on ol
elementsalign
on p
elementswidth
on pre
elementsalign
on table
elementsbgcolor
on table
elementsborder
on table
elementsbordercolor
on table
elementscellpadding
on table
elementscellspacing
on table
elementsframe
on table
elementsheight
on table
elementsrules
on table
elementswidth
on table
elementsalign
on tbody
, thead
, and tfoot
elementschar
on tbody
, thead
, and tfoot
elementscharoff
on tbody
, thead
, and tfoot
elementsheight
on thead
, tbody
, and tfoot
elementsvalign
on tbody
, thead
, and tfoot
elementsalign
on td
and th
elementsbgcolor
on td
and th
elementschar
on td
and th
elementscharoff
on td
and th
elementsheight
on td
and th
elementsnowrap
on td
and th
elementsvalign
on td
and th
elementswidth
on td
and th
elementsalign
on tr
elementsbgcolor
on tr
elementschar
on tr
elementscharoff
on tr
elementsheight
on tr
elementsvalign
on tr
elementscompact
on ul
elementstype
on ul
elementsbackground
on body
, table
, thead
, tbody
, tfoot
, tr
, td
, and th
elementsUse CSS instead.