diff --git a/src/Definition/PatternDefinition.php b/src/Definition/PatternDefinition.php
index 2057ed2ab4f7dacd0c79cbbb44e460c5286eb8b8..3e2fb8a568e9a2eec51116bd7508d8da98d112eb 100644
--- a/src/Definition/PatternDefinition.php
+++ b/src/Definition/PatternDefinition.php
@@ -304,7 +304,7 @@ class PatternDefinition extends PluginDefinition implements DerivablePluginDefin
    * @param string $name
    *   Field name.
    *
-   * @return PatternDefinitionField|null
+   * @return \Drupal\ui_patterns\Definition\PatternDefinitionVariant|null
    *   Definition field.
    */
   public function getVariant($name) {
@@ -442,7 +442,18 @@ class PatternDefinition extends PluginDefinition implements DerivablePluginDefin
    *   Whereas definition uses the "use:" property.
    */
   public function hasUse() {
-    return !empty($this->definition['use']);
+    $pattern_has_use = !empty($this->definition['use']);
+
+    if (!$pattern_has_use) {
+      $pattern_variants = $this->getVariants();
+      foreach ($pattern_variants as $pattern_variant) {
+        if ($pattern_variant->hasUse()) {
+          $pattern_has_use = TRUE;
+          break;
+        }
+      }
+    }
+    return $pattern_has_use;
   }
 
   /**
diff --git a/src/Definition/PatternDefinitionVariant.php b/src/Definition/PatternDefinitionVariant.php
index b17cabda607bf07dd8da872e8fb824264471ba63..fceec594b3e8dc2a4006ea7aef51fcb52e5acae0 100644
--- a/src/Definition/PatternDefinitionVariant.php
+++ b/src/Definition/PatternDefinitionVariant.php
@@ -20,6 +20,7 @@ class PatternDefinitionVariant implements \ArrayAccess {
     'name' => NULL,
     'label' => NULL,
     'description' => NULL,
+    'use' => NULL,
   ];
 
   /**
@@ -31,8 +32,7 @@ class PatternDefinitionVariant implements \ArrayAccess {
       $this->definition['label'] = $value;
     }
     else {
-      $this->definition['name'] = !isset($value['name']) ? $name : $value['name'];
-      $this->definition['label'] = $value['label'];
+      $this->definition['name'] = $value['name'] ?? $name;
       $this->definition = $value + $this->definition;
     }
   }
@@ -90,4 +90,36 @@ class PatternDefinitionVariant implements \ArrayAccess {
     return $this;
   }
 
+  /**
+   * Getter.
+   *
+   * @return bool
+   *   Whereas definition uses the "use:" property.
+   */
+  public function hasUse() {
+    return !empty($this->definition['use']);
+  }
+
+  /**
+   * Getter.
+   *
+   * @return string
+   *   Property value.
+   */
+  public function getUse() {
+    return $this->definition['use'];
+  }
+
+  /**
+   * Setter.
+   *
+   * @param string $use
+   *   Property value.
+   *
+   * @return $this
+   */
+  public function setUse($use) {
+    $this->definition['use'] = $use;
+    return $this;
+  }
 }
diff --git a/src/Element/Pattern.php b/src/Element/Pattern.php
index e04ea99a5300db72dd7b95d604406236a2b6c358..eab10d1e5716d4c8b47eca34f49d3914fa4a68b4 100644
--- a/src/Element/Pattern.php
+++ b/src/Element/Pattern.php
@@ -135,6 +135,13 @@ class Pattern extends RenderElement {
       $element['#use'] = $definition->getUse();
     }
 
+    if (isset($element['#variant'])) {
+      $variant_definition = $definition->getVariant($element['#variant']);
+      if ($variant_definition && $variant_definition->hasUse()) {
+        $element['#use'] = $variant_definition->getUse();
+      }
+    }
+
     return $element;
   }
 
diff --git a/tests/src/Unit/Definition/PatternDefinitionTest.php b/tests/src/Unit/Definition/PatternDefinitionTest.php
index 6d56c560f1761d3a1868a9d115c0103a01768049..d6e76dae28e8e0274c9ff7a44f637455671fddcf 100644
--- a/tests/src/Unit/Definition/PatternDefinitionTest.php
+++ b/tests/src/Unit/Definition/PatternDefinitionTest.php
@@ -35,7 +35,7 @@ class PatternDefinitionTest extends AbstractUiPatternsTest {
    */
   public function testGettersSetters($getter, $name, $value) {
     $pattern_definition = new PatternDefinition([$name => $value]);
-    $this->assertEquals(call_user_func([$pattern_definition, $getter]), $value);
+    $this->assertEquals($value, call_user_func([$pattern_definition, $getter]));
   }
 
   /**
@@ -157,4 +157,88 @@ class PatternDefinitionTest extends AbstractUiPatternsTest {
     return Yaml::decode(file_get_contents($this->getFixturePath() . '/definition/variants_processing.yml'));
   }
 
+  /**
+   * Test hasUse method.
+   *
+   * @dataProvider hasUseProvider
+   *
+   * @covers ::hasUse
+   */
+  public function testHasUse(array $pattern, bool $expected): void {
+    $patternDefinition = new PatternDefinition($pattern);
+    $this->assertEquals($expected, $patternDefinition->hasUse());
+  }
+
+  /**
+   * Provider.
+   *
+   * @return array
+   *   Data.
+   */
+  public function hasUseProvider(): array {
+    return [
+      'pattern_without_use' => [
+        [
+          'id' => 'test',
+        ],
+        FALSE,
+      ],
+      'pattern_with_use' => [
+        [
+          'id' => 'test',
+          'use' => 'my use',
+        ],
+        TRUE,
+      ],
+      'pattern_with_use_with_variant' => [
+        [
+          'id' => 'test',
+          'use' => 'my use',
+          'variants' => [
+            'default' => [
+              'label' => 'Default',
+            ],
+          ],
+        ],
+        TRUE,
+      ],
+      'pattern_with_variant' => [
+        [
+          'id' => 'test',
+          'variants' => [
+            'default' => [
+              'label' => 'Default',
+            ],
+          ],
+        ],
+        FALSE,
+      ],
+      'pattern_with_variant_with_use' => [
+        [
+          'id' => 'test',
+          'variants' => [
+            'default' => [
+              'label' => 'Default',
+              'use' => 'my use',
+            ],
+          ],
+        ],
+        TRUE,
+      ],
+      'pattern_with_use_with_variant_with_use' => [
+        [
+          'id' => 'test',
+          'use' => 'my use',
+          'variants' => [
+            'default' => [
+              'label' => 'Default',
+              'use' => 'my use',
+            ],
+          ],
+        ],
+        TRUE,
+      ],
+    ];
+  }
+
 }
diff --git a/tests/src/Unit/Definition/PatternDefinitionVariantTest.php b/tests/src/Unit/Definition/PatternDefinitionVariantTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..9d90e3521bc12c9fbe7562812630191d10efd9c6
--- /dev/null
+++ b/tests/src/Unit/Definition/PatternDefinitionVariantTest.php
@@ -0,0 +1,105 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\Tests\ui_patterns\Unit\Definition;
+
+use Drupal\Tests\ui_patterns\Unit\AbstractUiPatternsTest;
+use Drupal\ui_patterns\Definition\PatternDefinitionVariant;
+
+/**
+ * @coversDefaultClass \Drupal\ui_patterns\Definition\PatternDefinitionVariant
+ *
+ * @group ui_patterns
+ */
+class PatternDefinitionVariantTest extends AbstractUiPatternsTest {
+
+  /**
+   * Test constructor with either scalar or array.
+   *
+   * @covers ::__construct
+   * @covers ::hasUse
+   * @covers ::setDescription
+   * @covers ::setUse
+   */
+  public function testConstructor(): void {
+    // Scalar value.
+    $patternDefinitionVariant = new PatternDefinitionVariant('test', 'my label');
+    $this->assertEquals('test', $patternDefinitionVariant->getName());
+    $this->assertEquals('my label', $patternDefinitionVariant->getLabel());
+    $this->assertEquals(NULL, $patternDefinitionVariant->getDescription());
+    $this->assertEquals(NULL, $patternDefinitionVariant->getUse());
+    $this->assertFalse($patternDefinitionVariant->hasUse());
+
+    // Array without name.
+    $patternDefinitionVariant = new PatternDefinitionVariant('test', [
+      'label' => 'my label',
+    ]);
+    $this->assertEquals('test', $patternDefinitionVariant->getName());
+    $this->assertEquals('my label', $patternDefinitionVariant->getLabel());
+    $this->assertEquals(NULL, $patternDefinitionVariant->getDescription());
+    $this->assertEquals(NULL, $patternDefinitionVariant->getUse());
+    $this->assertFalse($patternDefinitionVariant->hasUse());
+
+    // Array with name.
+    $patternDefinitionVariant = new PatternDefinitionVariant('test', [
+      'name' => 'my name',
+      'label' => 'my label',
+    ]);
+    $this->assertEquals('my name', $patternDefinitionVariant->getName());
+    $this->assertEquals('my label', $patternDefinitionVariant->getLabel());
+    $this->assertEquals(NULL, $patternDefinitionVariant->getDescription());
+    $this->assertEquals(NULL, $patternDefinitionVariant->getUse());
+    $this->assertFalse($patternDefinitionVariant->hasUse());
+
+    // Other attributes.
+    $patternDefinitionVariant = new PatternDefinitionVariant('test', [
+      'name' => 'my name',
+      'label' => 'my label',
+      'description' => 'my description',
+      'use' => 'template.twig',
+    ]);
+    $this->assertEquals('my name', $patternDefinitionVariant->getName());
+    $this->assertEquals('my label', $patternDefinitionVariant->getLabel());
+    $this->assertEquals('my description', $patternDefinitionVariant->getDescription());
+    $this->assertEquals('template.twig', $patternDefinitionVariant->getUse());
+    $this->assertTrue($patternDefinitionVariant->hasUse());
+
+    // Setters.
+    $patternDefinitionVariant->setDescription('new description');
+    $this->assertEquals('new description', $patternDefinitionVariant->getDescription());
+    $patternDefinitionVariant->setUse('new use');
+    $this->assertEquals('new use', $patternDefinitionVariant->getUse());
+  }
+
+  /**
+   * Test getters.
+   *
+   * @dataProvider definitionGettersProvider
+   *
+   * @covers ::getName
+   * @covers ::getLabel
+   * @covers ::getDescription
+   * @covers ::getUse
+   */
+  public function testGetters($getter, $name, $value): void {
+    $patternDefinitionVariant = new PatternDefinitionVariant('test', [$name => $value]);
+    $this->assertEquals($value, call_user_func([$patternDefinitionVariant, $getter]));
+  }
+
+  /**
+   * Provider.
+   *
+   * @return array
+   *   Data.
+   */
+  public function definitionGettersProvider(): array {
+    return [
+      ['getName', 'name', 'Variant name'],
+      ['getLabel', 'label', 'Variant label'],
+      ['getDescription', 'description', 'Variant description.'],
+      ['getUse', 'use', 'template.twig'],
+    ];
+  }
+
+}
diff --git a/tests/src/fixtures/definition/variants_processing.yml b/tests/src/fixtures/definition/variants_processing.yml
index d70600f25df29fa5feb3e29e0e9129774884004e..6fd30d8f3b53346ff07a00e2882a1b278fd79193 100644
--- a/tests/src/fixtures/definition/variants_processing.yml
+++ b/tests/src/fixtures/definition/variants_processing.yml
@@ -6,10 +6,12 @@
       name: variant1
       label: variant1
       description: ~
+      use:
     variant2:
       name: variant2
       label: variant2
       description: ~
+      use:
 - actual:
     variant1: Variant 1
     variant2: Variant 2
@@ -18,10 +20,12 @@
       name: variant1
       label: Variant 1
       description: ~
+      use:
     variant2:
       name: variant2
       label: Variant 2
       description: ~
+      use:
 - actual:
     variant1:
       label: variant1
@@ -30,11 +34,14 @@
       name: variant1
       label: variant1
       description: ~
+      use:
 - actual:
     - name: variant1
       label: Variant 1
+      use: "@atoms/button/button.twig"
   expected:
     variant1:
       name: variant1
       label: Variant 1
       description: ~
+      use: "@atoms/button/button.twig"