Skip to content

Commit 2038757

Browse files
committed
Improve the mobile view of hackorum - we now have a burger menue, a single column that automatically adjusts the size and the topic list, that looks and fits
Signed-off-by: Kai Wagner <kai.wagner@percona.com>
1 parent 72b643c commit 2038757

File tree

10 files changed

+589
-34
lines changed

10 files changed

+589
-34
lines changed

app/assets/stylesheets/base/root.css

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,71 @@ body.sidebar-collapsed .page-layout.with-sidebar > main.container {
7979
.page-layout.with-sidebar > main.container {
8080
grid-area: main;
8181
}
82+
83+
.layout-sidebar-overlay {
84+
display: none;
85+
}
86+
87+
@media (max-width: 900px) {
88+
.container {
89+
padding: 0;
90+
}
91+
92+
.page-layout.with-sidebar {
93+
grid-template-columns: minmax(0, 1fr);
94+
grid-template-areas: "main";
95+
}
96+
97+
body.sidebar-collapsed .page-layout.with-sidebar {
98+
grid-template-columns: minmax(0, 1fr);
99+
}
100+
101+
.page-layout.with-sidebar .layout-sidebar {
102+
position: fixed;
103+
top: var(--nav-height);
104+
left: 0;
105+
height: calc(100vh - var(--nav-height));
106+
width: min(84vw, 360px);
107+
max-width: 360px;
108+
transform: translateX(-110%);
109+
transition: transform var(--transition-normal);
110+
z-index: 200;
111+
box-shadow: 0 24px 48px rgba(15, 23, 42, 0.18);
112+
}
113+
114+
body.mobile-sidebar-open .page-layout.with-sidebar .layout-sidebar {
115+
transform: translateX(0);
116+
}
117+
118+
body.sidebar-collapsed .page-layout.with-sidebar .layout-sidebar {
119+
visibility: visible;
120+
pointer-events: auto;
121+
}
122+
123+
.page-layout.with-sidebar .layout-sidebar-resizer {
124+
display: none;
125+
}
126+
127+
.layout-sidebar-overlay {
128+
display: block;
129+
position: fixed;
130+
top: var(--nav-height);
131+
left: 0;
132+
right: 0;
133+
bottom: 0;
134+
background: rgba(15, 23, 42, 0.45);
135+
opacity: 0;
136+
pointer-events: none;
137+
transition: opacity var(--transition-normal);
138+
z-index: 150;
139+
}
140+
141+
body.mobile-sidebar-open .layout-sidebar-overlay {
142+
opacity: 1;
143+
pointer-events: auto;
144+
}
145+
146+
body.mobile-sidebar-open {
147+
overflow: hidden;
148+
}
149+
}

app/assets/stylesheets/components/navigation.css

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,35 @@
1919
align-items: center;
2020
min-height: var(--nav-height);
2121
gap: var(--spacing-4);
22+
position: relative;
23+
}
24+
25+
.nav-burger {
26+
display: none;
27+
align-items: center;
28+
justify-content: center;
29+
width: 44px;
30+
height: 44px;
31+
border-radius: 999px;
32+
border: var(--border-width) solid var(--color-border);
33+
background: var(--color-bg-card);
34+
cursor: pointer;
35+
box-shadow: var(--shadow-sm);
36+
transition: background-color var(--transition-fast), transform var(--transition-fast);
37+
color: var(--color-text-secondary);
38+
font-size: 1.1rem;
39+
}
40+
41+
.nav-burger:hover {
42+
background: var(--color-bg-hover);
43+
transform: scale(1.03);
2244
}
2345

2446
.nav-brand {
2547
display: flex;
2648
align-items: center;
2749
gap: var(--spacing-3);
50+
flex: 1 1 auto;
2851
}
2952

3053
.brand-link {
@@ -130,3 +153,125 @@
130153
background: var(--color-bg-hover);
131154
}
132155
}
156+
157+
.mobile-nav-dropdown {
158+
display: none;
159+
position: relative;
160+
margin-left: var(--spacing-2);
161+
}
162+
163+
.mobile-nav-toggle {
164+
list-style: none;
165+
display: inline-flex;
166+
align-items: center;
167+
gap: var(--spacing-2);
168+
cursor: pointer;
169+
background: var(--color-bg-card);
170+
border: var(--border-width) solid var(--color-border);
171+
border-radius: 999px;
172+
padding: var(--spacing-2) var(--spacing-4);
173+
color: var(--color-text-secondary);
174+
font-weight: var(--font-weight-medium);
175+
box-shadow: var(--shadow-sm);
176+
transition: background-color var(--transition-fast), transform var(--transition-fast);
177+
}
178+
179+
.mobile-nav-label {
180+
display: inline;
181+
}
182+
183+
.mobile-nav-toggle::marker,
184+
.mobile-nav-toggle::-webkit-details-marker {
185+
display: none;
186+
}
187+
188+
.mobile-nav-toggle:hover {
189+
background: var(--color-bg-hover);
190+
transform: translateY(-1px);
191+
}
192+
193+
.mobile-nav-menu {
194+
display: none;
195+
position: absolute;
196+
left: 0;
197+
top: calc(100% + var(--spacing-3));
198+
background: var(--color-bg-card);
199+
border: var(--border-width) solid var(--color-border);
200+
border-radius: var(--border-radius-lg);
201+
box-shadow: 0 24px 48px rgba(15, 23, 42, 0.18);
202+
padding: var(--spacing-4);
203+
gap: var(--spacing-3);
204+
flex-direction: column;
205+
z-index: 200;
206+
width: min(92vw, 360px);
207+
min-width: 240px;
208+
max-width: calc(100vw - (var(--spacing-4) * 2));
209+
box-sizing: border-box;
210+
}
211+
212+
.mobile-nav-dropdown[open] .mobile-nav-menu {
213+
display: flex;
214+
}
215+
216+
@media (max-width: 900px) {
217+
.nav-container {
218+
padding: 0 var(--spacing-4);
219+
}
220+
221+
.tagline {
222+
display: none;
223+
}
224+
225+
.nav-links,
226+
.nav-right {
227+
display: none;
228+
}
229+
230+
body.has-sidebar .nav-burger {
231+
display: inline-flex;
232+
}
233+
234+
.mobile-nav-dropdown {
235+
display: inline-flex;
236+
}
237+
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+
257+
.mobile-nav-menu .nav-link {
258+
width: 100%;
259+
justify-content: space-between;
260+
}
261+
262+
.mobile-nav-menu .nav-user {
263+
display: block;
264+
padding: 0 var(--spacing-2);
265+
}
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+
}
277+
}

app/assets/stylesheets/components/settings.css

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,31 @@
247247
padding: var(--spacing-2) var(--spacing-3);
248248
}
249249

250+
@media (max-width: 900px) {
251+
.settings-page .email-table {
252+
table-layout: fixed;
253+
}
254+
255+
.settings-page .email-table th,
256+
.settings-page .email-table td {
257+
padding: var(--spacing-2);
258+
font-size: var(--font-size-xs);
259+
word-break: break-word;
260+
white-space: normal;
261+
}
262+
263+
.settings-page .email-table td:last-child {
264+
flex-wrap: wrap;
265+
gap: var(--spacing-2);
266+
}
267+
268+
.settings-page .email-table .button-secondary,
269+
.settings-page .email-table .button-danger {
270+
width: 100%;
271+
justify-content: center;
272+
}
273+
}
274+
250275
.settings-page .team-list,
251276
.settings-page .member-list {
252277
list-style: none;

app/assets/stylesheets/components/sidebar.css

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,16 @@
4545
}
4646
}
4747

48+
@media (max-width: 900px) {
49+
.sidebar {
50+
position: static;
51+
top: auto;
52+
max-height: none;
53+
height: 100%;
54+
padding-right: 0;
55+
}
56+
}
57+
4858
.sidebar-section {
4959
margin-bottom: var(--spacing-8);
5060
}

0 commit comments

Comments
 (0)