Skip to content

Commit 8e67bc4

Browse files
committed
rework burger menu and general button menu look and behavior
Signed-off-by: Kai Wagner <[email protected]>
1 parent a94e774 commit 8e67bc4

File tree

4 files changed

+68
-47
lines changed

4 files changed

+68
-47
lines changed

app/assets/stylesheets/components/navigation.css

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
display: flex;
4848
align-items: center;
4949
gap: var(--spacing-3);
50+
flex: 1 1 auto;
5051
}
5152

5253
.brand-link {
@@ -156,9 +157,7 @@
156157
.mobile-nav-dropdown {
157158
display: none;
158159
position: relative;
159-
margin-left: auto;
160-
flex: 1 1 auto;
161-
justify-content: flex-end;
160+
margin-left: var(--spacing-2);
162161
}
163162

164163
.mobile-nav-toggle {
@@ -177,6 +176,10 @@
177176
transition: background-color var(--transition-fast), transform var(--transition-fast);
178177
}
179178

179+
.mobile-nav-label {
180+
display: inline;
181+
}
182+
180183
.mobile-nav-toggle::marker,
181184
.mobile-nav-toggle::-webkit-details-marker {
182185
display: none;
@@ -190,7 +193,7 @@
190193
.mobile-nav-menu {
191194
display: none;
192195
position: absolute;
193-
right: 0;
196+
left: 0;
194197
top: calc(100% + var(--spacing-3));
195198
background: var(--color-bg-card);
196199
border: var(--border-width) solid var(--color-border);
@@ -202,6 +205,8 @@
202205
z-index: 200;
203206
width: min(92vw, 360px);
204207
min-width: 240px;
208+
max-width: calc(100vw - (var(--spacing-4) * 2));
209+
box-sizing: border-box;
205210
}
206211

207212
.mobile-nav-dropdown[open] .mobile-nav-menu {
@@ -230,6 +235,25 @@
230235
display: inline-flex;
231236
}
232237

238+
.nav-brand {
239+
gap: var(--spacing-2);
240+
}
241+
242+
.brand-link {
243+
font-size: var(--font-size-lg);
244+
}
245+
246+
.mobile-nav-toggle {
247+
padding: var(--spacing-1) var(--spacing-2);
248+
border: none;
249+
background: transparent;
250+
box-shadow: none;
251+
}
252+
253+
.mobile-nav-label {
254+
display: none;
255+
}
256+
233257
.mobile-nav-menu .nav-link {
234258
width: 100%;
235259
justify-content: space-between;
@@ -239,4 +263,15 @@
239263
display: block;
240264
padding: 0 var(--spacing-2);
241265
}
266+
267+
.mobile-nav-menu {
268+
position: fixed;
269+
left: var(--spacing-4);
270+
right: var(--spacing-4);
271+
top: calc(var(--nav-height) + var(--spacing-3));
272+
width: auto;
273+
max-width: none;
274+
max-height: calc(100vh - var(--nav-height) - var(--spacing-6));
275+
overflow-y: auto;
276+
}
242277
}

app/assets/stylesheets/components/sidebar.css

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,6 @@
3434
transform: scale(1.05);
3535
}
3636

37-
@media (min-width: 901px) {
38-
.sidebar-collapse-button {
39-
display: none;
40-
}
41-
}
42-
4337
@media (max-width: 720px) {
4438
.layout-sidebar-resizer {
4539
width: 18px;

app/javascript/controllers/sidebar_controller.js

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ export default class extends Controller {
3030
}
3131

3232
toggle() {
33-
if (!this.isMobile()) {
34-
return
35-
}
36-
3733
if (this.isCollapsed()) {
3834
this.expand()
3935
} else {
@@ -108,12 +104,6 @@ export default class extends Controller {
108104
}
109105

110106
applyStoredState() {
111-
if (!this.isMobile()) {
112-
this.expand(false)
113-
this.setSidebarWidth(this.clampWidth(this.readWidth()))
114-
return
115-
}
116-
117107
const collapsed = window.localStorage.getItem(STORAGE_COLLAPSED_KEY) === "true"
118108
if (collapsed) {
119109
this.collapse(false)

app/views/layouts/application.html.slim

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -36,37 +36,39 @@ html data-theme="light"
3636
nav.main-navigation
3737
.nav-container
3838
.nav-brand
39+
- if content_for?(:sidebar)
40+
button.nav-burger type="button" aria-label="Toggle sidebar" data-action="click->sidebar#toggleMobile"
41+
i.fa-solid.fa-bars
3942
= link_to root_path, class: "brand-link" do
4043
img.brand-icon src="/icon.png" alt="Hackorum" width="24" height="24"
4144
span.brand-text Hackorum
45+
details.mobile-nav-dropdown
46+
summary.mobile-nav-toggle aria-label="Open menu"
47+
span.mobile-nav-label Menu
48+
i.fa-solid.fa-caret-down
49+
.mobile-nav-menu data-action="click->sidebar#closeMenuOnNavigate"
50+
= link_to "Topics", topics_path, class: "nav-link"
51+
= link_to "Search", topics_path(anchor: "search"), class: "nav-link"
52+
= link_to "Statistics", stats_path, class: "nav-link"
53+
= link_to "Reports", reports_path, class: "nav-link"
54+
= link_to "Help", help_index_path, class: "nav-link"
55+
button.nav-link.theme-toggle type="button" aria-label="Toggle theme" data-controller="theme" data-action="click->theme#toggle"
56+
i.fas.fa-moon data-theme-target="icon"
57+
span data-theme-target="label" Theme
58+
- if user_signed_in?
59+
- if current_user&.person&.default_alias
60+
span.nav-user = current_user.person.default_alias.name
61+
- unread = activity_unread_count
62+
= link_to activities_path, class: "nav-link nav-link-activity", title: "Activity" do
63+
i.fa-regular.fa-bell
64+
- if unread.positive?
65+
span.nav-badge = unread
66+
= link_to "Settings", settings_root_path, class: "nav-link"
67+
= button_to "Sign out", session_path, method: :delete, class: "nav-link", form: { style: 'display:inline' }, data: { turbo: false }
68+
- else
69+
= link_to "Sign in", new_session_path, class: "nav-link"
70+
= link_to "Register", new_registration_path, class: "nav-link"
4271
span.tagline PostgreSQL Hackers Archive
43-
- if content_for?(:sidebar)
44-
button.nav-burger type="button" aria-label="Toggle sidebar" data-action="click->sidebar#toggleMobile"
45-
i.fa-solid.fa-bars
46-
details.mobile-nav-dropdown
47-
summary.mobile-nav-toggle Menu
48-
.mobile-nav-menu data-action="click->sidebar#closeMenuOnNavigate"
49-
= link_to "Topics", topics_path, class: "nav-link"
50-
= link_to "Search", topics_path(anchor: "search"), class: "nav-link"
51-
= link_to "Statistics", stats_path, class: "nav-link"
52-
= link_to "Reports", reports_path, class: "nav-link"
53-
= link_to "Help", help_index_path, class: "nav-link"
54-
button.nav-link.theme-toggle type="button" aria-label="Toggle theme" data-controller="theme" data-action="click->theme#toggle"
55-
i.fas.fa-moon data-theme-target="icon"
56-
span data-theme-target="label" Theme
57-
- if user_signed_in?
58-
- if current_user&.person&.default_alias
59-
span.nav-user = current_user.person.default_alias.name
60-
- unread = activity_unread_count
61-
= link_to activities_path, class: "nav-link nav-link-activity", title: "Activity" do
62-
i.fa-regular.fa-bell
63-
- if unread.positive?
64-
span.nav-badge = unread
65-
= link_to "Settings", settings_root_path, class: "nav-link"
66-
= button_to "Sign out", session_path, method: :delete, class: "nav-link", form: { style: 'display:inline' }, data: { turbo: false }
67-
- else
68-
= link_to "Sign in", new_session_path, class: "nav-link"
69-
= link_to "Register", new_registration_path, class: "nav-link"
7072
.nav-links
7173
= link_to "Topics", topics_path, class: "nav-link"
7274
- search_link = content_for?(:search_sidebar) ? "#search" : topics_path(anchor: "search")

0 commit comments

Comments
 (0)