Zum Hauptinhalt springen

Smolitux UI Styling-Dokumentation

Diese Dokumentation beschreibt die verfügbaren Styling-Utilities in der Smolitux UI-Bibliothek.

Inhaltsverzeichnis

Einführung

Das Styling-System von Smolitux UI bietet eine Sammlung von Utility-Funktionen und -Klassen, die das Styling von Komponenten vereinfachen. Es basiert auf einem konsistenten Design-System mit vordefiniertem Farben, Abständen, Typografie und mehr.

Farben

Das Farbsystem basiert auf einer Palette von Farben mit verschiedenen Schattierungen.

import { colors, getColor, lighten, darken, alpha } from '@smolitux/utils/styling';

// Verwendung der Farbpalette
const primaryColor = colors.primary[500]; // #3b82f6

// Farbe aus dem Theme abrufen
const dangerColor = getColor('danger', 500); // #ef4444
const primaryLight = getColor('primary.100'); // #dbeafe

// Farbe aufhellen
const lightBlue = lighten('#3b82f6', 0.2); // Hellt die Farbe um 20% auf

// Farbe abdunkeln
const darkBlue = darken('#3b82f6', 0.2); // Dunkelt die Farbe um 20% ab

// Alpha-Wert hinzufügen
const transparentBlue = alpha('#3b82f6', 0.5); // rgba(59, 130, 246, 0.5)

Farbpalette

Die Farbpalette umfasst die folgenden Farben mit Schattierungen von 50 bis 950:

  • primary: Blau-Töne für primäre Aktionen und Hervorhebungen
  • gray: Grau-Töne für Text, Hintergründe und Ränder
  • success: Grün-Töne für Erfolgs-Zustände
  • danger: Rot-Töne für Fehler und Warnungen
  • warning: Gelb-Töne für Warnungen
  • info: Blau-Töne für Informationen

Abstände

Das Abstandssystem basiert auf einer Skala von Werten, die konsistente Abstände in der gesamten Anwendung gewährleisten.

import { spacing, getSpacing, m, mt, mr, mb, ml, mx, my, p, pt, pr, pb, pl, px, py } from '@smolitux/utils/styling';

// Abstand aus der Skala abrufen
const space4 = spacing[4]; // 1rem

// Abstand abrufen (unterstützt Zahlen und Strings)
const space = getSpacing(4); // 1rem
const customSpace = getSpacing('2.5rem'); // 2.5rem

// Margin-Utilities
const marginStyles = m(4); // { margin: '1rem' }
const marginTopStyles = mt(2); // { marginTop: '0.5rem' }
const marginRightStyles = mr(3); // { marginRight: '0.75rem' }
const marginBottomStyles = mb(4); // { marginBottom: '1rem' }
const marginLeftStyles = ml(2); // { marginLeft: '0.5rem' }
const marginXStyles = mx(4); // { marginLeft: '1rem', marginRight: '1rem' }
const marginYStyles = my(4); // { marginTop: '1rem', marginBottom: '1rem' }

// Padding-Utilities
const paddingStyles = p(4); // { padding: '1rem' }
const paddingTopStyles = pt(2); // { paddingTop: '0.5rem' }
const paddingRightStyles = pr(3); // { paddingRight: '0.75rem' }
const paddingBottomStyles = pb(4); // { paddingBottom: '1rem' }
const paddingLeftStyles = pl(2); // { paddingLeft: '0.5rem' }
const paddingXStyles = px(4); // { paddingLeft: '1rem', paddingRight: '1rem' }
const paddingYStyles = py(4); // { paddingTop: '1rem', paddingBottom: '1rem' }

Abstandsskala

Die Abstandsskala umfasst die folgenden Werte:

  • 0: 0
  • px: 1px
  • 0.5: 0.125rem (2px)
  • 1: 0.25rem (4px)
  • 1.5: 0.375rem (6px)
  • 2: 0.5rem (8px)
  • 2.5: 0.625rem (10px)
  • 3: 0.75rem (12px)
  • 3.5: 0.875rem (14px)
  • 4: 1rem (16px)
  • 5: 1.25rem (20px)
  • 6: 1.5rem (24px)
  • 8: 2rem (32px)
  • 10: 2.5rem (40px)
  • 12: 3rem (48px)
  • 16: 4rem (64px)
  • 20: 5rem (80px)
  • 24: 6rem (96px)
  • 32: 8rem (128px)
  • 40: 10rem (160px)
  • 48: 12rem (192px)
  • 56: 14rem (224px)
  • 64: 16rem (256px)

Typografie

Das Typografie-System bietet konsistente Schriftgrößen, -gewichte und -stile.

import { 
fontFamily,
fontSize,
fontWeight,
lineHeight,
letterSpacing,
createFontSize,
createFontWeight,
createLineHeight,
createLetterSpacing,
truncate,
textAlign,
textTransform
} from '@smolitux/utils/styling';

// Schriftfamilien
const sansFont = fontFamily.sans;
const monoFont = fontFamily.mono;

// Schriftgrößen
const textBase = fontSize.base; // 1rem
const textLg = fontSize.lg; // 1.125rem

// Schriftgewichte
const normalWeight = fontWeight.normal; // 400
const boldWeight = fontWeight.bold; // 700

// Zeilenhöhen
const normalLineHeight = lineHeight.normal; // 1.5
const tightLineHeight = lineHeight.tight; // 1.25

// Buchstabenabstände
const normalLetterSpacing = letterSpacing.normal; // 0em
const wideLetterSpacing = letterSpacing.wide; // 0.025em

// Typografie-Styles erstellen
const headingStyles = {
...createFontSize('2xl'), // { fontSize: '1.5rem' }
...createFontWeight('bold'), // { fontWeight: 700 }
...createLineHeight('tight'), // { lineHeight: 1.25 }
...createLetterSpacing('tight'), // { letterSpacing: '-0.025em' }
};

// Text-Utilities
const truncatedText = truncate; // { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }
const centeredText = textAlign.center; // { textAlign: 'center' }
const uppercaseText = textTransform.uppercase; // { textTransform: 'uppercase' }

Schriftgrößen

Die Schriftgrößenskala umfasst die folgenden Werte:

  • xs: 0.75rem (12px)
  • sm: 0.875rem (14px)
  • base: 1rem (16px)
  • lg: 1.125rem (18px)
  • xl: 1.25rem (20px)
  • 2xl: 1.5rem (24px)
  • 3xl: 1.875rem (30px)
  • 4xl: 2.25rem (36px)
  • 5xl: 3rem (48px)
  • 6xl: 3.75rem (60px)
  • 7xl: 4.5rem (72px)
  • 8xl: 6rem (96px)
  • 9xl: 8rem (128px)

Responsive Design

Das Responsive-Design-System ermöglicht die Erstellung von Layouts, die sich an verschiedene Bildschirmgrößen anpassen.

import { 
breakpoints,
createMediaQuery,
responsive,
sm,
md,
lg,
xl,
xxl,
createResponsiveStyles
} from '@smolitux/utils/styling';

// Breakpoints
const tabletBreakpoint = breakpoints.md; // 768px
const desktopBreakpoint = breakpoints.lg; // 1024px

// Media-Queries erstellen
const tabletMediaQuery = createMediaQuery('md'); // @media (min-width: 768px)
const customMediaQuery = createMediaQuery('1200px'); // @media (min-width: 1200px)

// Responsive Styles erstellen
const responsiveStyles = {
fontSize: '1rem',
...sm({ fontSize: '1.25rem' }), // @media (min-width: 640px) { fontSize: '1.25rem' }
...md({ fontSize: '1.5rem' }), // @media (min-width: 768px) { fontSize: '1.5rem' }
...lg({ fontSize: '1.75rem' }), // @media (min-width: 1024px) { fontSize: '1.75rem' }
};

// Responsive Styles für eine Eigenschaft erstellen
const responsiveFontSize = createResponsiveStyles('fontSize', {
base: '1rem',
sm: '1.25rem',
md: '1.5rem',
lg: '1.75rem',
xl: '2rem',
'2xl': '2.25rem',
});

Breakpoints

Die Breakpoints umfassen die folgenden Werte:

  • sm: 640px
  • md: 768px
  • lg: 1024px
  • xl: 1280px
  • 2xl: 1536px

Theming

Das Theming-System ermöglicht die Anpassung des Erscheinungsbilds der Komponenten.

import { defaultTheme, createTheme } from '@smolitux/utils/styling';

// Standard-Theme verwenden
const theme = defaultTheme;

// Benutzerdefiniertes Theme erstellen
const customTheme = createTheme({
colors: {
primary: {
500: '#8b5cf6', // Lila statt Blau
},
},
fontFamily: {
sans: 'Roboto, sans-serif',
},
});

Utility-Klassen

Die Bibliothek bietet auch CSS-Utility-Klassen, die direkt in JSX verwendet werden können.

// Beispiel für die Verwendung von Utility-Klassen
function Example() {
return (
<div className="text-primary-600 dark:text-primary-400">
<p className="text-gray-700 dark:text-gray-300">
Ein Beispieltext mit Utility-Klassen.
</p>
<button className="hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-primary-500">
Klick mich
</button>
</div>
);
}

Verfügbare Utility-Klassen

  • Farben: text-{color}-{shade}, bg-{color}-{shade}, border-{color}-{shade}
  • Dark Mode: dark:text-{color}-{shade}, dark:bg-{color}-{shade}, dark:border-{color}-{shade}
  • Hover: hover:text-{color}-{shade}, hover:bg-{color}-{shade}, hover:border-{color}-{shade}
  • Focus: focus:outline-none, focus:ring-{width}, focus:ring-{color}-{shade}
  • Animationen: animate-spin, animate-pulse
  • Sichtbarkeit: invisible, opacity-0
  • Z-Index: z-{value}