diff --git a/config/schema/page_manager.schema.yml b/config/schema/page_manager.schema.yml
index 1fe3464..9b3a899 100644
--- a/config/schema/page_manager.schema.yml
+++ b/config/schema/page_manager.schema.yml
@@ -101,6 +101,12 @@ page_manager.block_plugin.*:
       label: 'Context assignments'
       sequence:
         - type: string
+    css_classes:
+      type: string
+      label: 'CSS classes'
+    css_id:
+      type: string
+      label: 'CSS id'
 
 # @todo Move to core in https://www.drupal.org/node/2838130.
 display_variant.plugin.*:
diff --git a/page_manager.install b/page_manager.install
index 6180cf9..c0148cb 100644
--- a/page_manager.install
+++ b/page_manager.install
@@ -55,3 +55,26 @@ function page_manager_update_8002() {
     }
   }
 }
+
+/**
+ * Add css_classes and css_id to the existing config schema.
+ */
+function page_manager_update_8003() {
+  $config_factory = \Drupal::configFactory();
+  foreach ($config_factory->listAll('page_manager.page_variant.') as $config_name) {
+    $config = $config_factory->getEditable($config_name);
+    $blocks = $config->get('variant_settings.blocks');
+    $need_save = FALSE;
+    foreach ($blocks as $block_id => $block) {
+      if (!isset($block['css_classes']) && !isset($block['css_id'])) {
+        $block['css_classes'] = '';
+        $block['css_id'] = '';
+        $config->set('variant_settings.blocks.' . $block_id, $block);
+        $need_save = TRUE;
+      }
+    }
+    if ($need_save) {
+      $config->save(TRUE);
+    }
+  }
+}
diff --git a/page_manager_ui/src/Form/VariantPluginConfigureBlockFormBase.php b/page_manager_ui/src/Form/VariantPluginConfigureBlockFormBase.php
index 59de6c6..2b46363 100644
--- a/page_manager_ui/src/Form/VariantPluginConfigureBlockFormBase.php
+++ b/page_manager_ui/src/Form/VariantPluginConfigureBlockFormBase.php
@@ -142,6 +142,19 @@ abstract class VariantPluginConfigureBlockFormBase extends FormBase {
       $form['context_mapping'] = $this->addContextAssignmentElement($this->block, $this->getVariantPlugin()->getContexts());
     }
 
+    $settings = $this->block->getConfiguration();
+    $form['css_classes'] = [
+      '#title' => $this->t('Css classes'),
+      '#type' => 'textfield',
+      '#default_value' => !empty($settings['css_classes']) ? $settings['css_classes'] : NULL,
+    ];
+
+    $form['css_id'] = [
+      '#title' => $this->t('Css ID'),
+      '#type' => 'textfield',
+      '#default_value' => !empty($settings['css_id']) ? $settings['css_id'] : NULL,
+    ];
+
     $form['actions']['submit'] = [
       '#type' => 'submit',
       '#value' => $this->submitText(),
@@ -180,7 +193,12 @@ abstract class VariantPluginConfigureBlockFormBase extends FormBase {
       $this->block->setContextMapping($form_state->getValue('context_mapping', []));
     }
 
-    $this->getVariantPlugin()->updateBlock($this->block->getConfiguration()['uuid'], ['region' => $form_state->getValue('region')]);
+    $block_settings = [
+      'region' => $form_state->getValue('region'),
+      'css_classes' => $form_state->getValue('css_classes'),
+      'css_id' => $form_state->getValue('css_id'),
+    ];
+    $this->getVariantPlugin()->updateBlock($this->block->getConfiguration()['uuid'], $block_settings);
 
     $cached_values = $this->getTempstore()->get($form_state->get('variant_id'));
     $cached_values['plugin'] = $this->getVariantPlugin();
diff --git a/src/Plugin/DisplayVariant/PageBlockDisplayVariant.php b/src/Plugin/DisplayVariant/PageBlockDisplayVariant.php
index 4b704d0..a8a4173 100644
--- a/src/Plugin/DisplayVariant/PageBlockDisplayVariant.php
+++ b/src/Plugin/DisplayVariant/PageBlockDisplayVariant.php
@@ -155,6 +155,19 @@ class PageBlockDisplayVariant extends BlockDisplayVariant implements PluginWizar
           ],
         ];
 
+        // Add css classes.
+        $css_classes = !empty($this->configuration['blocks'][$block_id]['css_classes']) ? $this->configuration['blocks'][$block_id]['css_classes'] : '';
+        $classes_array = explode(' ', $css_classes);
+        foreach ($classes_array as $class) {
+          $block_build['#attributes']['class'][] = Html::cleanCssIdentifier($class);
+        }
+
+        // Add css id.
+        $css_id = !empty($this->configuration['blocks'][$block_id]['css_id']) ? $this->configuration['blocks'][$block_id]['css_id'] : '';
+        if (!empty($css_id)) {
+          $block_build['#attributes']['id'] = Html::getId($css_id);
+        }
+
         // Merge the cacheability metadata of blocks into the page. This helps
         // to avoid cache redirects if the blocks have more cache contexts than
         // the page, which the page must respect as well.
