diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index f98df80..7136416 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -2421,20 +2421,13 @@ function template_preprocess_field(&$variables, $hook) {
   // Add default CSS classes. Since there can be many fields rendered on a page,
   // save some overhead by calling strtr() directly instead of
   // drupal_html_class().
-  $variables['entity_type_css'] = strtr($element['#entity_type'], '_', '-');
-  $variables['field_name_css'] = strtr($element['#field_name'], '_', '-');
-  $variables['field_type_css'] = strtr($element['#field_type'], '_', '-');
-  $variables['attributes']['class'] = array(
-    'field',
-    'field-' . $variables['entity_type_css'] . '--' . $variables['field_name_css'],
-    'field-name-' . $variables['field_name_css'],
-    'field-type-' . $variables['field_type_css'],
-    'field-label-' . $element['#label_display'],
-  );
-  // Add a "clearfix" class to the wrapper since we float the label and the
-  // field items in field.module.css if the label is inline.
+  $variables['attributes']['class']['entity_type_css'] = strtr($element['#entity_type'], '_', '-');
+  $variables['attributes']['class']['field_name_css'] = strtr($element['#field_name'], '_', '-');
+  $variables['attributes']['class']['field_type_css'] = strtr($element['#field_type'], '_', '-');
+
+  // Add the label position just in case that the label display is inline.
   if ($element['#label_display'] == 'inline') {
-    $variables['attributes']['class'][] = 'clearfix';
+    $variables['attributes']['class']['label_position'] = 'field-label-' . $element['#label_display'];
   }
 
   static $default_attributes;
diff --git a/core/modules/system/css/system.theme.css b/core/modules/system/css/system.theme.css
index f397a5a..8a3bbc8 100644
--- a/core/modules/system/css/system.theme.css
+++ b/core/modules/system/css/system.theme.css
@@ -626,6 +626,11 @@ table tr.error {
   float: right;
   padding-left: 0.5em;
 }
+.field-label-inline:after {
+  content: "";
+  display: table;
+  clear: both;
+}
 
 /* Form display */
 form .field-edit-link {
diff --git a/core/modules/system/templates/field.html.twig b/core/modules/system/templates/field.html.twig
index a0d527a..4574211 100644
--- a/core/modules/system/templates/field.html.twig
+++ b/core/modules/system/templates/field.html.twig
@@ -16,20 +16,28 @@
  * - field.html.twig
  *
  * Available variables:
- * - attributes: HTML attributes for the containing element.
  * - label_hidden: Whether to show the field label or not.
  * - title_attributes: HTML attributes for the title.
  * - label: The label for the field.
  * - content_attributes: HTML attributes for the content.
  * - items: List of all the field items.
  * - item_attributes: List of HTML attributes for each item.
+ * - attributes: HTML attributes for the containing element.
+ *   - class: CSS Styles.
+ *     - field_name_css: The field name in a CSS friendly string.
+ *     - field_type_css: The field type in a CSS friendly string.
+ *     - label_position: The position of the label in relation to the field value.
  *
  * @see template_preprocess_field()
  *
  * @ingroup themeable
  */
 #}
-<div{{ attributes }}>
+{% set cssclass %}
+  field field-{{attributes.class.entity_type_css}}--{{attributes.class.field_name_css}} field-name-{{attributes.class.field_name_css}} field-type-{{attributes.class.field_type_css}}
+{% endset %}
+
+<div class="{{ cssclass }} {{ attributes.class }}" {{ attributes }}>
   {% if not label_hidden %}
     <div class="field-label"{{ title_attributes }}>{{ label }}:&nbsp;</div>
   {% endif %}
