<input type="image"> #
::: section-content
<input> elements of type image are used to create
graphical submit buttons, i.e. submit buttons that take the form of an
image rather than text.
:::
Try it #
::: section-content ::: iframe ::: {.output-header .border-rounded-top}
HTML Demo: <input type="image"> #
Reset :::
::: {#warning-no-script .warning-container} ::: warning The interactive example cannot be shown because JavaScript is disabled. ::: :::
::: {#warning-mathml-not-supported .warning-container .hidden} ::: warning The interactive example cannot be shown because MathML is not supported by your browser. ::: :::
::: {#editor-container .editor-container .tabbed-standard .hidden .border-rounded-bottom editor-type=“tabbed”} ::: {#tab-container .section .tabs} ::: {#tablist .tab-list role=“tablist”} HTML
CSS
JavaScript :::
::: {#html-panel .section .hidden tabindex=“0” role=“tabpanel” aria-labelledby=“html” aria-hidden=“true”} ::: {#html-editor}
Sign in to your account:
<label for="userId">User ID</label>
<input type="text" id="userId" name="userId" />
<input type="image" id="image" alt="Login" src="/media/examples/login-button.png" />
::: :::
::: {#css-panel .section .hidden tabindex=“0” role=“tabpanel” aria-labelledby=“css” aria-hidden=“true”} ::: {#css-editor} label { font-size: 0.8rem; }
label,
input[type='image'] {
margin-top: 1rem;
}
input[type='image'] {
width: 80px;
}
::: :::
::: {#js-panel .section .hidden tabindex=“0” role=“tabpanel” aria-labelledby=“js” aria-hidden=“true”} ::: {#js-editor} ::: ::: :::
::: {#output .output-container}
Output #
::: :::
::: {.section .console-container .hidden aria-hidden=“true”}
Console Output #
![] clear console
::: {#console .console} ::: :::
::: {#html-output .output .editor-tabbed} %html-content% ::: ::: :::
Value #
::: section-content
<input type="image"> elements do not accept value attributes. The
path to the image to be displayed is specified in the src attribute.
:::
Additional attributes #
::: section-content
In addition to the attributes shared by all
<input>
elements, image button inputs support the following attributes.
:::
alt #
::: section-content
The alt attribute provides an alternate string to use as the button's
label if the image cannot be shown (due to error, a
user
agent
that cannot or is configured not to show images, or if the user is using
a screen reading device). If provided, it must be a non-empty string
appropriate as a label for the button.
For example, if you have a graphical button that shows an image with an
icon and/or image text "Login Now", you should also set the alt
attribute to something like Login Now.
::: {#sect1 .notecard .note}
Note: While the alt attribute is technically optional, you should
always include one to maximize the usability of your content.
:::
Functionally, the alt attribute of the <input type="image"> element
works just like the
alt attribute on
<img>
elements.
:::
formaction #
::: section-content
A string indicating the URL to which to submit the data. This takes
precedence over the
action attribute on the
<form> element that owns the
<input>.
This attribute is also available on
<input type="submit">
and
<button> elements.
:::
formenctype #
::: section-content A string that identifies the encoding method to use when submitting the form data to the server. There are three permitted values:
application/x-www-form-urlencodedThis, the default value, sends the form data as a string after URL encoding{target="_blank"} the text using an algorithm such as
encodeURI().multipart/form-dataUses the
FormDataAPI to manage the data, allowing for files to be submitted to the server. You must use this encoding type if your form includes any<input>elements oftypefile(<input type="file">).text/plainPlain text; mostly useful only for debugging, so you can easily see the data that's to be submitted.
If specified, the value of the formenctype attribute overrides the
owning form's
action attribute.
This attribute is also available on
<input type="submit">
and
<button> elements.
:::
formmethod #
::: section-content
A string indicating the HTTP method to use when submitting the form's
data; this value overrides any
method attribute
given on the owning form. Permitted values are:
getA URL is constructed by starting with the URL given by the
formactionoractionattribute, appending a question mark ("?") character, then appending the form's data, encoded as described byformenctypeor the form'senctypeattribute. This URL is then sent to the server using an HTTPgetrequest. This method works well for simple forms that contain only ASCII characters and have no side effects. This is the default value.postThe form's data is included in the body of the request that is sent to the URL given by the
formactionoractionattribute using an HTTPpostrequest. This method supports complex data and file attachments.dialogThis method is used to indicate that the button closes the dialog with which the input is associated, and does not transmit the form data at all.
This attribute is also available on
<input type="submit">
and
<button> elements.
:::
formnovalidate #
::: section-content
A Boolean attribute which, if present, specifies that the form should
not be validated before submission to the server. This overrides the
value of the
novalidate attribute on the
element's owning form.
This attribute is also available on
<input type="submit">
and
<button> elements.
:::
formtarget #
::: section-content
A string which specifies a name or keyword that indicates where to
display the response received after submitting the form. The string must
be the name of a browsing context (that is, a tab, window, or
<iframe>. A value specified here overrides any target
given by the
target attribute on the
<form> that owns this input.
In addition to the actual names of tabs, windows, or inline frames, there are a few special keywords that can be used:
_selfLoads the response into the same browsing context as the one that contains the form. This will replace the current document with the received data. This is the default value used if none is specified.
_blankLoads the response into a new, unnamed, browsing context. This is typically a new tab in the same window as the current document, but may differ depending on the configuration of the user agent.
_parentLoads the response into the parent browsing context of the current one. If there is no parent context, this behaves the same as
_self._topLoads the response into the top-level browsing context; this is the browsing context that is the topmost ancestor of the current context. If the current context is the topmost context, this behaves the same as
_self.
This attribute is also available on
<input type="submit">
and
<button> elements.
:::
height #
::: section-content
A number specifying the height, in CSS pixels, at which to draw the
image specified by the src attribute.
:::
src #
::: section-content A string specifying the URL of the image file to display to represent the graphical submit button. When the user interacts with the image, the input is handled like any other button input. :::
width #
::: section-content A number indicating the width at which to draw the image, in CSS pixels. :::
Obsolete attributes #
::: section-content
The following attribute was defined by HTML 4 for image inputs, but
was not implemented by all browsers and has since been deprecated.
:::
usemap #
::: section-content
If usemap is specified, it must be the name of an image map element,
<map>, that defines an image map to use with the image. This
usage is obsolete; you should switch to using the
<img>
element when you want to use image maps.
:::
Using image inputs #
::: section-content
The <input type="image"> element is a
replaced
element
(an element whose content isn't generated or directly managed by the
CSS layer), behaving in much the same way as a regular
<img>
element, but with the capabilities of a
submit button.
:::
Essential image input features #
::: section-content
Let's look at a basic example that includes all the essential features
you'd need to use (These work exactly the same as they do on the
<img> element.):
::: code-example [html]{.language-name}
<input
id="image"
type="image"
width="100"
height="30"
alt="Login"
src="https://raw.githubusercontent.com/mdn/learning-area/master/html/forms/image-type-example/login.png" />
:::
::: {#sect2 .code-example} ::: iframe ::: :::
- The
srcattribute is used to specify the path to the image you want to display in the button. - The
altattribute provides alt text for the image, so screen reader users can get a better idea of what the button is used for. It will also display if the image can't be shown for any reason (for example if the path is misspelled). If possible, use text which matches the label you'd use if you were using a standard submit button. - The
widthandheightattributes are used to specify the width and height the image should be shown at, in pixels. The button is the same size as the image; if you need the button's hit area to be bigger than the image, you will need to use CSS (e.g.padding). Also, if you specify only one dimension, the other is automatically adjusted so that the image maintains its original aspect ratio. :::
Overriding default form behaviors #
::: section-content
<input type="image"> elements — like regular
submit
buttons — can accept a number of attributes that override the
default form behavior:
formactionThe URI of a program that processes the information submitted by the input element; overrides the
actionattribute of the element's form owner.formenctypeSpecifies the type of content that is used to submit the form to the server. Possible values are:
application/x-www-form-urlencoded: The default value if the attribute is not specified.text/plain.
If this attribute is specified, it overrides the
enctypeattribute of the element's form owner.formmethodSpecifies the HTTP method that the browser uses to submit the form. Possible values are:
post: The data from the form is included in the body of the form and is sent to the server.get: The data from the form is appended to theformattribute URI, with a '?' as a separator, and the resulting URI is sent to the server. Use this method when the form has no side effects and contains only ASCII characters.
If specified, this attribute overrides the
methodattribute of the element's form owner.formnovalidateA Boolean attribute specifying that the form is not to be validated when it is submitted. If this attribute is specified, it overrides the
novalidateattribute of the element's form owner.formtargetA name or keyword indicating where to display the response that is received after submitting the form. This is a name of, or keyword for, a browsing context (for example, tab, window, or inline frame). If this attribute is specified, it overrides the
targetattribute of the element's form owner. The following keywords have special meanings:- _
self: Load the response into the same browsing context as the current one. This value is the default if the attribute is not specified. _blank: Load the response into a new unnamed browsing context._parent: Load the response into the parent browsing context of the current one. If there is no parent, this option behaves the same way as_self._top: Load the response into the top-level browsing context (that is, the browsing context that is an ancestor of the current one, and has no parent). If there is no parent, this option behaves the same as_self. :::
- _
Using the x and y data points #
::: section-content
When you submit a form using a button created with
<input type="image">, two extra data points are submitted to the
server automatically by the browser — x and y. You can see this in
action in our
X Y coordinates
example{target="_blank"}.
When you click on the image to submit the form, you'll see the data
appended to the URL as parameters, for example ?x=52&y=55. If the
image input has a
name attribute, then keep in mind
that the specified name is prefixed on every attribute, so if the name
is position, then the returned coordinates would be formatted in the
URL as ?position.x=52&position.y=55. This, of course, applies to all
other attributes as well.
These are the X and Y coordinates of the image that the mouse clicked on to submit the form, where (0,0) is the top-left of the image and the default in case submission happens without a click on the image. These can be used when the position the image was clicked on is significant, for example you might have a map that when clicked, sends the coordinates that were clicked to the server. The server-side code then works out what location was clicked on, and returns information about places nearby.
In our above example, we could write server-side code that works out what color was clicked on by the coordinates submitted, and keeps a tally of the favorite colors people voted for. :::
Adjusting the image's position and scaling algorithm #
::: section-content
You can use the
object-position
property to adjust the positioning of the image within the <input>
element's frame, and the
object-fit
property to control how the image's size is adjusted to fit within the
frame. This allows you to specify a frame for the image using the
width and height attributes to set aside space in the layout, then
adjust where within that space the image is located and how (or if) it
is scaled to occupy that space.
:::
Examples #
A login form #
::: section-content The following example shows the same button as before, but included in the context of a typical login form.
::: {#sect3 .code-example} ::: iframe ::: :::
HTML #
::: code-example [html]{.language-name}
<form>
<p>Login to your account</p>
<label for="userId">User ID</label>
<input type="text" id="userId" name="userId" />
<label for="pwd">Password</label>
<input type="password" id="pwd" name="pwd" />
<input
id="image"
type="image"
src="https://raw.githubusercontent.com/mdn/learning-area/master/html/forms/image-type-example/login.png"
alt="Login"
width="100" />
</form>
:::
CSS #
And now some simple CSS to make the basic elements sit more neatly:
::: code-example [css]{.language-name}
div {
margin-bottom: 10px;
}
label {
display: inline-block;
width: 70px;
text-align: right;
padding-right: 10px;
}
::: :::
Adjusting the image position and scaling #
::: section-content
In this example, we adapt the previous example to set aside more space
for the image and then adjust the actual image's size and positioning
using
object-fit
and
object-position.
::: {#sect4 .code-example} ::: iframe ::: :::
HTML #
::: code-example [html]{.language-name}
<form>
<p>Login to your account</p>
<label for="userId">User ID</label>
<input type="text" id="userId" name="userId" />
<label for="pwd">Password</label>
<input type="password" id="pwd" name="pwd" />
<input
id="image"
type="image"
src="https://raw.githubusercontent.com/mdn/learning-area/master/html/forms/image-type-example/login.png"
alt="Login"
width="200"
height="100" />
</form>
:::
CSS #
::: code-example [css]{.language-name}
div {
margin-bottom: 10px;
}
label {
display: inline-block;
width: 70px;
text-align: right;
padding-right: 10px;
}
#image {
object-position: right top;
object-fit: contain;
background-color: #ddd;
}
:::
Here, object-position is configured to draw the image in the top-right
corner of the element, while object-fit is set to contain, which
indicates that the image should be drawn at the largest size that will
fit within the element's box without altering its aspect ratio. Note
the visible grey background of the element still visible in the area not
covered by the image.
:::
Technical summary #
::: section-content
| Value | None — the value attribute should not be
specified. |
| Events | None. |
| Supported common attributes | alt, src, width, height, formaction, formenctype, formmethod, formnovalidate, formtarget |
| IDL attributes | None. |
| DOM interface | |
| Methods | None. |
| Implicit ARIA Role | button |
Specifications #
::: _table #
Specification #
HTML Standard
[#
image-button-state-(type=image)]{.small}
:::
Browser compatibility #
::: _table Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet
image 1 12 1 Yes 15 1 4.4 18 4 14 1 1.0
:::
See also #
::: section-content
<input>and theHTMLInputElementinterface which implements it.- The HTML
<img>element - Positioning and sizing the image within the
<input>element's frame:object-positionandobject-fit - Compatibility of CSS properties :::
::: _attribution
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5
or later.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/image{._attribution-link}
:::