@brendonovich/kobalte__solidbase
Version:
Fully featured, fully customisable static site generation for SolidStart
273 lines (236 loc) • 4.67 kB
CSS
.header {
position: sticky;
top: 0;
width: 100dvw;
height: var(--sb-header-height);
z-index: 50;
display: flex;
align-items: stretch;
flex-direction: column;
padding: 0 1.5rem;
background: var(--sb-background-color);
border-bottom: 2px solid #e4e4e7;
grid-column-start: span 2;
border-bottom: 1px solid
color-mix(in hsl, var(--sb-decoration-color) 15%, transparent);
font-size: 14px;
& > div {
display: flex;
flex: 1;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
}
}
@media screen and (max-width: 1100px) {
.header {
padding: 0 1rem;
}
html:has(.header .mobile-bar) {
--sb-header-height: 6.25rem ;
}
}
@media screen and (min-width: 1100px) {
.mobile-bar {
display: none ;
}
}
.logo-link {
text-decoration: none;
color: var(--sb-heading-color);
font-family: var(--sb-font-headings);
font-size: 1.25em;
}
.mobile-menu,
.mobile-nav-menu {
appearance: none;
outline: none;
border: none;
background: transparent;
border-radius: var(--sb-border-radius);
color: var(--sb-text-color);
font-size: 0.8rem;
padding: 0.5rem;
cursor: var(--sb-button-cursor);
display: flex;
align-items: center;
gap: 0.5rem;
margin: 0 -0.5rem;
text-decoration: none;
transition-property: background-color, color;
transition-timing-function: var(--sb-transition-timing);
transition-duration: 0.15s;
&:hover,
&:focus-visible {
color: var(--sb-heading-color);
background: color-mix(
in hsl,
var(--sb-link-underline-color) 20%,
transparent
);
}
&.active {
color: var(--sb-active-link-color);
}
& svg {
width: 1rem;
height: 1rem;
}
}
.mobile-menu {
& > svg {
transition-property: transform;
transition-timing-function: var(--sb-transition-timing);
transition-duration: 0.15s;
}
&[data-expanded] > svg {
transform: rotateX(180deg);
}
}
.top-nav {
position: relative;
display: flex;
flex-direction: row;
gap: 1rem;
}
@media screen and (max-width: 500px) {
.top-nav {
> *:not(.mobile-nav-menu) {
display: none ;
}
.mobile-nav-menu {
display: block;
}
}
}
.mobile-nav-menu {
position: relative;
display: none;
> .menu-icon,
> .close-icon {
transition-property: opacity;
transition-timing-function: var(--sb-transition-timing);
transition-duration: 0.25s;
}
> .menu-icon {
position: absolute;
left: .5rem;
top: .5rem;
}
> .close-icon {
pointer-events: none;
opacity: 0;
}
&[data-expanded] {
> .menu-icon {
pointer-events: none;
opacity: 0;
}
> .close-icon {
pointer-events: all;
opacity: 1;
}
}
}
.navLink {
text-decoration: none;
padding: 0.5rem;
border: none;
outline: none;
color: var(--sb-text-color);
border-radius: var(--sb-border-radius);
cursor: var(--sb-button-cursor);
font-weight: 500;
transition-property: background-color, opacity, color;
transition-timing-function: var(--sb-transition-timing);
transition-duration: 0.15s;
&:hover {
background: color-mix(in hsl, var(--sb-text-color) 7.5%, transparent);
}
&[data-matched] {
color: var(--sb-active-link-color);
&:hover,
&:focus-visible {
color: var(--sb-text-color);
background-color: color-mix(
in hsl,
var(--sb-active-link-color) 50%,
transparent
);
}
}
}
.mobile-bar {
flex: none ;
border-top: 1px solid
color-mix(in hsl, var(--sb-decoration-color) 15%, transparent);
margin: 0 -4rem;
padding: 0.25rem 4rem;
}
.toc-container,
.nav-container {
height: 0;
width: 100dvw;
left: -1rem;
top: 0;
position: relative;
overflow: visible;
flex: 0 ;
}
.toc-popup,
.nav-popup {
z-index: 51;
width: 100dvw;
max-height: 100dvh;
background: var(--sb-background-color);
overflow-y: auto;
animation: contentHide 50ms ease-out forwards;
transform-origin: top;
padding: 1rem;
border: 1px solid
color-mix(in hsl, var(--sb-decoration-color) 15%, transparent);
border-left: none;
border-right: none;
&[data-expanded] {
animation: contentShow 50ms ease-out forwards;
}
& * {
opacity: 1 ;
}
}
.nav-popup {
height: calc(100dvh - var(--sb-header-height) * 0.55);
display: flex;
flex-direction: column;
gap: .5rem;
align-items: center;
> *:not(:last-child) {
border-bottom: 1px solid
color-mix(in hsl, var(--sb-decoration-color) 15%, transparent);
width: 80dvw;
}
}
.nav-popup-selectors {
display: flex;
gap: .5rem;
justify-content: space-evenly;
align-items: center;
}
@keyframes contentShow {
from {
opacity: 0;
transform: translateY(-1rem);
}
to {
opacity: 1;
}
}
@keyframes contentHide {
from {
opacity: 1;
}
to {
opacity: 0;
transform: translateY(-1rem);
}
}