diff --git a/resources/assets/stylesheets/scss/courseware.scss b/resources/assets/stylesheets/scss/courseware.scss
index 8143c18d0ed22b10ae448b62aab041f698897afb..d30d612ec17ffbbc4722bf0c3a39f18147ffc366 100755
--- a/resources/assets/stylesheets/scss/courseware.scss
+++ b/resources/assets/stylesheets/scss/courseware.scss
@@ -290,11 +290,19 @@ $consum_ribbon_width: calc(100% - 58px);
                 list-style: none;
                 padding-left: 0;
 
-                li+li:before {
-                    padding: 0 0.25em;
-                    content: '/';
-                    background-repeat: no-repeat;
-                    background-position: center;
+                &.current-only {
+                    li:not(.cw-ribbon-breadcrumb-item-current) {
+                        display: none;
+                    }
+                }
+
+                &:not(.current-only) {
+                    li+li:before {
+                        padding: 0 0.25em;
+                        content: '/';
+                        background-repeat: no-repeat;
+                        background-position: center;
+                    }
                 }
 
                 .cw-ribbon-breadcrumb-item {
@@ -304,7 +312,9 @@ $consum_ribbon_width: calc(100% - 58px);
                         white-space: nowrap;
                         overflow: hidden;
                         text-overflow: ellipsis;
-                        max-width: 12em;
+                        &.short {
+                            display: none;
+                        }
                     }
 
                     a {
diff --git a/resources/vue/components/courseware/CoursewareRibbon.vue b/resources/vue/components/courseware/CoursewareRibbon.vue
index da6580705f20294cb048ead546c0e5960208fa5c..c1e3fb99a29eba407a7655e15db63c4aced06b69 100755
--- a/resources/vue/components/courseware/CoursewareRibbon.vue
+++ b/resources/vue/components/courseware/CoursewareRibbon.vue
@@ -1,19 +1,18 @@
 <template>
     <div :class="{ 'cw-ribbon-wrapper-consume': consumeMode }">
         <div v-if="stickyRibbon" class="cw-ribbon-sticky-top"></div>
-        <header class="cw-ribbon" :class="{ 'cw-ribbon-sticky': stickyRibbon, 'cw-ribbon-consume': consumeMode }">
+        <header class="cw-ribbon" ref="ribbon" :class="{ 'cw-ribbon-sticky': stickyRibbon, 'cw-ribbon-consume': consumeMode }">
             <div class="cw-ribbon-wrapper-left">
-                <nav class="cw-ribbon-nav">
+                <nav class="cw-ribbon-nav" ref="buttons">
                     <slot name="buttons" />
                 </nav>
-                <nav class="cw-ribbon-breadcrumb">
+                <nav class="cw-ribbon-breadcrumb" ref="breadcrumb">
                     <ul>
-                        <slot v-if="breadcrumbFallback" name="breadcrumbFallback" />
-                        <slot v-else name="breadcrumbList" />
+                        <slot name="breadcrumbList" />
                     </ul>
                 </nav>
             </div>
-            <div class="cw-ribbon-wrapper-right">
+            <div class="cw-ribbon-wrapper-right" ref="links">
                 <a
                     href="#"
                     class="cw-ribbon-button cw-ribbon-button-menu"
@@ -76,9 +75,6 @@ export default {
         toolsActive() {
             return this.$store.getters.showToolbar;
         },
-        breadcrumbFallback() {
-            return window.outerWidth < 1200;
-        },
     },
     methods: {
         toggleConsumeMode() {
@@ -103,9 +99,47 @@ export default {
                 this.stickyRibbon = window.scrollY > 75;
             }
         },
+        handleBreadcrumbSizing() {
+            let links = $(this.$refs.breadcrumb).find('ul > li:not(.cw-ribbon-breadcrumb-item-current) a').get();
+            if (links.length == 0) {
+                return;
+            }
+            $(links).find('span.long').show();
+            $(links).find('span.short').hide();
+
+            for (const link of links) {
+                if (this.$refs.breadcrumb.clientWidth >= this.getTotalAvailableRibbonWidth()) {
+                    $(link).find('span.long').hide();
+                    $(link).find('span.short').show();
+                }
+            }
+
+            this.$nextTick(() => {
+                if (this.$refs.breadcrumb.clientHeight > parseFloat($(this.$refs.ribbon).css('min-height')) || window.outerWidth < 1200) {
+                    $(this.$refs.breadcrumb).find('ul').addClass('current-only');
+                } else {
+                    $(this.$refs.breadcrumb).find('ul').removeClass('current-only');
+                }
+                $(this.$refs.breadcrumb).find('ul > li.cw-ribbon-breadcrumb-item-current > span').css('max-width', (this.getTotalAvailableRibbonWidth() - 2));
+            });
+        },
+        getTotalAvailableRibbonWidth() {
+            let ribbonClientWidth = this.$refs.ribbon.clientWidth;
+            let paddingLeft = parseFloat($(this.$refs.ribbon).css('padding-left'));
+            let paddingRight = parseFloat($(this.$refs.ribbon).css('padding-right'));
+            let buttonsWidth = this.$refs.buttons.clientWidth;
+            let linksWidth = this.$refs.links.clientWidth;
+
+            return ribbonClientWidth - paddingLeft - paddingRight - buttonsWidth - linksWidth;
+        }
     },
     mounted() {
         window.addEventListener('scroll', this.handleScroll);
+        this.handleBreadcrumbSizing();
+        window.addEventListener('resize', this.handleBreadcrumbSizing);
+    },
+    updated () {
+        this.handleBreadcrumbSizing();
     },
     watch: {
         toolsActive(newState, oldState) {
diff --git a/resources/vue/components/courseware/CoursewareStructuralElement.vue b/resources/vue/components/courseware/CoursewareStructuralElement.vue
index d35d7bd233c73f67fb9c9ebd0a4028b7f2c7e5f3..4fb73c66be4e98f4506051baa98782dcc8e679b2 100755
--- a/resources/vue/components/courseware/CoursewareStructuralElement.vue
+++ b/resources/vue/components/courseware/CoursewareStructuralElement.vue
@@ -27,7 +27,8 @@
                             >
                                 <span>
                                     <router-link :to="'/structural_element/' + ancestor.id">
-                                        {{ ancestor.attributes.title || "–" }}
+                                        <span class="long">{{ ancestor.attributes.title || "–" }}</span>
+                                        <span class="short">..</span>
                                     </router-link>
                                 </span>
                             </li>
@@ -38,14 +39,6 @@
                                 <span>{{ structuralElement.attributes.title || "–" }}</span>
                             </li>
                         </template>
-                        <template #breadcrumbFallback>
-                            <li
-                                class="cw-ribbon-breadcrumb-item cw-ribbon-breadcrumb-item-current"
-                                :title="structuralElement.attributes.title"
-                            >
-                                <span>{{ structuralElement.attributes.title }}</span>
-                            </li>
-                        </template>
                         <template #menu>
                             <studip-action-menu
                                 v-if="!consumeMode"