diff --git a/resources/assets/stylesheets/scss/sidebar.scss b/resources/assets/stylesheets/scss/sidebar.scss
index a0118e8af5b86dae72e2cd65145f989b94d2fbdc..e845a35db3196ca6c426f88960294c4a2702e8eb 100644
--- a/resources/assets/stylesheets/scss/sidebar.scss
+++ b/resources/assets/stylesheets/scss/sidebar.scss
@@ -57,6 +57,23 @@
         -webkit-box-orient: vertical;
     }
 
+    .sidebar-widget.sidebar-widget-has-extra {
+        display: grid;
+        grid-template-areas: "swh swx" "swc swc";
+        grid-template-rows: auto;
+        grid-template-columns: 1fr min-content;
+
+        .sidebar-widget-header {
+            grid-area: swh;
+        }
+        .sidebar-widget-extra {
+            grid-area: swx;
+        }
+        .sidebar-widget-content {
+            grid-area: swc;
+        }
+    }
+
     .course-avatar-medium,
     .stream-avatar-medium,
     .avatar-medium {
@@ -70,21 +87,13 @@
         margin: 15px 0 0;
         width: $sidebar-width - 5px;
     }
-    .sidebar-widget-header {
-        @include clearfix();
+    .sidebar-widget-header,
+    .sidebar-widget-extra {
         background: $content-color-20;
         color: $base-color;
         font-weight: bold;
         padding: 4px;
     }
-    .sidebar-widget-options {
-        float: right;
-        opacity: 0;
-        transition: all 0.5s;
-    }
-    .sidebar-widget:hover .sidebar-widget-options {
-        opacity: 1;
-    }
 
     // Links inside the sidebar
     a.link-intern {
@@ -216,7 +225,6 @@ div#sidebar-navigation {
 
 .sidebar-widget {
     background: $white;
-    @include clearfix();
 
     .widget-options {
         list-style: none;
@@ -265,13 +273,6 @@ div#sidebar-navigation {
     transition: all 0.5s;
 }
 
-.sidebar-widget-header {
-    @include clearfix();
-    .sidebar-widget-extra {
-        float: right;
-    }
-}
-
 // TODO: These two should be combined into one widget
 select.sidebar-selectlist {
     overflow-y: auto;
diff --git a/templates/sidebar/widget-layout.php b/templates/sidebar/widget-layout.php
index aa85a41b4e959412f4443323c58d338213438fbf..2d3d71c3ebd1c6eb2f3466e87c93fc141c97ea2d 100644
--- a/templates/sidebar/widget-layout.php
+++ b/templates/sidebar/widget-layout.php
@@ -1,14 +1,31 @@
-<div class="<?= $base_class ?>-widget <?= is_array($layout_css_classes) ? htmlReady(implode(' ', $layout_css_classes)) : '' ?>"
-    <?= arrayToHtmlAttributes($additional_attributes) ?>>
+<?php
+/**
+ * @var string $title
+ * @var string $base_class
+ * @var array $additional_attributes
+ * @var string|null $extra
+ * @var string $content
+ */
+
+$css_classes = $layout_css_classes ?? [];
+$css_classes[] = "{$base_class}-widget";
+
+if ($title && isset($extra)) {
+    $css_classes[] = 'sidebar-widget-has-extra';
+}
+
+$additional_attributes['class'] = implode(' ', $css_classes);
+?>
+<div <?= arrayToHtmlAttributes($additional_attributes) ?>>
 <? if ($title): ?>
     <div class="<?= $base_class ?>-widget-header">
-    <? if (isset($extra)): ?>
-        <div class="<?= $base_class ?>-widget-extra"><?= $extra ?></div>
-    <? endif; ?>
         <?= htmlReady($title) ?>
     </div>
 <? endif; ?>
     <div class="<?= $base_class ?>-widget-content">
         <?= $content_for_layout ?>
     </div>
+<? if ($title && isset($extra)): ?>
+    <div class="<?= $base_class ?>-widget-extra"><?= $extra ?></div>
+<? endif; ?>
 </div>