diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 466f510..4e48e73 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -535,9 +535,12 @@ function template_preprocess_node_add_list(&$variables) {
  * Implements hook_preprocess_HOOK() for HTML document templates.
  */
 function node_preprocess_html(&$variables) {
-  // If on an individual node page, add the node type to body classes.
-  if (($node = \Drupal::routeMatch()->getParameter('node')) && $node instanceof NodeInterface) {
-    $variables['node_type'] = $node->getType();
+  // If on an individual node page or node preview page, add the node type to
+  // the body classes.
+  if (($node = \Drupal::routeMatch()->getParameter('node')) || ($node = \Drupal::routeMatch()->getParameter('node_preview'))) {
+    if ($node instanceof NodeInterface) {
+      $variables['node_type'] = $node->getType();
+    }
   }
 }
 
diff --git a/core/modules/node/src/Tests/PagePreviewTest.php b/core/modules/node/src/Tests/PagePreviewTest.php
index 37b00d3..d47f5fc 100644
--- a/core/modules/node/src/Tests/PagePreviewTest.php
+++ b/core/modules/node/src/Tests/PagePreviewTest.php
@@ -184,6 +184,10 @@ public function testPagePreview() {
     $this->assertText($edit[$term_key], 'Term displayed.');
     $this->assertLink(t('Back to content editing'));
 
+    // Check that we see the class of the node type on the body element
+    $body_class_element = $this->xpath("//body[contains(@class, 'page-node-type-page')]");
+    $this->assertTrue(!empty($body_class_element), 'Node type body class found.');
+
     // Get the UUID.
     $url = parse_url($this->getUrl());
     $paths = explode('/', $url['path']);
