155 lines
4.1 KiB
SCSS
155 lines
4.1 KiB
SCSS
|
$navbar-expand-breakpoint: if($bootstrap-version>=5, lg, sm) !default;
|
||
|
|
||
|
// bs4 navbars require .navbar-expand[-sm|-md|-lg|-xl], but bs3 navbars
|
||
|
// don't have them. This selector matches .navbar without .navbar-expand
|
||
|
// and defaults it to .navbar-expand-sm.
|
||
|
.navbar:not(.navbar-expand):not(.navbar-expand-sm):not(.navbar-expand-md):not(.navbar-expand-lg):not(.navbar-expand-xl) {
|
||
|
@extend .navbar-expand-#{$navbar-expand-breakpoint};
|
||
|
}
|
||
|
|
||
|
// Unfortunately the @extend above, combined with the @extend .nav-link below
|
||
|
// results in .navbar-expand's padding rules taking precedence over
|
||
|
// .nav-underline's padding rules (and unfortunately :where()/css-layers doesn't
|
||
|
// help here, so just re-apply the padding rules)
|
||
|
.navbar .nav.nav-underline {
|
||
|
--#{$prefix}navbar-nav-link-padding-x: 0;
|
||
|
}
|
||
|
|
||
|
.navbar:not(.fixed-bottom):not(.navbar-fixed-bottom) {
|
||
|
// Instead of exactly re-doing bs3's .navbar { margin-bottom }, set
|
||
|
// margin-top on each pane (so 'fill' panes can be flush with navbar)
|
||
|
& + div > .tab-content > .tab-pane {
|
||
|
--bslib-navbar-margin: #{$navbar-margin-bottom};
|
||
|
margin-top: var(--bslib-navbar-margin);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Map BS3 navbar positioning to general utilities
|
||
|
.navbar-fixed-top {
|
||
|
@extend .fixed-top;
|
||
|
}
|
||
|
.navbar-fixed-bottom {
|
||
|
@extend .fixed-bottom;
|
||
|
}
|
||
|
.navbar-sticky-top {
|
||
|
@extend .sticky-top;
|
||
|
}
|
||
|
|
||
|
ul.nav.navbar-nav {
|
||
|
flex: 1;
|
||
|
-webkit-flex: 1;
|
||
|
&.navbar-right {
|
||
|
flex: unset;
|
||
|
-webkit-flex: unset;
|
||
|
display: flex;
|
||
|
display: -webkit-flex;
|
||
|
justify-content: flex-end;
|
||
|
-webkit-justify-content: flex-end;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// :where() lowers the specificity of the eventually @extend selector, which is
|
||
|
// important to make sure those selectors don't get an artificial specificity
|
||
|
// boost (e.g., we don't want `ul.nav.navbar-nav>li>a` to be more specific than
|
||
|
// `.nav-underline .nav-link`)
|
||
|
:where(ul.nav.navbar-nav > li) {
|
||
|
&:not(.dropdown) {
|
||
|
@extend .nav-item;
|
||
|
}
|
||
|
|
||
|
> a {
|
||
|
@extend .nav-link;
|
||
|
}
|
||
|
|
||
|
&.active, &.show {
|
||
|
> a {
|
||
|
color: var(--#{$prefix}navbar-active-color);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&.bslib-nav-item {
|
||
|
color: var(--#{$prefix}navbar-active-color);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
.navbar {
|
||
|
|
||
|
// Defaults to null (and in that case, we don't want to define the CSS var)
|
||
|
@if $navbar-light-bg {
|
||
|
--bslib-navbar-default-bg: #{$navbar-light-bg};
|
||
|
}
|
||
|
@if $navbar-dark-bg {
|
||
|
--bslib-navbar-inverse-bg: #{$navbar-dark-bg};
|
||
|
}
|
||
|
|
||
|
// BS3 .navbar-default -> BS4 .navbar-light
|
||
|
&.navbar-default {
|
||
|
// Sets a variety of fg colors which are configurable via $navbar-light-* options
|
||
|
@extend .navbar-light;
|
||
|
background-color: var(--bslib-navbar-default-bg, var(--#{$prefix}light)) !important;
|
||
|
}
|
||
|
|
||
|
// BS3 .navbar-inverse -> BS4 .navbar-dark
|
||
|
&.navbar-inverse {
|
||
|
// Sets a variety of fg colors which are configurable via $navbar-dark-* options
|
||
|
@extend .navbar-dark;
|
||
|
background-color: var(--bslib-navbar-inverse-bg, var(--#{$prefix}dark)) !important;
|
||
|
// For BS5+ lean on emphasis-color
|
||
|
--bs-emphasis-color: white;
|
||
|
--bs-emphasis-color-rgb: 255, 255, 255;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$enable-dark-mode: false !default;
|
||
|
@if $enable-dark-mode {
|
||
|
@include color-mode(dark) {
|
||
|
.navbar.navbar-default {
|
||
|
background-color: var(--bslib-navbar-default-bg, var(--#{$prefix}dark)) !important;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Implement bs3 navbar toggler; used in Rmd websites, i.e.
|
||
|
// https://github.com/rstudio/rmarkdown-website/blob/453e1802b32b5baf1c8a67f80947adcc53e49b7f/_navbar.html
|
||
|
.navbar-toggle {
|
||
|
@extend .navbar-toggler;
|
||
|
}
|
||
|
.navbar-toggle {
|
||
|
> .icon-bar {
|
||
|
display: none;
|
||
|
&:last-child {
|
||
|
@extend .navbar-toggler-icon;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Make sure .navbar-toggle is right and center aligned when navbar is collapsed
|
||
|
@if $bootstrap-version>=5 {
|
||
|
|
||
|
@include media-breakpoint-down($navbar-expand-breakpoint) {
|
||
|
.navbar-header {
|
||
|
width: 100%;
|
||
|
display: flex;
|
||
|
flex-direction: row;
|
||
|
align-items: center;
|
||
|
justify-content: space-between;
|
||
|
.navbar-toggle {
|
||
|
order: 2;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} @else {
|
||
|
|
||
|
// In BS4, media-breakpoint-down() does the _next_ breakpoint (xs->sm)
|
||
|
@include media-breakpoint-down(xs) {
|
||
|
.navbar-header {
|
||
|
width: 100%;
|
||
|
.navbar-toggle {
|
||
|
float: right;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|