Elements in HTML have attributes; these are additional values that configure the elements or adjust their behavior in various ways.
Attribute list
Attribute Name | Elements | Description |
---|---|---|
accept | <form> , <input> |
List of types the server accepts, typically a file type. |
accept-charset | <form> |
List of supported charsets. |
accesskey | Global attribute | Defines a keyboard shortcut to activate or add focus to the element. |
action | <form> |
The URI of a program that processes the information submitted via the form. |
align | <applet> , <caption> , <col> , <colgroup> , <hr> , <iframe> , <img> , <table> , <tbody> , <td> , <tfoot> , <th> , <thead> , <tr> |
Specifies the horizontal alignment of the element. |
alt | Alternative text in case an image can't be displayed. | |
async | <script> |
Indicates that the script should be executed asynchronously. |
autocomplete | <form> , <input> |
Indicates whether controls in this form can by default have their values automatically completed by the browser. |
autofocus | <button> , <input> , <keygen> , <select> , <textarea> |
The element should be automatically focused after the page loaded. |
autoplay | <audio> , <video> |
The audio or video should play as soon as possible. |
bgcolor | <body> , <col> , <colgroup> , <marquee> , <table> , <tbody> , <tfoot> , <td> , <th> , <tr> |
Background color of the element. Note: This is a legacy attribute. Please use the CSS |
border | <img> , <object> , <table> |
The border width. Note: This is a legacy attribute. Please use the CSS |
buffered | <audio> , <video> |
Contains the time range of already buffered media. |
challenge | <keygen> |
A challenge string that is submitted along with the public key. |
charset | <meta> , <script> |
Declares the character encoding of the page or script. |
checked | <command> , <input> |
Indicates whether the element should be checked on page load. |
cite | <blockquote> , <del> , <ins> , <q> |
Contains a URI which points to the source of the quote or change. |
class | Global attribute | Often used with CSS to style elements with common properties. |
code | <applet> |
Specifies the URL of the applet's class file to be loaded and executed. |
codebase | <applet> |
This attribute gives the absolute or relative URL of the directory where applets' .class files referenced by the code attribute are stored. |
color | <basefont> , <font> , <hr> |
This attribute sets the text color using either a named color or a color specified in the hexadecimal #RRGGBB format. Note: This is a legacy attribute. Please use the CSS |
cols | <textarea> |
Defines the number of columns in a textarea. |
colspan | <td> , <th> |
The colspan attribute defines the number of columns a cell should span. |
content | <meta> |
A value associated with http-equiv or name depending on the context. |
contenteditable | Global attribute | Indicates whether the element's content is editable. |
contextmenu | Global attribute | Defines the ID of a <menu> element which will serve as the element's context menu. |
controls | <audio> , <video> |
Indicates whether the browser should show playback controls to the user. |
coords | <area> |
A set of values specifying the coordinates of the hot-spot region. |
data | <object> |
Specifies the URL of the resource. |
datetime | <del> , <ins> , <time> |
Indicates the date and time associated with the element. |
default | <track> |
Indicates that the track should be enabled unless the user's preferences indicate something different. |
defer | <script> |
Indicates that the script should be executed after the page has been parsed. |
dir | Global attribute | Defines the text direction. Allowed values are ltr (Left-To-Right) or rtl (Right-To-Left) |
dirname | <input> , <textarea> |
|
disabled | <button> , <command> , <fieldset> , <input> , <keygen> , <optgroup> , <option> , <select> , <textarea> |
Indicates whether the user can interact with the element. |
download | <a> , <area> |
Indicates that the hyperlink is to be used for downloading a resource. |
draggable | Global attribute | Defines whether the element can be dragged. |
dropzone | Global attribute | Indicates that the element accept the dropping of content on it. |
enctype | <form> |
Defines the content type of the form date when the method is POST. |
for | <label> , <output> |
Describes elements which belongs to this one. |
form | <button> , <fieldset> , <input> , <keygen> , <label> , <meter> , <object> , <output> , <progress> , <select> , <textarea> |
Indicates the form that is the owner of the element. |
headers | <td> , <th> |
IDs of the <th> elements which applies to this element. |
height | <canvas> , <embed> , <iframe> , <img> , <input> , <object> , <video> |
Note: In some instances, such as <div> , this is a legacy attribute, in which case the CSS height property should be used instead. In other cases, such as <canvas> , the height must be specified with this attribute. |
hidden | Global attribute | Indicates the relevance of an element. |
high | <meter> |
Indicates the lower bound of the upper range. |
href | <a> , <area> , <base> , <link> |
The URL of a linked resource. |
hreflang | <a> , <area> , <link> |
Specifies the language of the linked resource. |
http-equiv | <meta> |
|
icon | <command> |
Specifies a picture which represents the command. |
id | Global attribute | Often used with CSS to style a specific element. The value of this attribute must be unique. |
ismap | <img> |
Indicatesthat the image is part of a server-side image map. |
itemprop | Global attribute | |
keytype | <keygen> |
Specifies the type of key generated. |
kind | <track> |
Specifies the kind of text track. |
label | <track> |
Specifies a user-readable title of the text track. |
lang | Global attribute | Defines the language used in the element. |
language | <script> |
Defines the script language used in the element. |
list | <input> |
Identifies a list of pre-defined options to suggest to the user. |
loop | <audio> , <bgsound> , <marquee> , <video> |
Indicates whether the media should start playing from the start when it's finished. |
low | <meter> |
Indicates the upper bound of the lower range. |
manifest | <html> |
Specifies the URL of the document's cache manifest. |
max | <input> , <meter> , <progress> |
Indicates the maximum value allowed. |
maxlength | <input> , <textarea> |
Defines the maximum number of characters allowed in the element. |
media | <a> , <area> , <link> , <source> , <style> |
Specifies a hint of the media for which the linked resource was designed. |
method | <form> |
Defines which HTTP method to use when submitting the form. Can be GET (default) or POST. |
min | <input> , <meter> |
Indicates the minimum value allowed. |
multiple | <input> , <select> |
Indicates whether multiple values can be entered in an input of the type email or file . |
name | <button> , <form> , <fieldset> , <iframe> , <input> , <keygen> , <object> , <output> , <select> , <textarea> , <map> , <meta> , <param> |
Name of the element. For example used by the server to identify the fields in form submits. |
novalidate | <form> |
This attribute indicates that the form shouldn't be validated when submitted. |
open | <details> |
Indicates whether the details will be shown on page load. |
optimum | <meter> |
Indicates the optimal numeric value. |
pattern | <input> |
Defines a regular expression which the element's value will be validated against. |
ping | <a> , <area> |
|
placeholder | <input> , <textarea> |
Provides a hint to the user of what can be entered in the field. |
poster | <video> |
A URL indicating a poster frame to show until the user plays or seeks. |
preload | <audio> , <video> |
Indicates whether the whole resource, parts of it or nothing should be preloaded. |
pubdate | <time> |
Indicates whether this date and time is the date of the nearest <article> ancestor element. |
radiogroup | <command> |
|
readonly | <input> , <textarea> |
Indicates whether the element can be edited. |
rel | <a> , <area> , <link> |
Specifies the relationship of the target object to the link object. |
required | <input> , <select> , <textarea> |
Indicates whether this element is required to fill out or not. |
reversed | <ol> |
Indicates whether the list should be displayed in a descending order instead of a ascending. |
rows | <textarea> |
Defines the number of rows in a textarea. |
rowspan | <td> , <th> |
Defines the number of rows a table cell should span over. |
sandbox | <iframe> |
|
spellcheck | Global attribute | Indicates whether spell checking is allowed for the element. |
scope | <th> |
|
scoped | <style> |
|
seamless | <iframe> |
|
selected | <option> |
Defines a value which will be selected on page load. |
shape | <a> , <area> |
|
size | <input> , <select> |
Defines the width of the element (in pixels). If the element's type attribute is text or password then it's the number of characters. |
sizes | <link> |
|
span | <col> , <colgroup> |
|
src | <audio> , <embed> , <iframe> , <img> , <input> , <script> , <source> , <track> , <video> |
The URL of the embeddable content. |
srcdoc | <iframe> |
|
srclang | <track> |
|
start | <ol> |
Defines the first number if other than 1. |
step | <input> |
|
style | Global attribute | Defines CSS styles which will override styles previously set. |
summary | <table> |
|
tabindex | Global attribute | Overrides the browser's default tab order and follows the one specified instead. |
target | <a> , <area> , <base> , <form> |
|
title | Global attribute | Text to be displayed in a tooltip when hovering over the element. |
type | <button> , <input> , <command> , <embed> , <object> , <script> , <source> , <style> , <menu> |
Defines the type of the element. |
usemap | <img> , <input> , <object> |
|
value | <button> , <option> , <input> , <li> , <meter> , <progress> , <param> |
Defines a default value which will be displayed in the element on page load. |
width | <canvas> , <embed> , <iframe> , <img> , <input> , <object> , <video> |
Note: In some instances, such as <div> , this is a legacy attribute, in which case the CSS width property should be used instead. In other cases, such as <canvas> , the width must be specified with this attribute. |
wrap | <textarea> |
Indicates whether the text should be wrapped. |
Content versus IDL attributes
In HTML, most attributes have two faces: the content attribute and the IDL attribute.
The content attribute is the attribute as you set it from the content (the HTML code) and you can set it or get it via element.setAttribute()
or element.getAttribute()
. The content attribute is always a string even when the expected value should be an integer. For example, to set an <input>
element's maxlength
to 42 using the content attribute, you have to call setAttribute("maxlength", "42")
on that element.
The IDL attribute is also known as a JavaScript property. These are the attributes you can read or set using JavaScript properties like element.foo
. The IDL attribute is always going to use (but might transform) the underlying content attribute to return a value when you get it and is going to save something in the content attribute when you set it. In other words, the IDL attributes, in essence, reflect the content attributes.
Most of the time, IDL attributes will return their valules as they are really used. For example, the default type
for <input>
elements is "text", so if you set input.type="foobar"
, the <input>
element will be of type text (in the appearance and the behavior) but the "type" content attribute's value will be "foobar". However, the type
IDL attribute will return the string "text".
IDL attributes are not always strings; for example, input.maxlength
is a number (a signed long). When using IDL attributes, you read or set values of the desired type, so input.maxlength
is always going to return a number and when you set input.maxlength
,it wants a number. If you pass another type, it is automatically converted to a number as specified by the standard JavaScript rules for type conversion.
IDL attributes can reflect other types such as unsigned long, URLs, booleans, etc. Unfortunately, there are no clear rules and the way IDL attributes behave in conjunction with their corresponding content attributes depends on the attribute. Most of the time, it will follow the rules laid out in the specification, but sometimes it doesn't. HTML specifications try to make this as developer-friendly as possible, but for various reasons (mostly historical), some attributes behave oddly (select.size
, for example) and you should read the specifications to understand how exactly they behave.