diff --git a/core/themes/classy/css/components/image-widget.css b/core/themes/classy/css/components/image-widget.css
index 3da51ef..8bae2ef 100644
--- a/core/themes/classy/css/components/image-widget.css
+++ b/core/themes/classy/css/components/image-widget.css
@@ -1,6 +1,12 @@
 
 /**
  * Image upload widget.
+ *
+ * This file is not being loaded by Classy.
+ * If attach_library() is a function, not a tag so it can't be executed directly
+ * from image-widget.html.twig file.
+ *
+ * @see https://www.drupal.org/node/2641380
  */
 .image-preview {
   float: left; /* LTR */
diff --git a/core/themes/classy/templates/content-edit/image-widget.html.twig b/core/themes/classy/templates/content-edit/image-widget.html.twig
index 5e8033f..dac3a22 100644
--- a/core/themes/classy/templates/content-edit/image-widget.html.twig
+++ b/core/themes/classy/templates/content-edit/image-widget.html.twig
@@ -10,7 +10,6 @@
  * @see template_preprocess_image_widget()
  */
 #}
-{{ attach_library('classy/image-widget') }}
 <div{{ attributes }}>
   {% if data.preview %}
     <div class="image-preview">
diff --git a/core/themes/seven/css/components/image-widget.css b/core/themes/seven/css/components/image-widget.css
new file mode 100644
index 0000000..3da51ef
--- /dev/null
+++ b/core/themes/seven/css/components/image-widget.css
@@ -0,0 +1,21 @@
+
+/**
+ * Image upload widget.
+ */
+.image-preview {
+  float: left; /* LTR */
+  padding: 0 10px 10px 0; /* LTR */
+}
+[dir="rtl"] .image-preview {
+  float: right;
+  padding: 0 0 10px 10px;
+}
+.image-widget-data {
+  float: left; /* LTR */
+}
+[dir="rtl"] .image-widget-data {
+  float: right;
+}
+.image-widget-data .text-field {
+  width: auto;
+}
diff --git a/core/themes/seven/seven.libraries.yml b/core/themes/seven/seven.libraries.yml
index a5b6d8a..9528859 100644
--- a/core/themes/seven/seven.libraries.yml
+++ b/core/themes/seven/seven.libraries.yml
@@ -98,3 +98,9 @@ tour-styling:
   css:
     theme:
       css/components/tour.theme.css: {}
+
+image-widget:
+  version: VERSION
+  css:
+    component:
+      css/components/image-widget.css: {}
diff --git a/core/themes/seven/templates/content-edit/image-widget.html.twig b/core/themes/seven/templates/content-edit/image-widget.html.twig
new file mode 100644
index 0000000..74efcd8
--- /dev/null
+++ b/core/themes/seven/templates/content-edit/image-widget.html.twig
@@ -0,0 +1,24 @@
+{#
+/**
+ * @file
+ * Theme override for an image field widget.
+ *
+ * Available variables:
+ * - attributes: HTML attributes for the containing element.
+ * - data: Render elements of the image widget.
+ *
+ * @see template_preprocess_image_widget()
+ */
+#}
+{{ attach_library('seven/image-widget') }}
+<div{{ attributes }}>
+  {% if data.preview %}
+    <div class="image-preview">
+      {{ data.preview }}
+    </div>
+  {% endif %}
+  <div class="image-widget-data">
+    {# Render widget data without the image preview that was output already. #}
+    {{ data|without('preview') }}
+  </div>
+</div>
