diff --git a/core/core.libraries.yml b/core/core.libraries.yml
index eb62701..756e1b6 100644
--- a/core/core.libraries.yml
+++ b/core/core.libraries.yml
@@ -193,9 +193,6 @@ drupal.dropbutton:
   version: VERSION
   js:
     misc/dropbutton/dropbutton.js: {}
-  css:
-    component:
-      misc/dropbutton/dropbutton.css: {}
   dependencies:
     - core/jquery
     - core/drupal
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 106d30c..02a6808 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -1719,7 +1719,7 @@ function drupal_common_theme() {
       'variables' => array('links' => array(), 'attributes' => array('class' => array('links')), 'heading' => array(), 'set_active_class' => FALSE),
     ),
     'dropbutton_wrapper' => array(
-      'variables' => array('children' => NULL),
+      'variables' => array('attributes' => array(), 'children' => NULL),
     ),
     'image' => array(
       // HTML 4 and XHTML 1.0 always require an alt attribute. The HTML 5 draft
diff --git a/core/lib/Drupal/Core/Render/Element/Dropbutton.php b/core/lib/Drupal/Core/Render/Element/Dropbutton.php
index 76fab89..a215cc5 100644
--- a/core/lib/Drupal/Core/Render/Element/Dropbutton.php
+++ b/core/lib/Drupal/Core/Render/Element/Dropbutton.php
@@ -34,7 +34,8 @@ public function getInfo() {
    */
   public static function preRenderDropbutton($element) {
     $element['#attached']['library'][] = 'core/drupal.dropbutton';
-    $element['#attributes']['class'][] = 'dropbutton';
+    $element['#attributes']['class'][] = 'dropbutton__menu';
+    $element['#attributes']['data-drupal-dropbutton-menu'] = TRUE;
     if (!isset($element['#theme_wrappers'])) {
       $element['#theme_wrappers'] = array();
     }
diff --git a/core/misc/dropbutton/dropbutton.css b/core/misc/dropbutton/dropbutton.css
deleted file mode 100644
index 5990514..0000000
--- a/core/misc/dropbutton/dropbutton.css
+++ /dev/null
@@ -1,164 +0,0 @@
-
-/**
- * @file
- * Base styles for dropbuttons.
- */
-
-/**
- * When a dropbutton has only one option, it is simply a button.
- */
-.dropbutton-wrapper,
-.dropbutton-wrapper div {
-  box-sizing: border-box;
-}
-.js .dropbutton-wrapper,
-.js .dropbutton-widget {
-  display: block;
-  position: relative;
-}
-
-@media screen and (max-width:600px) {
-  .js .dropbutton-wrapper {
-    width: 100%;
-  }
-}
-
-/* Splitbuttons */
-@media screen and (min-width:600px) {
-  .form-actions .dropbutton-wrapper {
-    float: left; /* LTR */
-  }
-  [dir="rtl"] .form-actions .dropbutton-wrapper {
-    float: right;
-  }
-}
-.js .form-actions .dropbutton-widget {
-  position: static;
-}
-.js td .dropbutton-widget {
-  position: absolute;
-}
-.js td .dropbutton-wrapper {
-  min-height: 2em;
-}
-.js td .dropbutton-multiple {
-  padding-right: 10em; /* LTR */
-  margin-right: 2em; /* LTR */
-  max-width: 100%;
-}
-[dir="rtl"].js td .dropbutton-multiple {
-  padding-right: 0;
-  margin-right: 0;
-  padding-left: 10em;
-  margin-left: 2em;
-}
-.js td .dropbutton-multiple .dropbutton-action a,
-.js td .dropbutton-multiple .dropbutton-action input,
-.js td .dropbutton-multiple .dropbutton-action button {
-  width: auto;
-}
-
-/* UL styles are over-scoped in core, so this selector needs weight parity. */
-.js .dropbutton-widget .dropbutton {
-  list-style-image: none;
-  list-style-type: none;
-  margin: 0;
-  overflow: hidden;
-  padding: 0;
-}
-.js .dropbutton li,
-.js .dropbutton a {
-  display: block;
-  outline: none;
-}
-
-.js .dropbutton li:hover,
-.js .dropbutton li:focus,
-.js .dropbutton a:hover,
-.js .dropbutton a:focus {
-  outline: initial;
-}
-
-/**
- * The dropbutton styling.
- *
- * A dropbutton is a widget that displays a list of action links as a button
- * with a primary action. Secondary actions are hidden behind a click on a
- * twisty arrow.
- *
- * The arrow is created using border on a zero-width, zero-height span.
- * The arrow inherits the link color, but can be overridden with border colors.
- */
-.js .dropbutton-multiple .dropbutton-widget {
-  padding-right: 2em; /* LTR */
-}
-.js[dir="rtl"] .dropbutton-multiple .dropbutton-widget {
-  padding-left: 2em;
-  padding-right: 0;
-}
-.dropbutton-multiple.open,
-.dropbutton-multiple.open .dropbutton-widget {
-  max-width: none;
-}
-.dropbutton-multiple.open {
-  z-index: 100;
-}
-.dropbutton-multiple .dropbutton .secondary-action {
-  display: none;
-}
-.dropbutton-multiple.open .dropbutton .secondary-action {
-  display: block;
-}
-.dropbutton-toggle {
-  bottom: 0;
-  display: block;
-  position: absolute;
-  right: 0; /* LTR */
-  text-indent: 110%;
-  top: 0;
-  white-space: nowrap;
-  width: 2em;
-}
-[dir="rtl"] .dropbutton-toggle {
-  left: 0;
-  right: auto;
-}
-.dropbutton-toggle button {
-  background: none;
-  border: 0;
-  cursor: pointer;
-  display: block;
-  height: 100%;
-  margin: 0;
-  padding: 0;
-  width: 100%;
-}
-.dropbutton-toggle button:hover,
-.dropbutton-toggle button:focus {
-  outline: initial;
-}
-.dropbutton-arrow {
-  border-bottom-color: transparent;
-  border-left-color: transparent;
-  border-right-color: transparent;
-  border-style: solid;
-  border-width: 0.3333em 0.3333em 0;
-  display: block;
-  height: 0;
-  line-height: 0;
-  position: absolute;
-  right: 40%; /* 0.6667em; */ /* LTR */
-  top: 50%;
-  margin-top: -0.1666em;
-  width: 0;
-  overflow: hidden;
-}
-[dir="rtl"] .dropbutton-arrow {
-  left: 0.6667em;
-  right: auto;
-}
-.dropbutton-multiple.open .dropbutton-arrow {
-  border-bottom: 0.3333em solid;
-  border-top-color: transparent;
-  top: 0.6667em;
-}
diff --git a/core/misc/dropbutton/dropbutton.js b/core/misc/dropbutton/dropbutton.js
index 4f7645c..83cc35c 100644
--- a/core/misc/dropbutton/dropbutton.js
+++ b/core/misc/dropbutton/dropbutton.js
@@ -8,18 +8,21 @@
   "use strict";
 
   /**
-   * Process elements with the .dropbutton class on page load.
+   * Process elements with the data-drupal-dropbutton attribute on page load.
    *
    * @type {Drupal~behavior}
+   *
+   * @prop {Drupal~behaviorAttach} attach
+   *   Process elements with `data-drupal-dropbutton` attributes.
    */
   Drupal.behaviors.dropButton = {
     attach: function (context, settings) {
-      var $dropbuttons = $(context).find('.dropbutton-wrapper').once('dropbutton');
+      var $dropbuttons = $(context).find('[data-drupal-dropbutton]').once('dropbutton');
       if ($dropbuttons.length) {
         // Adds the delegated handler that will toggle dropdowns on click.
         var $body = $('body').once('dropbutton-click');
         if ($body.length) {
-          $body.on('click', '.dropbutton-toggle', dropbuttonClickHandler);
+          $body.on('click', '.dropbutton__trigger', dropbuttonClickHandler);
         }
         // Initialize all buttons.
         var il = $dropbuttons.length;
@@ -36,10 +39,11 @@
    * @function Drupal.DropButton~dropbuttonClickHandler
    *
    * @param {jQuery.Event} e
+   *   jQuery event object.
    */
   function dropbuttonClickHandler(e) {
     e.preventDefault();
-    $(e.target).closest('.dropbutton-wrapper').toggleClass('open');
+    $(e.target).closest('[data-drupal-dropbutton]').toggleClass('is-open');
   }
 
   /**
@@ -66,29 +70,36 @@
     /**
      * @type {jQuery}
      */
-    this.$dropbutton = $dropbutton;
+    this.$dropbutton = $dropbutton.addClass('dropbutton');
 
     /**
      * @type {jQuery}
      */
-    this.$list = $dropbutton.find('.dropbutton');
+    this.$list = $dropbutton.find('.dropbutton__menu');
 
     /**
      * Find actions and mark them.
      *
      * @type {jQuery}
      */
-    this.$actions = this.$list.find('li').addClass('dropbutton-action');
-
+    this.$actions = this.$list.find('li');
     // Add the special dropdown only if there are hidden actions.
     if (this.$actions.length > 1) {
       // Identify the first element of the collection.
-      var $primary = this.$actions.slice(0, 1);
-      // Identify the secondary actions.
-      var $secondary = this.$actions.slice(1);
-      $secondary.addClass('secondary-action');
-      // Add toggle link.
-      $primary.after(Drupal.theme('dropbuttonToggle', options));
+      var $li = this.$actions.slice(0, 1);
+      $li.find('a, input, button')
+        .addClass('button dropbutton__primary-action')
+        .insertBefore(this.$list)
+        // Add toggle link.
+        .after(Drupal.theme('dropbuttonToggle', options));
+      // Remove parent <li> for first dropbutton action.
+      $li.remove();
+
+      // Identify the secondary actions, reset their appearance.
+      this.$actions.slice(1).find('a, input, button')
+        .addClass('dropbutton__menu-item reset-appearance')
+        .removeClass('button');
+
       // Bind mouse events.
       this.$dropbutton
         .addClass('dropbutton-multiple')
@@ -122,7 +133,11 @@
         });
     }
     else {
-      this.$dropbutton.addClass('dropbutton-single');
+      // If there's only one action, add a button class.
+      this.$actions.find('a, input, button')
+        .addClass('button')
+        .insertBefore(this.$list);
+      this.$list.remove();
     }
   }
 
@@ -130,6 +145,7 @@
    * Extend the DropButton constructor.
    */
   $.extend(DropButton, /** @lends Drupal.DropButton */{
+
     /**
      * Store all processed DropButtons.
      *
@@ -151,9 +167,8 @@
      *   passing false.
      */
     toggle: function (show) {
-      var isBool = typeof show === 'boolean';
-      show = isBool ? show : !this.$dropbutton.hasClass('open');
-      this.$dropbutton.toggleClass('open', show);
+      var toggle = typeof show === 'boolean' ? show : !this.$dropbutton.hasClass('is-open');
+      this.$dropbutton.toggleClass('is-open', toggle);
     },
 
     /**
@@ -190,6 +205,7 @@
 
     /**
      * @param {jQuery.Event} e
+     *   jQuery event object.
      */
     focusOut: function (e) {
       this.hoverOut.call(this, e);
@@ -197,28 +213,25 @@
 
     /**
      * @param {jQuery.Event} e
+     *   jQuery event object.
      */
     focusIn: function (e) {
       this.hoverIn.call(this, e);
     }
   });
 
-  $.extend(Drupal.theme, /** @lends Drupal.theme */{
-
-    /**
-     * A toggle is an interactive element often bound to a click handler.
-     *
-     * @param {object} options
-     * @param {string} [options.title]
-     *   The HTML anchor title attribute and text for the inner span element.
-     *
-     * @return {string}
-     *   A string representing a DOM fragment.
-     */
-    dropbuttonToggle: function (options) {
-      return '<li class="dropbutton-toggle"><button type="button"><span class="dropbutton-arrow"><span class="visually-hidden">' + options.title + '</span></span></button></li>';
-    }
-  });
+  /**
+   * A toggle is an interactive element often bound to a click handler.
+   *
+   * @param {string} title
+   *   The text of the inner span element for screen readers.
+   *
+   * @return {string}
+   *   A string representing a DOM fragment.
+   */
+  Drupal.theme.dropbuttonToggle = function (title) {
+    return '<button type="button" class="button dropbutton__trigger"><span class="visually-hidden">' + title + '</span></button>';
+  };
 
   // Expose constructor in the public space.
   Drupal.DropButton = DropButton;
diff --git a/core/modules/book/src/Tests/BookTest.php b/core/modules/book/src/Tests/BookTest.php
index b1c9fa3..2c713c4 100644
--- a/core/modules/book/src/Tests/BookTest.php
+++ b/core/modules/book/src/Tests/BookTest.php
@@ -641,7 +641,7 @@ public function testAdminBookNodeListing() {
     $this->drupalGet('admin/structure/book/' . $this->book->id());
     $this->assertText($this->book->label(), 'The book title is displayed on the administrative book listing page.');
 
-    $elements = $this->xpath('//table//ul[@class="dropbutton"]/li/a');
+    $elements = $this->xpath('//table//div[@data-drupal-dropbutton]/ul/li/a');
     $this->assertEqual((string) $elements[0], 'View', 'View link is found from the list.');
   }
 
diff --git a/core/modules/config_translation/src/Tests/ConfigTranslationOverviewTest.php b/core/modules/config_translation/src/Tests/ConfigTranslationOverviewTest.php
index 13b56d5..a7aa219 100644
--- a/core/modules/config_translation/src/Tests/ConfigTranslationOverviewTest.php
+++ b/core/modules/config_translation/src/Tests/ConfigTranslationOverviewTest.php
@@ -81,7 +81,7 @@ public function testMapperListPage() {
     $this->assertLinkByHref('admin/config/people/accounts/translate');
     // Make sure there is only a single operation for each dropbutton, either
     // 'List' or 'Translate'.
-    foreach ($this->cssSelect('ul.dropbutton') as $i => $dropbutton) {
+    foreach ($this->cssSelect('[data-drupal-dropbutton] ul') as $i => $dropbutton) {
       $this->assertIdentical(1, $dropbutton->count());
       foreach ($dropbutton->li as $link) {
         $this->assertTrue(((string) $link->a === 'Translate') || ((string) $link->a === 'List'));
@@ -108,7 +108,7 @@ public function testMapperListPage() {
 
       // Make sure there is only a single 'Translate' operation for each
       // dropbutton.
-      foreach ($this->cssSelect('ul.dropbutton') as $i => $dropbutton) {
+      foreach ($this->cssSelect('[data-drupal-dropbutton] ul') as $i => $dropbutton) {
         $this->assertIdentical(1, $dropbutton->count());
         foreach ($dropbutton->li as $link) {
           $this->assertIdentical('Translate', (string) $link->a);
diff --git a/core/modules/content_translation/src/Tests/ContentTranslationUITestBase.php b/core/modules/content_translation/src/Tests/ContentTranslationUITestBase.php
index 9ed2e46..47d86b3 100644
--- a/core/modules/content_translation/src/Tests/ContentTranslationUITestBase.php
+++ b/core/modules/content_translation/src/Tests/ContentTranslationUITestBase.php
@@ -216,7 +216,7 @@ protected function doTestTranslationOverview() {
         $elements = $this->xpath('//table//a[@href=:href]', array(':href' => $view_path));
         $this->assertEqual((string) $elements[0], $entity->getTranslation($langcode)->label(), format_string('Label correctly shown for %language translation.', array('%language' => $langcode)));
         $edit_path = $entity->url('edit-form', array('language' => $language));
-        $elements = $this->xpath('//table//ul[@class="dropbutton"]/li/a[@href=:href]', array(':href' => $edit_path));
+        $elements = $this->xpath('//table//div[@data-drupal-dropbutton]/ul/li/a[@href=:href]', array(':href' => $edit_path));
         $this->assertEqual((string) $elements[0], t('Edit'), format_string('Edit link correct for %language translation.', array('%language' => $langcode)));
       }
     }
diff --git a/core/modules/field_ui/src/Tests/ManageFieldsTest.php b/core/modules/field_ui/src/Tests/ManageFieldsTest.php
index c09550f..2dd1895 100644
--- a/core/modules/field_ui/src/Tests/ManageFieldsTest.php
+++ b/core/modules/field_ui/src/Tests/ManageFieldsTest.php
@@ -154,7 +154,7 @@ function manageFieldsPage($type = '') {
     // Assert entity operations for all fields.
     $number_of_links = 3;
     $number_of_links_found = 0;
-    $operation_links = $this->xpath('//ul[@class = "dropbutton"]/li/a');
+    $operation_links = $this->xpath('//div[@data-drupal-dropbutton]//a');
     $url = base_path() . "admin/structure/types/manage/$type/fields/node.$type.body";
 
     foreach ($operation_links as $link) {
diff --git a/core/modules/language/config/optional/tour.tour.language.yml b/core/modules/language/config/optional/tour.tour.language.yml
index 7ee56b4..6520f47 100644
--- a/core/modules/language/config/optional/tour.tour.language.yml
+++ b/core/modules/language/config/optional/tour.tour.language.yml
@@ -44,7 +44,7 @@ tips:
     body: '<p>Operations are provided for editing and deleting your languages.</p><p>You can edit the name and the direction of the language.</p><p>Deleted languages can be added back at a later time. Deleting a language will remove all interface translations associated with it, and content in this language will be set to be language neutral. Note that you cannot delete the default language of the site.</p>'
     weight: 5
     attributes:
-      data-class: dropbutton-wrapper
+      data-class: dropbutton-widget[data-drupal-dropbutton]
   language-continue:
     id: language-continue
     plugin: text
diff --git a/core/modules/node/src/Tests/AssertButtonsTrait.php b/core/modules/node/src/Tests/AssertButtonsTrait.php
index 96eb6c8..78d4619 100644
--- a/core/modules/node/src/Tests/AssertButtonsTrait.php
+++ b/core/modules/node/src/Tests/AssertButtonsTrait.php
@@ -35,7 +35,7 @@ public function assertButtons($buttons, $dropbutton = TRUE) {
       $this->assertTrue(empty($save_button));
 
       // Dropbutton elements.
-      $elements = $this->xpath('//div[@class="dropbutton-wrapper"]//input[@type="submit"]');
+      $elements = $this->xpath('//div[@data-drupal-dropbutton]//input[@type="submit"]');
       $this->assertEqual($count, count($elements));
       foreach ($elements as $element) {
         $value = isset($element['value']) ? (string) $element['value'] : '';
@@ -46,7 +46,7 @@ public function assertButtons($buttons, $dropbutton = TRUE) {
     else {
       // Assert there is a save button.
       $this->assertTrue(!empty($save_button));
-      $this->assertNoRaw('dropbutton-wrapper');
+      $this->assertNoRaw('data-drupal-dropbutton');
     }
   }
 }
diff --git a/core/modules/system/css/system.admin.css b/core/modules/system/css/system.admin.css
index a3ccd20..40da1bd 100644
--- a/core/modules/system/css/system.admin.css
+++ b/core/modules/system/css/system.admin.css
@@ -196,12 +196,12 @@ small .admin-link:after {
   position: relative;
   vertical-align: top;
   width: 25%;
-  padding: 10px 6px 10px 40px; /* LTR */
+  padding: 10px 6px 10px 40px;
   box-sizing: border-box;
   font-weight: normal;
 }
 [dir="rtl"] .system-status-report__status-title {
-    padding: 10px 40px 10px 6px;
+  padding: 10px 40px 10px 6px;
 }
 .system-status-report__status-icon:before {
   content: "";
diff --git a/core/modules/system/src/Tests/Asset/LibraryDiscoveryIntegrationTest.php b/core/modules/system/src/Tests/Asset/LibraryDiscoveryIntegrationTest.php
index 2de5680..9baf4af 100644
--- a/core/modules/system/src/Tests/Asset/LibraryDiscoveryIntegrationTest.php
+++ b/core/modules/system/src/Tests/Asset/LibraryDiscoveryIntegrationTest.php
@@ -134,7 +134,7 @@ public function testLibrariesOverrideOtherAssetLibraryNames() {
     $this->activateTheme('test_theme');
 
     // Assert Drupal-relative paths.
-    $this->assertAssetInLibrary('themes/my_theme/css/dropbutton.css', 'core', 'drupal.dropbutton', 'css');
+    $this->assertAssetInLibrary('themes/my_theme/css/dialog.css', 'core', 'jquery.ui.dialog', 'css');
 
     // Assert stream wrapper paths.
     $this->assertAssetInLibrary('public://my_css/vertical-tabs.css', 'core', 'drupal.vertical-tabs', 'css');
diff --git a/core/modules/system/templates/dropbutton-wrapper.html.twig b/core/modules/system/templates/dropbutton-wrapper.html.twig
index ca0ff7e..a8f31a9 100644
--- a/core/modules/system/templates/dropbutton-wrapper.html.twig
+++ b/core/modules/system/templates/dropbutton-wrapper.html.twig
@@ -14,10 +14,8 @@
 #}
 {% if children %}
   {% spaceless %}
-    <div class="dropbutton-wrapper">
-      <div class="dropbutton-widget">
-        {{ children }}
-      </div>
+    <div data-drupal-dropbutton>
+      {{ children }}
     </div>
   {% endspaceless %}
 {% endif %}
diff --git a/core/modules/system/tests/themes/test_theme/test_theme.info.yml b/core/modules/system/tests/themes/test_theme/test_theme.info.yml
index 4c1568c..118165c 100644
--- a/core/modules/system/tests/themes/test_theme/test_theme.info.yml
+++ b/core/modules/system/tests/themes/test_theme/test_theme.info.yml
@@ -41,10 +41,10 @@ libraries-override:
     js:
       assets/vendor/jquery/jquery.min.js: js/collapse.js
   # Use Drupal-relative paths.
-  core/drupal.dropbutton:
+  core/jquery.ui.dialog:
     css:
       component:
-        misc/dropbutton/dropbutton.css: /themes/my_theme/css/dropbutton.css
+        assets/vendor/jquery.ui/themes/base/dialog.css: /themes/my_theme/css/dialog.css
   # Use stream wrappers.
   core/drupal.vertical-tabs:
     css:
diff --git a/core/modules/views/src/Tests/Handler/FieldDropButtonTest.php b/core/modules/views/src/Tests/Handler/FieldDropButtonTest.php
index 574f7e4..fa0e6ea 100644
--- a/core/modules/views/src/Tests/Handler/FieldDropButtonTest.php
+++ b/core/modules/views/src/Tests/Handler/FieldDropButtonTest.php
@@ -51,9 +51,9 @@ public function testDropbutton() {
 
     $this->drupalGet('test-dropbutton');
     foreach ($nodes as $node) {
-      $result = $this->xpath('//ul[contains(@class, dropbutton)]/li/a[contains(@href, :path) and text()=:title]', array(':path' => '/node/' . $node->id(), ':title' => $node->label()));
+      $result = $this->xpath('//div[@data-drupal-dropbutton]/ul/li/a[contains(@href, :path) and text()=:title]', array(':path' => '/node/' . $node->id(), ':title' => $node->label()));
       $this->assertEqual(count($result), 1, 'Just one node title link was found.');
-      $result = $this->xpath('//ul[contains(@class, dropbutton)]/li/a[contains(@href, :path) and text()=:title]', array(':path' => '/node/' . $node->id(), ':title' => t('Custom Text')));
+      $result = $this->xpath('//div[@data-drupal-dropbutton]/ul/li/a[contains(@href, :path) and text()=:title]', array(':path' => '/node/' . $node->id(), ':title' => t('Custom Text')));
       $this->assertEqual(count($result), 1, 'Just one custom link was found.');
     }
 
diff --git a/core/modules/views/src/Tests/Handler/FieldEntityOperationsTest.php b/core/modules/views/src/Tests/Handler/FieldEntityOperationsTest.php
index 665c016..1e660ae 100644
--- a/core/modules/views/src/Tests/Handler/FieldEntityOperationsTest.php
+++ b/core/modules/views/src/Tests/Handler/FieldEntityOperationsTest.php
@@ -77,7 +77,7 @@ public function testEntityOperations() {
         $this->assertTrue(count($operations) > 0, 'There are operations.');
         foreach ($operations as $operation) {
           $expected_destination = Url::fromUri('internal:/test-entity-operations')->toString();
-          $result = $this->xpath('//ul[contains(@class, dropbutton)]/li/a[@href=:path and text()=:title]', array(':path' => $operation['url']->toString() . '?destination=' . $expected_destination, ':title' => $operation['title']));
+          $result = $this->xpath('//div[@data-drupal-dropbutton]/ul/li/a[@href=:path and text()=:title]', array(':path' => $operation['url']->toString() . '?destination=' . $expected_destination, ':title' => $operation['title']));
           $this->assertEqual(count($result), 1, t('Found entity @operation link with destination parameter.', array('@operation' => $operation['title'])));
           // Entities which were created in Hungarian should link to the Hungarian
           // edit form, others to the English one (which has no path prefix here).
diff --git a/core/modules/views/src/Tests/Plugin/RowRenderCacheTest.php b/core/modules/views/src/Tests/Plugin/RowRenderCacheTest.php
index c00d584..10c6e41 100644
--- a/core/modules/views/src/Tests/Plugin/RowRenderCacheTest.php
+++ b/core/modules/views/src/Tests/Plugin/RowRenderCacheTest.php
@@ -157,10 +157,10 @@ protected function doTestRenderedOutput(AccountInterface $account, $check_cache
       $output = $view->style_plugin->getField($index, 'delete_node');
       $this->assertEqual($output, $expected);
 
-      $expected = $access ? "  <div class=\"dropbutton-wrapper\"><div class=\"dropbutton-widget\"><ul class=\"dropbutton\">" .
+      $expected = $access ? "  <div data-drupal-dropbutton><ul class=\"dropbutton__menu\" data-drupal-dropbutton-menu>" .
           "<li class=\"edit\"><a href=\"$node_url/edit?destination=/\" hreflang=\"en\">Edit</a></li>" .
           "<li class=\"delete\"><a href=\"$node_url/delete?destination=/\" hreflang=\"en\">Delete</a></li>" .
-          "</ul></div></div>" : "";
+          "</ul></div>" : "";
       $output = $view->style_plugin->getField($index, 'operations');
       $this->assertEqual($output, $expected);
 
diff --git a/core/modules/views_ui/config/optional/tour.tour.views-ui.yml b/core/modules/views_ui/config/optional/tour.tour.views-ui.yml
index 42193dd..5f1d93f 100644
--- a/core/modules/views_ui/config/optional/tour.tour.views-ui.yml
+++ b/core/modules/views_ui/config/optional/tour.tour.views-ui.yml
@@ -66,7 +66,7 @@ tips:
     body: 'Add, rearrange or remove filters.'
     weight: 7
     attributes:
-      data-class: 'views-ui-display-tab-bucket.filter .dropbutton-widget'
+      data-class: 'views-ui-display-tab-bucket.filter [data-drupal-dropbutton]'
   views-ui-sorts:
     id: views-ui-sorts
     plugin: text
@@ -82,7 +82,7 @@ tips:
     body: 'Add, rearrange or remove sorting rules.'
     weight: 9
     attributes:
-      data-class: 'views-ui-display-tab-bucket.sort .dropbutton-widget'
+      data-class: 'views-ui-display-tab-bucket.sort [data-drupal-dropbutton]'
   views-ui-preview:
     id: views-ui-preview
     plugin: text
diff --git a/core/modules/views_ui/css/views_ui.admin.theme.css b/core/modules/views_ui/css/views_ui.admin.theme.css
index 190345b..b0af106 100644
--- a/core/modules/views_ui/css/views_ui.admin.theme.css
+++ b/core/modules/views_ui/css/views_ui.admin.theme.css
@@ -18,95 +18,6 @@
 .box-margin {
   margin: 12px 12px 0 12px;
 }
-.views-admin .icon {
-  height: 16px;
-  width: 16px;
-}
-.views-admin .icon,
-.views-admin .icon-text {
-  background-attachment: scroll;
-  background-image: url(../images/sprites.png);
-  background-position: left top; /* LTR */
-  background-repeat: no-repeat;
-}
-[dir="rtl"] .views-admin .icon,
-[dir="rtl"] .views-admin .icon-text {
-  background-position: right top;
-}
-.views-admin a.icon {
-  background: linear-gradient(-90deg, #fff 0, #e8e8e8 100%) no-repeat, repeat-y;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  box-shadow: 0 0 0 rgba(0,0,0,0.3333) inset;
-}
-.views-admin a.icon:hover {
-  border-color: #d0d0d0;
-  box-shadow: 0 0 1px rgba(0,0,0,0.3333) inset;
-}
-.views-admin a.icon:active {
-  border-color: #c0c0c0;
-}
-.views-admin span.icon {
-  float: left; /* LTR */
-  position: relative;
-}
-[dir="rtl"] .views-admin span.icon {
-  float: right;
-}
-.views-admin .icon.compact {
-  display: block;
-  overflow: hidden;
-  direction: ltr;
-  text-indent: -9999px;
-}
-
-/* Targets any element with an icon -> text combo */
-.views-admin .icon-text {
-  padding-left: 19px; /* LTR */
-}
-[dir="rtl"] .views-admin .icon-text {
-  padding-left: 0;
-  padding-right: 19px;
-}
-.views-admin .icon.linked {
-  background-position: center -153px;
-}
-.views-admin .icon.unlinked {
-  background-position: center -195px;
-}
-.views-admin .icon.add {
-  background-position: center 3px;
-}
-.views-admin a.icon.add {
-  background-position: center 3px, left top; /* LTR */
-}
-[dir="rtl"] .views-admin a.icon.add {
-  background-position: center 3px, right top;
-}
-.views-admin .icon.delete {
-  background-position: center -52px;
-}
-.views-admin a.icon.delete {
-  background-position: center -52px, left top; /* LTR */
-}
-[dir="rtl"] .views-admin a.icon.delete {
-  background-position: center -52px, right top;
-}
-.views-admin .icon.rearrange {
-  background-position: center -111px;
-}
-.views-admin a.icon.rearrange {
-  background-position: center -111px, left top; /* LTR */
-}
-[dir="rtl"] .views-admin a.icon.rearrange {
-  background-position: center -111px, right top;
-}
-.views-displays .tabs a:hover > .icon.add {
-  background-position: center -25px;
-}
-.views-displays .tabs .open a:hover > .icon.add {
-  background-position: center 3px;
-}
 details.box-padding {
   border: none;
 }
@@ -756,64 +667,54 @@ td.group-title {
   margin-bottom: 18px;
   line-height: 1.4555;
 }
-.dropbutton-multiple {
+
+/* Dropbutton overrides. */
+.dropbutton {
   position: absolute;
 }
-.dropbutton-widget {
-  position: relative;
-}
-.js .views-edit-view .dropbutton-wrapper .dropbutton .dropbutton-action > * {
+.views-edit-view .dropbutton__menu-item > * {
   font-size: 10px;
 }
-.js .dropbutton-wrapper .dropbutton .dropbutton-action > .ajax-progress-throbber {
+.dropbutton__menu-item > .ajax-progress-throbber {
   position: absolute;
   right: -5px; /* LTR */
   top: -1px;
   z-index: 2;
 }
-[dir="rtl"].js .dropbutton-wrapper .dropbutton .dropbutton-action > .ajax-progress-throbber {
+[dir="rtl"] .dropbutton__menu-item > .ajax-progress-throbber {
   left: -5px;
   right: auto;
 }
-.js .dropbutton-wrapper.dropbutton-multiple.open .dropbutton-action:first-child a {
-  border-radius: 1.1em 0 0 0; /* LTR */
-}
-[dir="rtl"].js .dropbutton-wrapper.dropbutton-multiple.open .dropbutton-action:first-child a {
-  border-radius: 0 1.1em 0 0;
-}
-.js .dropbutton-wrapper.dropbutton-multiple.open .dropbutton-action:last-child a {
-  border-radius: 0 0 0 1.1em; /* LTR */
-}
-[dir="rtl"].js .dropbutton-wrapper.dropbutton-multiple.open .dropbutton-action:last-child a {
-  border-radius: 0 0 1.1em 0;
-}
-.views-display-top .dropbutton-wrapper {
+
+/* Add a separate class here. */
+.views-display-top .dropbutton {
   position: absolute;
   right: 12px; /* LTR */
   top: 7px;
 }
-[dir="rtl"] .views-display-top .dropbutton-wrapper {
+[dir="rtl"] .views-display-top .dropbutton {
   left: 12px;
   right: auto;
 }
-.views-display-top .dropbutton-wrapper .dropbutton-widget .dropbutton-action a {
+.views-display-top .dropbutton-action a {
   width: auto;
 }
 
-.views-ui-display-tab-bucket .dropbutton-wrapper {
+.views-ui-display-tab-bucket .dropbutton {
   position: absolute;
   right: 5px; /* LTR */
   top: 4px;
+  font-size: small;
 }
-[dir="rtl"] .views-ui-display-tab-bucket .dropbutton-wrapper {
+[dir="rtl"] .views-ui-display-tab-bucket .dropbutton {
   left: 5px;
   right: auto;
 }
-.views-ui-display-tab-bucket .dropbutton-wrapper .dropbutton-widget .dropbutton-action a {
+.views-ui-display-tab-bucket .dropbutton-widget .dropbutton-action a {
   width: auto;
 }
-.views-ui-display-tab-actions .dropbutton-wrapper li a,
-.views-ui-display-tab-actions .dropbutton-wrapper input {
+.views-ui-display-tab-actions .dropbutton li a,
+.views-ui-display-tab-actions .dropbutton input {
   background: none;
   border: medium;
   font-family: inherit;
@@ -821,12 +722,12 @@ td.group-title {
   padding-left: 12px; /* LTR */
   margin-bottom: 0;
 }
-[dir="rtl"] .views-ui-display-tab-actions .dropbutton-wrapper li a,
-[dir="rtl"] .views-ui-display-tab-actions .dropbutton-wrapper input {
+[dir="rtl"] .views-ui-display-tab-actions .dropbutton li a,
+[dir="rtl"] .views-ui-display-tab-actions .dropbutton input {
   padding-left: 0.5em;
   padding-right: 12px;
 }
-.views-ui-display-tab-actions .dropbutton-wrapper input:hover {
+.views-ui-display-tab-actions .dropbutton input:hover {
   background: none;
   border: none;
 }
diff --git a/core/modules/views_ui/js/views-admin.js b/core/modules/views_ui/js/views-admin.js
index 8e35c47..38c402c 100644
--- a/core/modules/views_ui/js/views-admin.js
+++ b/core/modules/views_ui/js/views-admin.js
@@ -1030,7 +1030,7 @@
    */
   Drupal.behaviors.viewsRemoveIconClass = {
     attach: function (context) {
-      $(context).find('.dropbutton').once('dropbutton-icon').find('.icon').removeClass('icon');
+      $(context).find('[data-drupal-dropbutton]').once('dropbutton-icon').find('.icon').removeClass('icon');
     }
   };
 
diff --git a/core/modules/views_ui/src/ViewEditForm.php b/core/modules/views_ui/src/ViewEditForm.php
index 61a7e8b..7a7e056 100644
--- a/core/modules/views_ui/src/ViewEditForm.php
+++ b/core/modules/views_ui/src/ViewEditForm.php
@@ -393,7 +393,7 @@ public function getDisplayDetails($view, $display) {
 
       // Because some of the 'links' are actually submit buttons, we have to
       // manually wrap each item in <li> and the whole list in <ul>.
-      $build['top']['actions']['prefix']['#markup'] = '<ul class="dropbutton">';
+      $build['top']['actions']['prefix']['#markup'] = '<ul class="dropbutton__menu">';
 
       if (!$is_display_deleted) {
         if (!$is_enabled) {
diff --git a/core/themes/bartik/bartik.libraries.yml b/core/themes/bartik/bartik.libraries.yml
index fd82367..07cff9e 100644
--- a/core/themes/bartik/bartik.libraries.yml
+++ b/core/themes/bartik/bartik.libraries.yml
@@ -12,7 +12,7 @@ global-styling:
       css/components/contextual.css: {}
       css/components/demo-block.css: {}
       # @see https://www.drupal.org/node/2389735
-      css/components/dropbutton.component.css: {}
+      css/components/dropbutton.component.css: { weight: 10 }
       css/components/featured-top.css: {}
       css/components/feed-icon.css: {}
       css/components/field.css: {}
diff --git a/core/themes/bartik/css/components/dropbutton.component.css b/core/themes/bartik/css/components/dropbutton.component.css
index db55965..6580a25 100644
--- a/core/themes/bartik/css/components/dropbutton.component.css
+++ b/core/themes/bartik/css/components/dropbutton.component.css
@@ -3,55 +3,35 @@
  * Visual styles for Bartik's dropbutton component.
  */
 
-.js .dropbutton-wrapper .dropbutton-widget {
-  /* This is required to win over specifity of .js td .dropbutton-widget */
-  position: relative;
-}
-.js .dropbutton-widget {
-  border: 1px solid;
-  border-color: #e4e4e4 #d2d2d2 #b4b4b4 #d2d2d2;
-  background-color: #fff;
-  background-image: -webkit-linear-gradient(top, #f3f3f3, #e8e8e8);
-  background-image: linear-gradient(to bottom, #f3f3f3, #e8e8e8);
+.dropbutton__primary-action {
+  display: block;
+  border-top-right-radius: 0; /* LTR */
+  border-bottom-right-radius: 0; /* LTR */
+  border-right-style: hidden; /* LTR */
+}
+[dir="rtl"] .dropbutton__primary-action {
+  border-top-right-radius: 20em;
+  border-bottom-right-radius: 20em;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+  border-left-style: hidden;
+  border-right-style: solid;
+}
+.dropbutton__trigger {
+  border-top-left-radius: 0; /* LTR */
+  border-bottom-left-radius: 0; /* LTR */
+  background: url(../../../../misc/icons/333333/caret-down.svg) no-repeat center center,
+  -webkit-linear-gradient(top, #f3f3f3, #e8e8e8);
+  background: url(../../../../misc/icons/333333/caret-down.svg) no-repeat center center,
+  linear-gradient(to bottom, #f3f3f3, #e8e8e8);
+}
+.dropbutton__trigger:hover,
+.dropbutton__trigger:active,
+.dropbutton__trigger:focus {
+  background: url(../../../../misc/icons/333333/caret-down.svg) no-repeat center center,
+  #dedede;
+}
+.dropbutton__menu-item:hover,
+.dropbutton__menu-item:focus {
   color: #3a3a3a;
-  cursor: pointer;
-  text-align: center;
-  margin: 0.125em 0;
-  border-radius: 1em;
-  overflow: hidden;
-}
-.js .dropbutton-widget:hover {
-  border-color: #e4e4e4 #d2d2d2 #b4b4b4 #d2d2d2;
-}
-.js .dropbutton-widget .button {
-  border: none;
-  margin: 0;
-  padding: 0.32em 1em;
-  background: transparent none;
-}
-.js .dropbutton-multiple .dropbutton-widget .dropbutton-action a {
-  margin-right: 0; /* LTR */
-}
-[dir="rtl"].js .dropbutton-multiple .dropbutton-widget .dropbutton-action a {
-  margin-left: 0;
-}
-.js .dropbutton .secondary-action {
-  border-top-color: #ccc;
-}
-.js .dropbutton-toggle button {
-  background-color: #e8e8e8;
-  background-image: -webkit-linear-gradient(top, #e8e8e8, #d2d2d2);
-  background-image: linear-gradient(to bottom, #e8e8e8, #d2d2d2);
-}
-.js .dropbutton-toggle .dropbutton-arrow:hover {
-  background: #ccc;
-}
-.js .dropbutton a {
-  color: #3a3a3a;
-  border-bottom: 0 none;
-}
-.js .dropbutton .dropbutton-action:hover,
-.js .dropbutton a:hover {
-  background: #dedede;
-  border-bottom: 0 none;
 }
diff --git a/core/themes/bartik/css/components/form.css b/core/themes/bartik/css/components/form.css
index dd5ac0c..b5b6a55 100644
--- a/core/themes/bartik/css/components/form.css
+++ b/core/themes/bartik/css/components/form.css
@@ -63,7 +63,7 @@ textarea,
 select {
   font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif;
 }
-input {
+input:not(.button) {
   margin: 2px 0;
   padding: 4px;
   /* Keep form elements from overflowing their containers. */
@@ -263,13 +263,6 @@ input.form-submit:focus {
 #comment-body-add-more-wrapper .form-type-textarea label {
   margin-bottom: 0.4em;
 }
-#edit-actions input {
-  margin-right: 0.6em; /* LTR */
-}
-[dir="rtl"] #edit-actions input {
-  margin-left: 0.6em;
-  margin-right: 0;
-}
 
 /* Form error styles. */
 .form-item textarea.error + .cke {
diff --git a/core/themes/classy/css/components/dropbutton.css b/core/themes/classy/css/components/dropbutton.css
index cf8c40a..a39c294 100644
--- a/core/themes/classy/css/components/dropbutton.css
+++ b/core/themes/classy/css/components/dropbutton.css
@@ -1,33 +1,132 @@
 /**
  * @file
- * General styles for dropbuttons.
+ * Dropbutton styling.
+ *
+ * A dropbutton is a widget that displays a list of action links as a button
+ * with a primary action. Secondary actions are hidden in a dropdown menu.
  */
 
-.js .dropbutton-widget {
-  background-color: white;
-  border: 1px solid #cccccc;
+/**
+ * The button class is added when there is only one action.
+ * @todo This should be moved to button.css.
+ */
+.button {
+  background: #FFF;
+  color: #333;
+  border: 1px solid #BBB;
+  padding: 0.4em 1em;
+  border-radius: 20em;
+  text-decoration: none;
 }
-.js .dropbutton-widget:hover {
-  border-color: #b8b8b8;
+.button:hover {
+  background-color: #EFEFEF;
 }
-.dropbutton .dropbutton-action > * {
-  padding: 0.1em 0.5em;
-  white-space: nowrap;
+
+/**
+ * The dropbutton class is added with Javascript when there is more than one
+ * action.
+ */
+.dropbutton {
+  position: relative;
+  display: inline-block;
+}
+.dropbutton-multiple {
+  padding-right: 2em; /* LTR */
+}
+[dir="rtl"] .dropbutton-multiple {
+  padding-left: 2em;
+  padding-right: 0;
 }
-.dropbutton .secondary-action {
-  border-top: 1px solid #e8e8e8;
+@media screen and (max-width:600px) {
+  .dropbutton {
+    width: 100%;
+  }
 }
-.dropbutton-multiple .dropbutton {
-  border-right: 1px solid #e8e8e8; /* LTR */
+.dropbutton.is-open {
+  max-width: none;
+  z-index: 100;
+}
+
+/* The primary action, always visible. */
+.dropbutton__primary-action {
+  padding-left: 1em;
+  display: block;
+  border-top-right-radius: 0; /* LTR */
+  border-bottom-right-radius: 0; /* LTR */
+  color: #333;
+  border-right-style: hidden; /* LTR */
 }
-[dir="rtl"] .dropbutton-multiple .dropbutton {
-  border-left: 1px solid #e8e8e8;
-  border-right: 0 none;
+[dir="rtl"] .dropbutton__primary-action {
+  border-top-right-radius: 20em;
+  border-bottom-right-radius: 20em;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+  border-left-style: hidden;
+  border-right-color: #BBB;
 }
-.dropbutton-multiple .dropbutton .dropbutton-action > * {
-  margin-right: 0.25em; /* LTR */
+
+/* The dropbutton trigger toggles the hidden menu. */
+.dropbutton__trigger {
+  position: absolute;
+  margin: 0;
+  border-top-left-radius: 0; /* LTR */
+  border-bottom-left-radius: 0; /* LTR */
+  top: 0;
+  bottom: 0;
+  right: 0; /* LTR */
+  display: block;
+  height: auto;
+  width: 2em;
+  cursor: pointer;
+  background: url(../../../../misc/icons/333333/caret-down.svg) no-repeat center center;
+}
+[dir="rtl"] .dropbutton__trigger {
+  left: 0;
+  right: auto;
+  border-top-left-radius: 20em;
+  border-bottom-left-radius: 20em;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.dropbutton__trigger:hover,
+.dropbutton__trigger:focus {
+  outline: initial;
+}
+
+/* The dropbutton menu contains the hidden action items. */
+.dropbutton__menu {
+  position: absolute;
+  top: 2em;
+  display: none;
+  margin: 5px 0;
+  min-width: 100%;
+  padding: 5px 0;
+  background: #fff;
+  border: 1px solid #a6a6a6;
+  border-radius: 5px;
+  list-style-image: none;
+  list-style-type: none;
+  overflow: hidden;
+}
+.dropbutton.is-open .dropbutton__menu {
+  display: block;
+}
+.dropbutton__menu li,
+.dropbutton__menu-item {
+  display: block;
+}
+.dropbutton__menu-item {
+  font-size: 0.9em;
+  padding: 0.35em 1em;
+  color: #262626;
+  text-decoration: none;
+  min-width: 100%;
+  text-align: inherit;
+  white-space: nowrap;
 }
-[dir="rtl"] .dropbutton-multiple .dropbutton .dropbutton-action > * {
-  margin-left: 0.25em;
-  margin-right: 0;
+.dropbutton__menu-item:focus,
+.dropbutton__menu-item:hover {
+  background: #efefef;
+  text-decoration: none;
+  outline: initial;
 }
diff --git a/core/themes/classy/templates/form/dropbutton-wrapper.html.twig b/core/themes/classy/templates/form/dropbutton-wrapper.html.twig
index 5dccc85..24a23f2 100644
--- a/core/themes/classy/templates/form/dropbutton-wrapper.html.twig
+++ b/core/themes/classy/templates/form/dropbutton-wrapper.html.twig
@@ -12,7 +12,7 @@
 #}
 {% if children %}
   {% spaceless %}
-    <div class="dropbutton-wrapper">
+    <div data-drupal-dropbutton class="dropbutton-wrapper">
       <div class="dropbutton-widget">
         {{ children }}
       </div>
diff --git a/core/themes/seven/css/components/dropbutton.component.css b/core/themes/seven/css/components/dropbutton.component.css
index 6f08502..7410e79 100644
--- a/core/themes/seven/css/components/dropbutton.component.css
+++ b/core/themes/seven/css/components/dropbutton.component.css
@@ -1,320 +1,115 @@
 /**
  * @file
- * Styling dropbuttons.
+ * Seven styling for dropbuttons, builds on Classy's styling and Seven's
+ * buttons.css.
  */
 
-/**
- * Reset styling for all elements.
- */
-.js .dropbutton .dropbutton-action > input,
-.js .dropbutton .dropbutton-action > a,
-.js .dropbutton .dropbutton-action > button {
-  color: #333333;
-  text-decoration: none;
-  padding: 0;
-  margin: 0;
-  font-weight: 600;
-  line-height: normal;
-  -webkit-font-smoothing: antialiased;
-  text-align: left; /* LTR */
-}
-[dir="rtl"] .js .dropbutton .dropbutton-action > input,
-[dir="rtl"] .js .dropbutton .dropbutton-action > a,
-[dir="rtl"] .js .dropbutton .dropbutton-action > button {
-  text-align: right;
-}
-.js .dropbutton-action.last {
-  border-radius: 0 0 0 1em; /* LTR */
-}
-[dir="rtl"] .js .dropbutton-action.last {
-  border-radius: 0 0 1em 0;
-}
-
-/**
- * Overwrite Sevens button styling.
- */
-.js .dropbutton-widget .button {
-  background: transparent;
-  border: 0;
-  border-radius: 0;
-  box-shadow: none;
-}
-.js .dropbutton-multiple .dropbutton {
-  border-right: 0; /* LTR */
-}
-[dir="rtl"].js .dropbutton-multiple .dropbutton {
-  border-left: 0;
-}
-
-/**
- * Show dropbutton elements as buttons when javascript is disabled
- */
-.dropbutton {
-  margin: 0;
-  padding: 0;
-  list-style-type: none;
-}
-.dropbutton li + li {
-  margin-top: 10px;
-}
-.js .dropbutton li {
-  margin-bottom: 0;
-  margin-right: 0;
-}
-.js .dropbutton li + li {
-  margin-top: 0;
-}
-
-@media screen and (min-width: 37.5625em) { /* 601px */
-  .dropbutton li {
-    display: inline-block;
-  }
-  .dropbutton li + li {
-    margin-left: 1em;
-    margin-top: 0;
-  }
-  .js .dropbutton li + li {
-    margin-left: 0;
-  }
-}
-
-/**
- * Copied styling for .button.
- */
-.js .dropbutton-multiple .dropbutton-widget {
-  border: 1px solid #a6a6a6;
-  border-radius: 20em;
-  background-color: #f2f1eb;
-  background-image: -webkit-linear-gradient(top, #f6f6f3, #e7e7df);
-  background-image: linear-gradient(to bottom, #f6f6f3, #e7e7df);
-  text-shadow: 0 1px hsla(0, 0%, 100%, 0.6);
-}
-.dropbutton-multiple.open .dropbutton-widget {
-  border-radius: 1em;
-}
-.js .dropbutton-widget .dropbutton-action a,
-.js .dropbutton-widget .dropbutton-action input,
-.js .dropbutton-widget .dropbutton-action button {
-  border-radius: 20em 0 0 20em; /* LTR */
-  padding: 4px 1.5em;
+.dropbutton__primary-action {
   display: block;
-  width: 100%;
-}
-[dir="rtl"].js .dropbutton-widget .dropbutton-action a,
-[dir="rtl"].js .dropbutton-widget .dropbutton-action input,
-[dir="rtl"].js .dropbutton-widget .dropbutton-action button {
-  border-radius: 0 20em 20em 0;
-}
-.js .dropbutton-widget .dropbutton-action a:focus,
-.js .dropbutton-widget .dropbutton-action input:focus,
-.js .dropbutton-widget .dropbutton-action button:focus {
-  text-decoration: underline;
-}
-.js .dropbutton-multiple.open .dropbutton-action a,
-.js .dropbutton-multiple.open .dropbutton-action .button {
-  border-radius: 0;
-}
-.js .dropbutton-multiple.open .dropbutton-action:first-child a,
-.js .dropbutton-multiple.open .dropbutton-action:first-child .button {
-  border-radius: 0.9em 0 0 0; /* LTR */
-}
-[dir="rtl"].js .dropbutton-multiple.open .dropbutton-action:first-child a,
-[dir="rtl"].js .dropbutton-multiple.open .dropbutton-action:first-child .button {
-  border-radius: 0 0.9em 0 0;
-}
-.js .dropbutton-multiple.open .dropbutton-action:last-child a,
-.js .dropbutton-multiple.open .dropbutton-action:last-child .button {
-  border-radius: 0 0 0 0.9em; /* LTR */
-}
-[dir="rtl"].js .dropbutton-multiple.open .dropbutton-action:last-child a,
-[dir="rtl"].js .dropbutton-multiple.open .dropbutton-action:last-child .button {
-  border-radius: 0 0 0.9em 0;
-}
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-action a:hover,
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-action button:hover,
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-action input:hover,
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-action a:focus,
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-action button:focus,
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-action input:focus {
-  background-color: #f9f8f6;
-  background-image: -webkit-linear-gradient(top, #fcfcfa, #e9e9dd);
-  background-image: linear-gradient(to bottom, #fcfcfa, #e9e9dd);
-  color: #1a1a1a;
-  box-shadow: 0 1px 2px hsla(0, 0%, 0%, 0.125);
-  z-index: 3;
-}
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-action a:active,
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-action input:active,
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-action button:active {
-  text-decoration: none;
-  background-color: #dfdfd9;
-  background-image: -webkit-linear-gradient(top, #f6f6f3, #e7e7df);
-  background-image: linear-gradient(to bottom, #f6f6f3, #e7e7df);
-  box-shadow: inset 0 1px 3px hsla(0, 0%, 0%, 0.2);
-}
-.dropbutton .secondary-action {
-  border-top: 1px solid #bfbfba;
-}
-
-/**
- * Rare instances when a dropbutton is actually just a button.
- * Copied from Seven's buttons.css.
- */
-.dropbutton-single .dropbutton-widget {
-  border: 0;
-  position: static;
-  display: inline-block;
-}
-.dropbutton-single .dropbutton-action a {
-  padding: 4px 1.5em;
-  border: 1px solid #a6a6a6;
-  border-radius: 20em!important;
+  border-top-right-radius: 0; /* LTR */
+  border-bottom-right-radius: 0; /* LTR */
+  border-right-style: hidden; /* LTR */
+  padding: 0.4em 1em;
+}
+[dir="rtl"] .dropbutton__primary-action {
+  border-top-right-radius: 20em;
+  border-bottom-right-radius: 20em;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+  border-left-style: hidden;
+  border-right-style: solid;
+}
+.dropbutton__trigger {
+  border-top-left-radius: 0; /* LTR */
+  border-bottom-left-radius: 0; /* LTR */
+  position: absolute;
+  padding: 0.4em 1em;
   background-color: #f2f1eb;
-  background-image: -webkit-linear-gradient(top, #f6f6f3, #e7e7df);
-  background-image: linear-gradient(to bottom, #f6f6f3, #e7e7df);
-  color: #333333;
-  text-decoration: none;
-  text-shadow: 0 1px hsla(0, 0%, 100%, 0.6);
-  font-weight: 600;
-  -webkit-transition: all 0.1s;
-  transition: all 0.1s;
-  -webkit-font-smoothing: antialiased;
-  width: auto!important;
-}
-.dropbutton-single .dropbutton-action a:hover,
-.dropbutton-single .dropbutton-action a:focus {
-  background-color: #f9f8f6;
-  background-image: -webkit-linear-gradient(top, #fcfcfa, #e9e9dd);
-  background-image: linear-gradient(to bottom, #fcfcfa, #e9e9dd);
-  color: #1a1a1a;
-  text-decoration: none;
-  outline: none;
-}
-.dropbutton-single .dropbutton-action a:hover,
-.dropbutton-single .dropbutton-action a:focus {
-  box-shadow: 0 1px 2px hsla(0, 0%, 0%, 0.125);
-}
-.dropbutton-single .dropbutton-action a:active {
-  background-color: #dfdfd9;
-  background-image: -webkit-linear-gradient(top, #f6f6f3, #e7e7df);
-  background-image: linear-gradient(to bottom, #f6f6f3, #e7e7df);
+  background: url(../../../../misc/icons/333333/caret-down.svg) no-repeat center center,
+  -webkit-linear-gradient(top, #f6f6f3, #e7e7df);
+  background: url(../../../../misc/icons/333333/caret-down.svg) no-repeat center center,
+  linear-gradient(top, #f6f6f3, #e7e7df);
+}
+[dir="rtl"] .dropbutton__trigger {
+  border-top-left-radius: 20em;
+  border-bottom-left-radius: 20em;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.dropbutton.is-open .dropbutton__trigger,
+.dropbutton__trigger:focus,
+.dropbutton__trigger:hover {
+  background-image: url(../../../../misc/icons/333333/caret-down.svg),
+  -webkit-linear-gradient(top, #fcfcfa, #e9e9dd);
+  background-image: url(../../../../misc/icons/333333/caret-down.svg),
+  linear-gradient(top, #fcfcfa, #e9e9dd);
+}
+.dropbutton__trigger:active,
+.dropbutton.is-open .dropbutton__trigger {
+  background-image: url(../../../../misc/icons/333333/caret-down.svg),
+  -webkit-linear-gradient(to bottom, #f6f6f3, #e7e7df);
+  background-image: url(../../../../misc/icons/333333/caret-down.svg),
+  linear-gradient(to bottom, #f6f6f3, #e7e7df);
   box-shadow: inset 0 1px 3px hsla(0, 0%, 0%, 0.2);
-  -webkit-transition: none;
-  transition: none;
-}
-
-/**
- * The dropdown trigger.
- */
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-toggle button {
-  border-left: 1px solid #a6a6a6; /* LTR */
-  outline: none;
-}
-[dir="rtl"].js .dropbutton-wrapper .dropbutton-widget .dropbutton-toggle button {
-  border-right: 1px solid #a6a6a6;
-  border-left: 0;
+  border-color: #a6a6a6;
 }
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-toggle button {
-  border-radius: 0 20em 20em 0; /* LTR */
+.dropbutton__menu {
+  top: 2.2em;
 }
-[dir="rtl"].js .dropbutton-wrapper .dropbutton-widget .dropbutton-toggle button {
-  border-radius: 20em 0 0 20em;
-}
-.dropbutton-multiple.open .dropbutton-widget .dropbutton-toggle button {
-  border-radius: 0 1em 1em 0; /* LTR */
-}
-[dir="rtl"] .dropbutton-multiple.open .dropbutton-widget .dropbutton-toggle button {
-  border-radius: 1em 0 0 1em;
-}
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-toggle button:hover,
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-toggle button:focus {
-  background-color: #f9f8f6;
-  background-image: -webkit-linear-gradient(top, #fcfcfa, #e9e9dd);
-  background-image: linear-gradient(to bottom, #fcfcfa, #e9e9dd);
-  color: #1a1a1a;
-  text-decoration: none;
-  box-shadow: 0 1px 2px hsla(0, 0%, 0%, 0.125);
-  z-index: 3;
-}
-.js .dropbutton-wrapper .dropbutton-widget .dropbutton-toggle button:active {
-  background-color: #dfdfd9;
-  background-image: -webkit-linear-gradient(top, #f6f6f3, #e7e7df);
-  background-image: linear-gradient(to bottom, #f6f6f3, #e7e7df);
-  box-shadow: inset 0 1px 3px hsla(0, 0%, 0%, 0.2);
-}
-.dropbutton-arrow {
-  border-top-color: #333;
-  right: 35%; /* LTR */
-  top: 54%;
-}
-[dir="rtl"] .dropbutton-arrow {
-  left: 35%;
-  right: auto;
-}
-.dropbutton-multiple.open .dropbutton-arrow {
-  border-bottom: 0.3333em solid #333;
-  border-top-color: transparent;
-  top: 0.6667em;
+.dropbutton__menu-item:focus,
+.dropbutton__menu-item:hover {
+  background: #c8ecfe;
 }
 
 /**
  * Form edit action theming.
  * Copied styling from .button--primary.
+ * @todo: Create a dropbutton--primary component.
  */
-.js .form-actions .dropbutton .dropbutton-action > * {
-  color: #fff;
-  font-weight: 700;
-  text-shadow: 0 1px hsla(0, 0%, 0%, 0.5);
-}
-.js .form-actions .dropbutton-widget {
+.form-actions .dropbutton .button {
   border-color: #1e5c90;
   background-color: #0071b8;
-  background-image: -webkit-linear-gradient(top, #007bc6, #0071b8);
-  background-image: linear-gradient(to bottom, #007bc6, #0071b8);
+  background-image: url(../../../../misc/icons/333333/caret-down.svg),
+  -webkit-linear-gradient(top, #007bc6, #0071b8);
+  background-image:   linear-gradient(to bottom, #007bc6, #0071b8);
+  color: #fff;
   text-shadow: 0 1px hsla(0, 0%, 0%, 0.5);
-  position: relative;
-}
-.form-actions .dropbutton-multiple.open .dropbutton-widget {
-  background-image: -webkit-linear-gradient(top, #007bc6, #0071b8);
-  background-image: linear-gradient(to bottom, #007bc6, #0071b8);
+  font-weight: 700;
+  -webkit-font-smoothing: antialiased;
 }
-.js .form-actions .dropbutton-wrapper .dropbutton-widget .dropbutton-action .button:hover,
-.js .form-actions .dropbutton-wrapper .dropbutton-widget .dropbutton-action .button:focus {
+.form-actions .dropbutton .button:hover,
+.form-actions .dropbutton .button:focus {
   background-color: #2369a6;
   background-image: -webkit-linear-gradient(top, #0c97ed, #1f86c7);
   background-image: linear-gradient(to bottom, #0c97ed, #1f86c7);
   box-shadow: 0 1px 2px hsla(203, 10%, 10%, 0.25);
   color: #fff;
 }
-.js .form-actions .dropbutton-wrapper .dropbutton-widget .dropbutton-action .button:active {
-  background-image: -webkit-linear-gradient(top, #08639b, #0071b8);
-  background-image: linear-gradient(to bottom, #08639b, #0071b8);
-  border-color: #144b78;
-  box-shadow: inset 0 1px 3px hsla(0, 0%, 0%, 0.2);
-}
-.js .form-actions .dropbutton-wrapper .dropbutton-widget .dropbutton-toggle button,
-.form-actions .dropbutton .secondary-action {
-  border-color: #1e5c90;
-}
-.js .form-actions .dropbutton-wrapper .dropbutton-widget .dropbutton-toggle button {
-  background-image: -webkit-linear-gradient(top, #007bc6, #0071b8);
-  background-image: linear-gradient(to bottom, #007bc6, #0071b8);
-}
-.js .form-actions .dropbutton-wrapper .dropbutton-widget .dropbutton-toggle button:hover,
-.js .form-actions .dropbutton-wrapper .dropbutton-widget .dropbutton-toggle button:focus {
-  background-color: #2369a6;
-  background-image: -webkit-linear-gradient(top, #0c97ed, #1f86c7);
-  background-image: linear-gradient(to bottom, #0c97ed, #1f86c7);
-}
-.js .form-actions .dropbutton-wrapper .dropbutton-widget .dropbutton-toggle button:active {
+.form-actions .dropbutton .button:active {
   background-image: -webkit-linear-gradient(top, #08639b, #0071b8);
   background-image: linear-gradient(to bottom, #08639b, #0071b8);
   border-color: #144b78;
   box-shadow: inset 0 1px 3px hsla(0, 0%, 0%, 0.2);
 }
-.form-actions .dropbutton-arrow {
-  border-top-color: #fff;
-}
-.form-actions .dropbutton-multiple.open .dropbutton-arrow {
-  border-bottom: 0.3333em solid white;
+
+/* Override the background images for the trigger so we can add an arrow. */
+.form-actions .dropbutton .dropbutton__trigger {
+  background-image: url(../../../../misc/icons/ffffff/caret-down.svg),
+  -webkit-linear-gradient(top, #007bc6, #0071b8);
+  background-image: url(../../../../misc/icons/ffffff/caret-down.svg),
+  linear-gradient(top, #007bc6, #0071b8);
+}
+.form-actions .dropbutton .dropbutton__trigger:hover,
+.form-actions .dropbutton .dropbutton__trigger:focus {
+  background-image: url(../../../../misc/icons/ffffff/caret-down.svg),
+  -webkit-linear-gradient(top, #0c97ed, #1f86c7);
+  background-image: url(../../../../misc/icons/ffffff/caret-down.svg),
+  linear-gradient(to bottom, #0c97ed, #1f86c7);
+}
+.form-actions .dropbutton .dropbutton__trigger.is-open,
+.form-actions .dropbutton .dropbutton__trigger:active {
+  background-image: url(../../../../misc/icons/ffffff/caret-down.svg),
+  -webkit-linear-gradient(top, #08639b, #0071b8);
+  background-image: url(../../../../misc/icons/ffffff/caret-down.svg),
+  linear-gradient(to bottom, #08639b, #0071b8);
 }
