UNPKG

@casoon/dragonfly

Version:

Modular, lightweight CSS framework and design system for modern web projects. Optimized for Astro JS, LightningCSS and Container Queries with @layer-based architecture and comprehensive accessibility.

269 lines (223 loc) 7.7 kB
/** * Flex Layout System * * A comprehensive flexbox-based layout system providing flexible and responsive * layout utilities for modern web applications. This system offers semantic * flexbox classes with intuitive naming conventions. * * @layer layout.flex * @version 2.0 * @author Design System Team * * FEATURES: * - Complete flexbox utility system * - Semantic layout components (.layout-flex-*) * - Direction, wrapping, and alignment utilities * - Flexible item sizing with flex-basis utilities * - Self-alignment controls for individual items * - Grow and shrink utilities for dynamic layouts * - Works seamlessly with CSS Grid system * - Responsive-ready with breakpoint variants * * FLEX CONTAINER CLASSES: * - .flex: Base flex container * - .inline-flex: Inline flex container * - .flex-row: Horizontal direction (default) * - .flex-col: Vertical direction * - .flex-wrap: Allow wrapping * - .flex-nowrap: Prevent wrapping * * ALIGNMENT CLASSES: * - .items-start: Align items to start * - .items-center: Center align items * - .items-end: Align items to end * - .items-stretch: Stretch items to fill * - .items-baseline: Baseline alignment * - .justify-start: Justify content to start * - .justify-center: Center justify content * - .justify-end: Justify content to end * - .justify-between: Space between items * - .justify-around: Space around items * - .justify-evenly: Even space distribution * * FLEX ITEM CLASSES: * - .flex-1: Grow and shrink equally * - .flex-auto: Grow and shrink based on content * - .flex-none: Don't grow or shrink * - .flex-initial: Initial flex value * - .flex-grow: Allow growing * - .flex-shrink: Allow shrinking * * FLEX BASIS UTILITIES: * - .flex-basis-1-2: 50 basis * - .flex-basis-1-3: 33.33% basis * - .flex-basis-2-3: 66.67% basis * - .flex-basis-1-4: 25% basis * - .flex-basis-3-4: 75% basis * - .flex-basis-1-5: 20 basis * - .flex-basis-2-5: 40 basis * - .flex-basis-3-5: 60 basis * - .flex-basis-4-5: 80 basis * * SELF-ALIGNMENT: * - .self-auto: Auto alignment * - .self-start: Align self to start * - .self-center: Center align self * - .self-end: Align self to end * - .self-stretch: Stretch self * * LAYOUT COMPONENTS: * - .layout-flex: Semantic flex column with gap * - .layout-flex-row: Semantic flex row with gap * - .layout-flex-column: Semantic flex column with gap * - .layout-flex-between: Space-between layout * - .layout-flex-center: Centered layout * * USAGE EXAMPLES: * * Basic Flex Layout: * <div class="flex items-center justify-between"> * <div>Logo</div> * <nav class="flex gap-4"> * <a href="#">Home</a> * <a href="#">About</a> * </nav> * </div> * * Card Layout: * <div class="flex flex-col gap-4"> * <h2>Card Title</h2> * <p class="flex-1">Card content that grows</p> * <button>Action</button> * </div> * * Responsive Layout: * <div class="flex flex-col md:flex-row gap-6"> * <main class="flex-1">Main content</main> * <aside class="flex-basis-1-3">Sidebar</aside> * </div> * * Complex Alignment: * <div class="flex flex-wrap items-start justify-center gap-4"> * <div class="flex-basis-1-3 self-stretch">Item 1</div> * <div class="flex-basis-1-3 self-center">Item 2</div> * <div class="flex-basis-1-3 self-end">Item 3</div> * </div> * * RESPONSIVE USAGE: * Use with responsive-utilities.css for breakpoint-specific layouts: * <div class="flex-col sm:flex-row items-center sm:items-start"> * <!-- Responsive flex direction and alignment --> * </div> * * BROWSER SUPPORT: * - Flexbox: All modern browsers (IE 11+ with -ms- prefix) * - Gap property: Chrome 84+, Firefox 63+, Safari 14.1+ * - Fallback: Use margin utilities for older browsers * * PERFORMANCE NOTES: * - Flexbox is highly optimized for one-dimensional layouts * - Use CSS Grid for two-dimensional layouts * - Gap property is more performant than margins * - Avoid deep nesting of flex containers * * ACCESSIBILITY: * - Flex layouts maintain document flow for screen readers * - Use semantic HTML elements within flex containers * - Be careful with flex-direction: column and tab order * - Test with keyboard navigation * - Consider using order property sparingly * * INTEGRATION: * - Complements layout/grid-system.css for hybrid layouts * - Works with layout/spacing.css for gap utilities * - Enhanced by layout/responsive-utilities.css for responsive variants * - Compatible with layout/containers.css for container sizing * * BEST PRACTICES: * - Use flexbox for one-dimensional layouts (rows or columns) * - Use CSS Grid for two-dimensional layouts * - Prefer gap over margins for spacing * - Use semantic layout components for common patterns * - Test responsive behavior across breakpoints * - Ensure accessibility with proper HTML structure */ @layer layout.flex { /* ================= FLEX-LAYOUT-SYSTEM ================= */ .layout-flex { display: flex; flex-direction: column; gap: var(--grid-gutter, 1rem); } /* Typische Flex-Layouts */ .layout-flex-row { display: flex; flex-direction: row; gap: var(--grid-gutter, 1rem); } .layout-flex-column { display: flex; flex-direction: column; gap: var(--grid-gutter, 1rem); } /* Verteilte Layouts */ .layout-flex-between { display: flex; flex-direction: row; gap: var(--grid-gutter, 1rem); justify-content: space-between; } .layout-flex-center { align-items: center; display: flex; gap: var(--grid-gutter, 1rem); justify-content: center; } /* ================= FLEX UTILITIES ================= */ /* Display-Typen */ .flex { display: flex; } .inline-flex { display: inline-flex; } /* Flex-Richtung und Umbruchverhalten */ .flex-row { flex-direction: row; } .flex-col { flex-direction: column; } .flex-wrap { flex-wrap: wrap; } .flex-nowrap { flex-wrap: nowrap; } /* Ausrichtung von Flex-Items */ .items-start { align-items: flex-start; } .items-center { align-items: center; } .items-end { align-items: flex-end; } .items-stretch { align-items: stretch; } .items-baseline { align-items: baseline; } .justify-start { justify-content: flex-start; } .justify-center { justify-content: center; } .justify-end { justify-content: flex-end; } .justify-between { justify-content: space-between; } .justify-around { justify-content: space-around; } .justify-evenly { justify-content: space-evenly; } /* Flex-Eigenschaften */ .flex-1 { flex: 1 1 0; } .flex-auto { flex: 1 1 auto; } .flex-none { flex: none; } .flex-initial { flex: 0 1 auto; } /* Flex-Basis für flexible Layouts */ .flex-basis-1-2 { flex-basis: 50%; } .flex-basis-1-3 { flex-basis: 33.3333%; } .flex-basis-2-3 { flex-basis: 66.6667%; } .flex-basis-1-4 { flex-basis: 25%; } .flex-basis-3-4 { flex-basis: 75%; } .flex-basis-1-5 { flex-basis: 20%; } .flex-basis-2-5 { flex-basis: 40%; } .flex-basis-3-5 { flex-basis: 60%; } .flex-basis-4-5 { flex-basis: 80%; } /* Flex-Grow und Flex-Shrink */ .flex-grow { flex-grow: 1; } .flex-grow-0 { flex-grow: 0; } .flex-shrink { flex-shrink: 1; } .flex-shrink-0 { flex-shrink: 0; } /* Self-Alignment */ .self-auto { align-self: auto; } .self-start { align-self: flex-start; } .self-center { align-self: center; } .self-end { align-self: flex-end; } .self-stretch { align-self: stretch; } }