Meilleures pratiques CSS pour les thèmes XOOPS
Ce guide couvre l’organisation CSS, les techniques de mise en page modernes et l’optimisation des performances pour le développement de thèmes XOOPS.
Architecture CSS
Section intitulée « Architecture CSS »Organisation des fichiers
Section intitulée « Organisation des fichiers »themes/mytheme/css/├── style.css # Main stylesheet (imports others)├── base/│ ├── _reset.css # CSS reset/normalize│ ├── _typography.css # Font styles│ └── _variables.css # CSS custom properties├── components/│ ├── _blocks.css # Block styling│ ├── _buttons.css # Button styles│ ├── _forms.css # Form elements│ └── _navigation.css # Nav menus├── layout/│ ├── _header.css # Site header│ ├── _footer.css # Site footer│ ├── _sidebar.css # Sidebars│ └── _grid.css # Grid system└── modules/ # Module-specific overrides ├── _news.css └── _publisher.cssFeuille de style principale
Section intitulée « Feuille de style principale »@import 'base/_variables.css';@import 'base/_reset.css';@import 'base/_typography.css';
@import 'layout/_grid.css';@import 'layout/_header.css';@import 'layout/_footer.css';@import 'layout/_sidebar.css';
@import 'components/_blocks.css';@import 'components/_buttons.css';@import 'components/_forms.css';@import 'components/_navigation.css';
@import 'modules/_news.css';@import 'modules/_publisher.css';Propriétés CSS personnalisées
Section intitulée « Propriétés CSS personnalisées »Variables
Section intitulée « Variables »:root { /* Colors */ --color-primary: #3498db; --color-primary-dark: #2980b9; --color-secondary: #2c3e50; --color-accent: #e74c3c;
--color-text: #333; --color-text-light: #666; --color-text-muted: #999;
--color-bg: #fff; --color-bg-alt: #f5f5f5; --color-border: #ddd;
/* Typography */ --font-family: system-ui, -apple-system, sans-serif; --font-family-heading: var(--font-family); --font-size-base: 16px; --line-height: 1.6;
/* Spacing */ --spacing-xs: 0.25rem; --spacing-sm: 0.5rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem;
/* Layout */ --max-width: 1200px; --sidebar-width: 250px; --header-height: 60px;
/* Borders */ --border-radius: 4px; --border-width: 1px;
/* Shadows */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.1); --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1); --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
/* Transitions */ --transition-fast: 150ms ease; --transition-normal: 300ms ease;}Mode sombre
Section intitulée « Mode sombre »@media (prefers-color-scheme: dark) { :root { --color-text: #e0e0e0; --color-text-light: #b0b0b0; --color-bg: #1a1a1a; --color-bg-alt: #2d2d2d; --color-border: #444; }}
/* Manual toggle */[data-theme="dark"] { --color-text: #e0e0e0; --color-bg: #1a1a1a;}Disposition moderne
Section intitulée « Disposition moderne »Grille CSS pour la mise en page
Section intitulée « Grille CSS pour la mise en page ».page-container { display: grid; grid-template-columns: var(--sidebar-width) 1fr var(--sidebar-width); grid-template-areas: "header header header" "left main right" "footer footer footer"; gap: var(--spacing-lg); max-width: var(--max-width); margin: 0 auto; padding: var(--spacing-md);}
.site-header { grid-area: header; }.sidebar-left { grid-area: left; }.content-main { grid-area: main; }.sidebar-right { grid-area: right; }.site-footer { grid-area: footer; }
/* No left sidebar */.no-left-sidebar .page-container { grid-template-columns: 1fr var(--sidebar-width); grid-template-areas: "header header" "main right" "footer footer";}
/* No sidebars */.no-sidebars .page-container { grid-template-columns: 1fr; grid-template-areas: "header" "main" "footer";}Flexbox pour les composants
Section intitulée « Flexbox pour les composants ».block-header { display: flex; align-items: center; justify-content: space-between; gap: var(--spacing-sm);}
.nav-menu { display: flex; flex-wrap: wrap; gap: var(--spacing-md); list-style: none; padding: 0;}Conception réactive
Section intitulée « Conception réactive »Points d’arrêt mobile-first
Section intitulée « Points d’arrêt mobile-first »/* Mobile first - base styles */.page-container { display: block; padding: var(--spacing-sm);}
/* Tablet */@media (min-width: 768px) { .page-container { display: grid; grid-template-columns: var(--sidebar-width) 1fr; gap: var(--spacing-md); }}
/* Desktop */@media (min-width: 1024px) { .page-container { grid-template-columns: var(--sidebar-width) 1fr var(--sidebar-width); gap: var(--spacing-lg); }}Requêtes de conteneur
Section intitulée « Requêtes de conteneur »/* Modern container queries */.block { container-type: inline-size;}
@container (min-width: 300px) { .block-content { display: grid; grid-template-columns: repeat(2, 1fr); }}Style des blocs
Section intitulée « Style des blocs ».block { background: var(--color-bg); border: var(--border-width) solid var(--color-border); border-radius: var(--border-radius); margin-bottom: var(--spacing-md); overflow: hidden;}
.block-title { background: var(--color-bg-alt); padding: var(--spacing-sm) var(--spacing-md); margin: 0; font-size: 1rem; font-weight: 600; border-bottom: var(--border-width) solid var(--color-border);}
.block-content { padding: var(--spacing-md);}
.block-content ul { list-style: none; padding: 0; margin: 0;}
.block-content li { padding: var(--spacing-sm) 0; border-bottom: var(--border-width) solid var(--color-border);}
.block-content li:last-child { border-bottom: none;}Performance
Section intitulée « Performance »CSS critique
Section intitulée « CSS critique »<head> <!-- Inline critical CSS --> <style> /* Above-the-fold styles */ body { font-family: system-ui; margin: 0; } .header { background: #fff; height: 60px; } </style>
<!-- Load full CSS async --> <link rel="preload" href="style.css" as="style" onload="this.rel='stylesheet'"> <noscript><link rel="stylesheet" href="style.css"></noscript></head>Conseils d’optimisation
Section intitulée « Conseils d’optimisation »- Minimiser la spécificité - Évitez l’imbrication profonde
- Utiliser les propriétés modernes -
gapau lieu de marges - Réduire les repeints - Utilisez
transformpour les animations - Chargement paresseux - Charger CSS du module uniquement si nécessaire
/* Good - low specificity */.block-title { }
/* Avoid - high specificity */.sidebar .block .block-header .block-title { }Documentation connexe
Section intitulée « Documentation connexe »- Theme-Structure - Organisation des fichiers de thème
- Theme-Development - Guide complet des thèmes
- ../Templates/Smarty-Templating - Intégration des modèles
- ../../03-Module-Development/Block-Development - Style des blocs