@vaadin/vaadin-lumo-styles
Version:
Lumo is a design system foundation for modern web applications, used by Vaadin components
194 lines (165 loc) • 5.64 kB
CSS
/**
* @license
* Copyright (c) 2000 - 2026 Vaadin Ltd.
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
*/
@media lumo_components_app-layout {
:host {
display: block;
box-sizing: border-box;
height: 100%;
--vaadin-app-layout-transition-duration: 200ms;
transition: padding var(--vaadin-app-layout-transition-duration);
--_vaadin-app-layout-drawer-width: var(--vaadin-app-layout-drawer-width, 16em);
--vaadin-app-layout-touch-optimized: false;
--vaadin-app-layout-navbar-offset-top: var(--_vaadin-app-layout-navbar-offset-size);
--vaadin-app-layout-navbar-offset-bottom: var(--_vaadin-app-layout-navbar-offset-size-bottom);
padding-block: var(--vaadin-app-layout-navbar-offset-top) var(--vaadin-app-layout-navbar-offset-bottom);
padding-inline-start: var(--vaadin-app-layout-navbar-offset-left);
}
:host([hidden]),
[hidden] {
display: none ;
}
:host([no-anim]) {
--vaadin-app-layout-transition-duration: 0s ;
}
:host([drawer-opened]) {
--vaadin-app-layout-drawer-offset-left: var(--_vaadin-app-layout-drawer-offset-size);
}
:host([overlay]) {
--vaadin-app-layout-drawer-offset-left: 0;
--vaadin-app-layout-navbar-offset-left: 0;
}
:host(:not([no-scroll])) [content] {
overflow: auto;
}
[content] {
height: 100%;
}
@media (pointer: coarse) and (max-width: 800px) and (min-height: 500px) {
:host {
--vaadin-app-layout-touch-optimized: true;
}
}
[part~='navbar'] {
position: fixed;
display: flex;
align-items: center;
top: 0;
inset-inline: 0;
transition: inset-inline-start var(--vaadin-app-layout-transition-duration);
padding-top: var(--safe-area-inset-top);
padding-left: var(--safe-area-inset-left);
padding-right: var(--safe-area-inset-right);
z-index: 1;
min-height: var(--lumo-size-xl);
border-bottom: 1px solid var(--lumo-contrast-10pct);
}
:host([primary-section='drawer'][drawer-opened]:not([overlay])) [part~='navbar'] {
inset-inline-start: var(--vaadin-app-layout-drawer-offset-left, 0);
}
:host([primary-section='drawer']) [part='drawer'] {
top: 0;
}
[part~='navbar-bottom'] {
top: auto;
bottom: 0;
padding-bottom: var(--safe-area-inset-bottom);
border-bottom: none;
border-top: 1px solid var(--lumo-contrast-10pct);
}
[part='drawer'] {
overflow: auto;
position: fixed;
top: var(--vaadin-app-layout-navbar-offset-top, 0);
bottom: var(--vaadin-app-layout-navbar-offset-bottom, var(--vaadin-viewport-offset-bottom, 0));
inset-inline: var(--vaadin-app-layout-navbar-offset-left, 0) auto;
transition:
transform var(--vaadin-app-layout-transition-duration),
visibility var(--vaadin-app-layout-transition-duration);
transform: translateX(-100%);
max-width: 90%;
width: var(--_vaadin-app-layout-drawer-width);
box-sizing: border-box;
padding: var(--safe-area-inset-top) 0 var(--safe-area-inset-bottom) var(--safe-area-inset-left);
outline: none;
/* The drawer should be inaccessible by the tabbing navigation when it is closed. */
visibility: hidden;
display: flex;
flex-direction: column;
border-inline-end: 1px solid var(--lumo-contrast-10pct);
}
:host([drawer-opened]) [part='drawer'] {
/* The drawer should be accessible by the tabbing navigation when it is opened. */
visibility: visible;
transform: translateX(0%);
touch-action: manipulation;
}
[part='backdrop'] {
background-color: var(--lumo-shade-20pct);
opacity: 1;
}
:host(:not([drawer-opened])) [part='backdrop'] {
opacity: 0;
}
:host([overlay]) [part='backdrop'] {
position: fixed;
inset: 0;
pointer-events: none;
transition: opacity var(--vaadin-app-layout-transition-duration);
-webkit-tap-highlight-color: transparent;
}
:host([overlay]) [part='drawer'] {
top: 0;
bottom: 0;
border-inline-end: none;
box-shadow: var(--lumo-box-shadow-s);
}
:host([overlay]) [part='drawer'],
:host([overlay]) [part='backdrop'] {
z-index: 2;
}
:host([drawer-opened][overlay]) [part='backdrop'] {
pointer-events: auto;
touch-action: manipulation;
}
:host([dir='rtl']) [part='drawer'] {
transform: translateX(100%);
}
:host([dir='rtl'][drawer-opened]) [part='drawer'] {
transform: translateX(0%);
}
:host([drawer-opened]:not([overlay])) {
padding-inline-start: var(--vaadin-app-layout-drawer-offset-left);
}
@media (max-width: 800px), (max-height: 600px) {
:host {
--vaadin-app-layout-drawer-overlay: true;
--_vaadin-app-layout-drawer-width: var(--vaadin-app-layout-drawer-width, 20em);
}
}
/* If a vaadin-scroller is used in the drawer, allow it to take all remaining space and contain scrolling */
[part='drawer'] ::slotted(vaadin-scroller) {
flex: 1;
overscroll-behavior: contain;
}
[part~='navbar'],
[part='drawer'] {
background-color: var(--lumo-base-color);
background-clip: padding-box;
}
:host([primary-section='navbar']) [part~='navbar'] {
border: none;
background-image: linear-gradient(var(--lumo-contrast-5pct), var(--lumo-contrast-5pct));
}
:host([primary-section='drawer']:not([overlay])) [part='drawer'] {
background-image: linear-gradient(var(--lumo-shade-5pct), var(--lumo-shade-5pct));
}
[part] ::slotted(h2),
[part] ::slotted(h3),
[part] ::slotted(h4) {
margin-top: var(--lumo-space-xs) ;
margin-bottom: var(--lumo-space-xs) ;
}
}