diff --git a/docroot/core/lib/Drupal/Core/Render/Element/RenderElement.php b/docroot/core/lib/Drupal/Core/Render/Element/RenderElement.php
index 243a9af7..1663045c 100644
--- a/docroot/core/lib/Drupal/Core/Render/Element/RenderElement.php
+++ b/docroot/core/lib/Drupal/Core/Render/Element/RenderElement.php
@@ -138,7 +138,6 @@ public static function setAttributes(&$element, $class = []) {
     // \Drupal::formBuilder()->doBuildForm().
     if (!empty($element['#required'])) {
       $element['#attributes']['class'][] = 'required';
-      $element['#attributes']['required'] = 'required';
       $element['#attributes']['aria-required'] = 'true';
     }
     if (isset($element['#parents']) && isset($element['#errors']) && !empty($element['#validated'])) {
diff --git a/docroot/core/misc/states.js b/docroot/core/misc/states.js
index 24374b62..ae8ed4ae 100644
--- a/docroot/core/misc/states.js
+++ b/docroot/core/misc/states.js
@@ -620,14 +620,14 @@
     if (e.trigger) {
       if (e.value) {
         var label = 'label' + (e.target.id ? '[for=' + e.target.id + ']' : '');
-        var $label = $(e.target).attr({'required': 'required', 'aria-required': 'aria-required'}).closest('.js-form-item, .js-form-wrapper').find(label);
+        var $label = $(e.target).attr({'aria-required': 'aria-required'}).closest('.js-form-item, .js-form-wrapper').find(label);
         // Avoids duplicate required markers on initialization.
         if (!$label.hasClass('js-form-required').length) {
           $label.addClass('js-form-required form-required');
         }
       }
       else {
-        $(e.target).removeAttr('required aria-required').closest('.js-form-item, .js-form-wrapper').find('label.js-form-required').removeClass('js-form-required form-required');
+        $(e.target).removeAttr('aria-required').closest('.js-form-item, .js-form-wrapper').find('label.js-form-required').removeClass('js-form-required form-required');
       }
     }
   });
diff --git a/docroot/core/modules/filter/src/Tests/FilterFormTest.php b/docroot/core/modules/filter/src/Tests/FilterFormTest.php
index 9d0641e4..dde16989 100644
--- a/docroot/core/modules/filter/src/Tests/FilterFormTest.php
+++ b/docroot/core/modules/filter/src/Tests/FilterFormTest.php
@@ -250,7 +250,7 @@ protected function assertOptions($id, array $expected_options, $selected) {
    *   TRUE if the assertion passed; FALSE otherwise.
    */
   protected function assertRequiredSelectAndOptions($id, array $options) {
-    $select = $this->xpath('//select[@id=:id and contains(@required, "required")]', [
+    $select = $this->xpath('//select[@id=:id and contains(@class, "required")]', [
       ':id' => $id,
     ]);
     $select = reset($select);
diff --git a/docroot/core/modules/system/src/Tests/Form/FormTest.php b/docroot/core/modules/system/src/Tests/Form/FormTest.php
index 4b8d042f..a61c8185 100644
--- a/docroot/core/modules/system/src/Tests/Form/FormTest.php
+++ b/docroot/core/modules/system/src/Tests/Form/FormTest.php
@@ -723,27 +723,4 @@ public function testInputForgery() {
     $this->assertText('An illegal choice has been detected.', 'Input forgery was detected.');
   }
 
-  /**
-   * Tests required attribute.
-   */
-  public function testRequiredAttribute() {
-    $this->drupalGet('form-test/required-attribute');
-    $expected = 'required';
-    // Test to make sure the elements have the proper required attribute.
-    foreach (['textfield', 'password'] as $type) {
-      $element = $this->xpath('//input[@id=:id and @required=:expected]', [
-        ':id' => 'edit-' . $type,
-        ':expected' => $expected,
-      ]);
-      $this->assertTrue(!empty($element), format_string('The @type has the proper required attribute.', ['@type' => $type]));
-    }
-
-    // Test to make sure textarea has the proper required attribute.
-    $element = $this->xpath('//textarea[@id=:id and @required=:expected]', [
-      ':id' => 'edit-textarea',
-      ':expected' => $expected,
-    ]);
-    $this->assertTrue(!empty($element), 'The textarea has the proper required attribute.');
-  }
-
 }
diff --git a/docroot/core/modules/system/tests/modules/form_test/form_test.routing.yml b/docroot/core/modules/system/tests/modules/form_test/form_test.routing.yml
index 2250a0bb..4233b1b8 100644
--- a/docroot/core/modules/system/tests/modules/form_test/form_test.routing.yml
+++ b/docroot/core/modules/system/tests/modules/form_test/form_test.routing.yml
@@ -394,9 +394,9 @@ form_test.checkboxes_zero:
     _access: 'TRUE'
 
 form_test.required:
-  path: '/form-test/required-attribute'
+  path: '/form-test/required-fields'
   defaults:
-    _form: '\Drupal\form_test\Form\FormTestRequiredAttributeForm'
+    _form: '\Drupal\form_test\Form\FormTestRequiredFieldsForm'
     _title: 'Required'
   requirements:
     _access: 'TRUE'
diff --git a/docroot/core/modules/system/tests/modules/form_test/src/Form/FormTestRequiredAttributeForm.php b/docroot/core/modules/system/tests/modules/form_test/src/Form/FormTestRequiredFieldsForm.php
similarity index 82%
rename from docroot/core/modules/system/tests/modules/form_test/src/Form/FormTestRequiredAttributeForm.php
rename to docroot/core/modules/system/tests/modules/form_test/src/Form/FormTestRequiredFieldsForm.php
index b0aa1b00..bdbc343e 100644
--- a/docroot/core/modules/system/tests/modules/form_test/src/Form/FormTestRequiredAttributeForm.php
+++ b/docroot/core/modules/system/tests/modules/form_test/src/Form/FormTestRequiredFieldsForm.php
@@ -6,15 +6,15 @@
 use Drupal\Core\Form\FormStateInterface;
 
 /**
- * Builds a form to test the required attribute.
+ * Builds a form to test required fields.
  */
-class FormTestRequiredAttributeForm extends FormBase {
+class FormTestRequiredFieldsForm extends FormBase {
 
   /**
    * {@inheritdoc}
    */
   public function getFormId() {
-    return 'form_test_required_attribute';
+    return 'form_test_required_fields';
   }
 
   /**
