forgejo/web_src/css/modules/navbar.css

173 lines
3.7 KiB
CSS
Raw Normal View History

#navbar {
display: flex;
align-items: center;
justify-content: space-between;
background: var(--color-nav-bg);
border-bottom: 1px solid var(--color-secondary);
margin: 0 !important;
padding: 0 10px;
}
#navbar .navbar-left,
#navbar .navbar-right {
margin: 0;
display: flex;
align-items: center;
fix(ui): apply navbar min-height correctly, fix jitter on mobile (#11274) Replaces https://codeberg.org/forgejo/forgejo/pulls/11271 This rule was problematic and didn't quite make sense: * the intention is to have a navbar that is 48px+1px border * we apply `min-height:49px` to: `#navbar` with intention of making it 49px tall total, with border * but we also apply it to `#navbar .navbar-left/right` * elements `#navbar .navbar-left/right` become 49px tall * their parent `#navbar` becomes 49px+1px border = 50px, overriding what was done in step 2 This height missmatch had an incompatibility with this definition for open menu inside of navbar on mobile, causing jitter when the menu is opened/closed, because it was expecting navbar body to be 48px, but due to the rule that was removed it was actually 49px. ```css #navbar.navbar-menu-open .navbar-left .navbar-mobile-right { min-height: 48px; } ``` The fix is to only apply `min-height` to `#navbar`'s children. At least `.navbar-left` is always expected to be present unconditionally on all pages. This does make the navbar 1px shorter. If we still want a 50px navbar but without the bug let me know and I'll adjust. ### Preview by @panc From https://codeberg.org/forgejo/forgejo/pulls/11271, also applies to this PR. | Before | After | |----|----| | <video src="/attachments/515fdfc1-cb97-46af-88ac-9bb0e216a996" title="Screencast From 2026-02-13 19-56-32" controls></video> | <video src="/attachments/133d1499-4660-402d-8082-f407b3644e5c" title="Screencast From 2026-02-13 19-57-29" controls></video> | Reported-by: panc <panc@noreply.codeberg.org> Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11274 Reviewed-by: Robert Wolff <mahlzahn@posteo.de>
2026-02-14 08:57:44 -05:00
min-height: 48px;
}
#navbar-logo {
margin: 0;
}
#navbar .item {
min-height: 36px;
min-width: 36px;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
}
#navbar .dropdown .item {
justify-content: stretch;
}
#navbar a.item:hover, #navbar a.item:focus,
#navbar details.dropdown > summary:is(:hover, :focus),
#navbar details.dropdown[open] > summary,
#navbar button.item:hover, #navbar button.item:focus {
background: var(--color-nav-hover-bg);
}
#navbar .secondary.menu > .item > .svg,
#navbar .right.menu > .item > .svg {
margin-right: 0;
}
/* icon with notification counter - positioned relative container */
#navbar .notification-icon-relative {
position: relative;
display: flex;
}
@media (max-width: 767.98px) {
#navbar {
align-items: stretch;
}
/* hide all items */
#navbar .item {
display: none;
}
#navbar #navbar-logo {
display: flex;
}
/* show the first navbar item (logo and its mobile right items) */
#navbar .navbar-left {
flex: 1;
display: flex;
justify-content: space-between;
}
#navbar .navbar-mobile-right {
display: flex;
margin-left: auto !important;
width: auto !important;
}
#navbar .navbar-mobile-right > .item {
display: flex;
width: auto !important;
}
/* show items if the navbar is open */
#navbar.navbar-menu-open {
padding-bottom: 8px;
gap: .35714286em;
}
#navbar.navbar-menu-open,
#navbar.navbar-menu-open .navbar-right {
flex-direction: column;
}
#navbar.navbar-menu-open .navbar-left {
display: flex;
flex-wrap: wrap;
}
#navbar.navbar-menu-open .item {
display: flex;
width: 100%;
margin: 0;
}
#navbar details.dropdown {
display: none;
}
#navbar.navbar-menu-open details.dropdown {
display: block;
width: 100%;
> summary {
width: 100%;
justify-content: start;
}
> .content {
width: 100%;
}
}
#navbar.navbar-menu-open .navbar-left #navbar-logo {
justify-content: flex-start;
width: auto;
}
#navbar.navbar-menu-open .navbar-left .navbar-mobile-right {
justify-content: flex-end;
width: 50%;
min-height: 48px;
}
#navbar #mobile-notifications-icon {
margin-right: 6px !important;
}
}
#navbar details.dropdown summary {
padding-inline-start: 0.75rem;
/* The min height is dictated by the largest dropdown, which is the one that has an avatar in the opener */
min-height: 38px;
}
#navbar details.dropdown .dropdown-icon {
display: contents;
}
#navbar a.item .notification_count {
color: var(--color-nav-bg);
padding: 0 3.75px;
font-size: 12px;
line-height: 12px;
font-weight: var(--font-weight-bold);
}
#navbar a.item:hover .notification_count,
#navbar a.item:hover .header-stopwatch-dot {
border-color: var(--color-nav-hover-bg);
}
#navbar a.item .notification_count,
#navbar a.item .header-stopwatch-dot {
background: var(--color-primary);
border: 2px solid var(--color-nav-bg);
position: absolute;
left: 6px;
top: -9px;
min-width: 17px;
height: 17px;
border-radius: 11px; /* (height + 2 * borderThickness) / 2 */
display: flex;
align-items: center;
justify-content: center;
z-index: 1; /* prevent menu button background from overlaying icon */
}
.secondary-nav {
background: var(--color-secondary-nav-bg) !important; /* important because of .ui.secondary.menu */
}
.issue-navbar {
display: flex;
justify-content: space-between;
}