---
layout: post
title: "New field element (for better controls)"
published: true
introduction: "
The .control element has been a very versatile container for form controls. But it came at a cost: it was difficult to combine its block characteristics with its inline variations.
"
---
**TL;DR: there's a new `.field` container, and `.control` has been re-purposed.**
Since the beginning, the `.control` has been a very **versatile** element that allowed:
* to **space** controls vertically
* to include an **icon** alongside inputs, buttons, textareas...
* to append a **loading spinner**
* to create **horizontal forms**
* to create **control addons**
* to create **control groups**
## The problem
The `.control` element acted as both a _block_ container (for spacing, for other controls in a horizontal form), but also an _inline_ container (for adding an icon, a loader, an addon, and grouping).
It led to issues where you couldn't:
* add a help text horizontally
* add multiple icons or loaders in a group of controls
* add a different icon on addons
## The solution
The new `.field` element becomes the **block** container for `.control` elements. As a result, it inherits the `.has-addons`, `.is-grouped`, and `.is-horizontal` modifiers.
Furthermore `.control` element can only contain a `.button`, `.input`, `.select`, or `.textarea`, and eventually a `.icon`. It can **no longer** contain a `.help` element or other `.control`.
But it allows more elaborate designs.
{% highlight sass %}
// Before
.control
.has-addons
.has-icon
.is-grouped
.is-horizontal
.is-loading
.control-label
// After
.control
.has-icon
.is-loading
.field
.has-addons
.is-grouped
.is-horizontal
.field-label
.field-body
{% endhighlight %}
{% highlight html %}
This username is available
This username is available
{% endhighlight %}
## Examples
Addons with multiple icons or states.