Skip to main content

Layout Configuration

Configure layout dimensions and breakpoints using uizy.layout(). This method can be called at startup via start() or anytime at runtime to update layout settings.

Basic Usage

import uizy from "@dufeut/uizy";
import "@dufeut/uizy/index.css";

uizy.layout({
layout: {
header: 56,
footer: 48,
left: 240,
right: 240,
},
});

Full Configuration

uizy.layout({
// Dimensions
layout: {
system: 24, // System bar height (px)
header: 56, // Header height (px)
footer: 48, // Footer height (px)
left: 240, // Left drawer width (px)
right: 240, // Right drawer width (px)
leftMini: 64, // Left mini drawer width (px)
rightMini: 64, // Right mini drawer width (px)
drawerSpeed: 0.2, // Animation speed (seconds)
},

// Overlay styling
overlay: {
opacity: 0.45,
color: "black",
},

// Responsive breakpoint
breakpoint: {
name: "md", // Breakpoint name (sm, md, lg, xl, xxl)
width: 768, // Or custom width in pixels
main: true, // Adjust main content margins
header: true, // Adjust header margins
top: true, // Adjust top clipping
bottom: false, // Adjust bottom clipping
left: true, // Reset left margins on mobile
right: true, // Reset right margins on mobile
drawer: true, // Close open drawers on mobile, re-open on desktop
},
});

Configuration Options

Layout Options

PropertyTypeDefaultDescription
systemnumber0System bar height in pixels
headernumber56Header height in pixels
footernumber48Footer height in pixels
leftnumber240Left drawer width in pixels
rightnumber240Right drawer width in pixels
leftMininumber64Left mini drawer width in pixels
rightMininumber64Right mini drawer width in pixels
drawerSpeednumber0.2Drawer animation speed in seconds

Overlay Options

PropertyTypeDefaultDescription
opacitynumber0.45Overlay opacity (0-1)
colorstring"black"Overlay background color

Breakpoint Options

PropertyTypeDefaultDescription
namestring""Named breakpoint (sm, md, lg, xl, xxl)
widthnumber0Custom breakpoint width in pixels
mainbooleantrueAdjust main content margins
headerbooleantrueAdjust header margins
topbooleanfalseAdjust top clipping
bottombooleanfalseAdjust bottom clipping
leftbooleanfalseReset left margins below breakpoint
rightbooleanfalseReset right margins below breakpoint
drawerbooleantrueClose open drawers below breakpoint, re-open above

Named Breakpoints

NameWidth
sm576px
md768px
lg992px
xl1200px
xxl1400px

Examples

Mobile-First Layout

uizy.layout({
layout: {
header: 56,
footer: 48,
left: 280,
leftMini: 56,
},
breakpoint: {
name: "md",
main: true,
header: true,
left: true,
},
});

Dark Overlay

uizy.layout({
overlay: {
opacity: 0.7,
color: "#000",
},
});

Slower Animations

uizy.layout({
layout: {
drawerSpeed: 0.4,
},
});

Runtime Updates

Call uizy.layout() anytime to update layout configuration. Only the properties you provide will be updated; others retain their current values.

// Update header height at runtime
uizy.layout({ layout: { header: 72 } });

// Update overlay appearance
uizy.layout({ overlay: { opacity: 0.6 } });

// Update multiple settings
uizy.layout({
layout: { left: 300, drawerSpeed: 0.3 },
overlay: { color: "#1a1a1a" },
});
tip

Use runtime updates to implement features like collapsible headers, dynamic drawer widths, or user-customizable layouts.

Example: Collapsible Header

let headerExpanded = true;

function toggleHeader() {
headerExpanded = !headerExpanded;
uizy.layout({
layout: { header: headerExpanded ? 56 : 0 },
});
}

Example: Responsive Drawer Width

function setDrawerWidth(width) {
uizy.layout({ layout: { left: width } });
}

// Expand drawer on hover
drawer.addEventListener("mouseenter", () => setDrawerWidth(280));
drawer.addEventListener("mouseleave", () => setDrawerWidth(64));

Using with start()

Configure layout through the unified start() method for initial setup:

uizy.start({
layout: {
layout: {
header: 56,
footer: 48,
left: 240,
},
breakpoint: {
name: "md",
left: true,
},
},
onReady: () => {
console.log("Layout configured!");
},
});

Ready Gate

The <uizy-app> element is hidden (visibility: hidden) until initialization completes. This prevents a layout flash where drawers briefly appear before being closed by the breakpoint logic.

  • All transitions are disabled until ready (no slide-in animations on load)
  • After uizy.start() runs, the uizy-ready class is added and the layout becomes visible
  • If you're using only the CSS without the JS engine, add uizy-ready manually:
<uizy-app class="uizy-ready">...</uizy-app>

Drawer Responsive Behavior

When breakpoint.drawer is true (default), drawers declared with the open attribute automatically respond to viewport changes:

  • Below breakpoint: Open drawers are closed (the open class is removed)
  • Above breakpoint: Previously open drawers are restored
  • Manual toggle: The action() method still works normally at any size
uizy.start({
layout: {
breakpoint: {
name: "lg",
drawer: true, // Drawers auto-close on mobile
left: true,
main: true,
header: true,
},
},
});
<!-- This drawer will be open on desktop (>=992px) and closed on mobile -->
<uizy-drawer open clip-top clip-bottom>Navigation</uizy-drawer>

Generated CSS Variables

uizy.layout() injects CSS custom properties that control the layout:

VariableDescription
--uizy-system-bar-heightSystem bar height
--uizy-header-heightHeader height
--uizy-footer-heightFooter height
--uizy-left-widthLeft drawer width
--uizy-right-widthRight drawer width
--uizy-left-mini-widthLeft mini drawer width
--uizy-right-mini-widthRight mini drawer width
--uizy-drawer-speedDrawer animation duration
--uizy-overlay-colorOverlay background color
--uizy-overlay-opacityOverlay opacity