diff options
author | Ferdinand Thiessen <opensource@fthiessen.de> | 2024-08-08 16:14:03 +0200 |
---|---|---|
committer | Ferdinand Thiessen <opensource@fthiessen.de> | 2024-08-08 18:24:35 +0200 |
commit | ed167930896cee93523780675a05d971e16c1a43 (patch) | |
tree | 2db7d8f56906a642ed485a7ba7cf5c23a1a2da34 /core/src | |
parent | e49c55df12349a12245f35f044eb443c59a52862 (diff) | |
download | nextcloud-server-ed167930896cee93523780675a05d971e16c1a43.tar.gz nextcloud-server-ed167930896cee93523780675a05d971e16c1a43.zip |
fix: Make focussed app menu entry wider to see full name
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/components/AppMenu.vue | 16 | ||||
-rw-r--r-- | core/src/components/AppMenuEntry.vue | 30 |
2 files changed, 43 insertions, 3 deletions
diff --git a/core/src/components/AppMenu.vue b/core/src/components/AppMenu.vue index 5317d7b5758..28b0cd3b67e 100644 --- a/core/src/components/AppMenu.vue +++ b/core/src/components/AppMenu.vue @@ -7,7 +7,8 @@ <nav ref="appMenu" class="app-menu" :aria-label="t('core', 'Applications menu')"> - <ul class="app-menu__list"> + <ul :aria-label="t('core', 'Apps')" + class="app-menu__list"> <AppMenuEntry v-for="app in mainAppList" :key="app.id" :app="app" /> @@ -112,6 +113,8 @@ export default defineComponent({ <style scoped lang="scss"> .app-menu { + // The size the currently focussed entry will grow to show the full name + --app-menu-entry-growth: calc(var(--default-grid-baseline) * 4); display: flex; flex: 1 1; width: 0; @@ -119,6 +122,17 @@ export default defineComponent({ &__list { display: flex; flex-wrap: nowrap; + margin-inline: calc(var(--app-menu-entry-growth) / 2); + transition: margin-inline var(--animation-quick) ease-in-out; + + // Remove padding if the first child is focussed + &:has(.app-menu-entry:hover:first-child, .app-menu-entry:focus-within:first-child) { + margin-inline: 0 calc(var(--app-menu-entry-growth) / 2); + } + // Remove padding if the last child is focussed + &:has(.app-menu-entry:hover:last-child, .app-menu-entry:focus-within:last-child) { + margin-inline: calc(var(--app-menu-entry-growth) / 2) 0; + } } &__overflow { diff --git a/core/src/components/AppMenuEntry.vue b/core/src/components/AppMenuEntry.vue index ead86759e4a..cef6d413dcd 100644 --- a/core/src/components/AppMenuEntry.vue +++ b/core/src/components/AppMenuEntry.vue @@ -37,6 +37,8 @@ defineProps<{ width: var(--header-height); height: var(--header-height); position: relative; + // Needed to prevent jumping when hover an entry (keep in sync with :hover styles) + transition: width var(--animation-quick) ease-in-out; &__link { position: relative; @@ -95,14 +97,14 @@ defineProps<{ left: 50%; bottom: 8px; display: block; - transition: all 0.1s ease-in-out; + transition: all var(--animation-quick) ease-in-out; opacity: 1; } } &__icon, &__label { - transition: all 0.1s ease-in-out; + transition: all var(--animation-quick) ease-in-out; } // Make the hovered entry bold to see that it is hovered @@ -110,6 +112,30 @@ defineProps<{ &:focus-within .app-menu-entry__label { font-weight: bold; } + + // Adjust the width when an entry is focussed + // The focussed / hovered entry should grow, while both neighbors need to shrink + &:hover, + &:focus-within { + width: calc(var(--header-height) + var(--app-menu-entry-growth)); + + // The next entry needs to shrink half the growth + + .app-menu-entry { + width: calc(var(--header-height) - (var(--app-menu-entry-growth) / 2)); + .app-menu-entry__icon { + margin-inline-end: calc(var(--app-menu-entry-growth) / 2); + } + } + } + + // The previous entry needs to shrink half the growth + &:has(+ .app-menu-entry:hover), + &:has(+ .app-menu-entry:focus-within) { + width: calc(var(--header-height) - (var(--app-menu-entry-growth) / 2)); + .app-menu-entry__icon { + margin-inline-start: calc(var(--app-menu-entry-growth) / 2); + } + } } </style> |