Form Input Field Markup and Layout
In this lesson, we will Iearn how form fields are structured in HTML.
We'll cover the following
Linking labels and input fields through id attributes
When creating a form field, two HTML elements have to be linked:
- an
<input>
field - and a
<label>
Most software developers know that linking the two HTML elements can be performed by giving the label a for
attribute, and giving an id
attribute for the corresponding input
field:
<label for="name-field">Name</label>
<input type="text" id="name-field" name="name" />
Whenever this link is established, clicking the label focuses on the input field. Without this link, the functionality of the form is compromised.
While most developers use the above method to link a label and an input field, some disadvantages may require us to consider an alternative.
The main problem is that the id
attribute of a node should be a unique resource in a document. While creating a small website, using global resources is fine. In complex web applications, we never know if another module inside the application uses the same id
attribute.
Linking labels and input fields through nesting
There is another method to link a <label>
and an <input>
field. This method is rarely used and it is less widely known. According to the HTML specification, encapsulating an <input>
field in a <label>
links them:
<label>
Name
<input type="text" name="name" />
</label>
We will use the latter method.
When using Flexbox, we can also use an encapsulating <div>
element to position our input fields. Each label-input field pair will be a Flex item in a Flexbox.
The final markup of an input field:
<div class="form-flex-item">
<label class="form-label">
Name
<input
type="text"
name="name"
class="form-input" />
</label>
</div>
Regarding styling, we will follow modern web design trends present in most CSS frameworks and component libraries. Both Bootstrap and Material UI put the label above the corresponding input field when we focus on the input field.
Side note: Material UI puts the label inside the frame of the input field. While this solution can be implemented in CSS, we will stick to a more basic implementation of putting the label on top of the input field:
.form-label {
margin: 20px;
display: block;
font-size: 14px;
line-height: 24px;
}
.form-input {
display: block;
padding: 6px;
}
Get hands-on with 1400+ tech skills courses.