aboutsummaryrefslogtreecommitdiffstats
path: root/core/src
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2024-08-08 16:14:03 +0200
committerFerdinand Thiessen <opensource@fthiessen.de>2024-08-08 18:24:35 +0200
commited167930896cee93523780675a05d971e16c1a43 (patch)
tree2db7d8f56906a642ed485a7ba7cf5c23a1a2da34 /core/src
parente49c55df12349a12245f35f044eb443c59a52862 (diff)
downloadnextcloud-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.vue16
-rw-r--r--core/src/components/AppMenuEntry.vue30
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>