Documentation - Modals.
Découvrez Marssel : un framework CSS intelligent, configuration minimale, conçu pour des interfaces rapides et une expérience développeur simplifiée.
Démarrage
Concepts de base
Utilitaires
Modals
Marssel inclut un système de modales flexible et personnalisable permettant d'afficher du contenu dans des fenêtres superposées. Les modales peuvent être positionnées de différentes manières et s'adaptent automatiquement aux différentes tailles d'écran.
Configuration de base
Initialisez le gestionnaire de modales au chargement :
const marssel = new Marssel();
// Le ModalManager est automatiquement initialisé
Structure HTML
Une modale est composée de trois parties principales :
<!-- Overlay -->
<div id="modal-overlay" class="d-[none] pos-[fixed] top-[0] left-[0] w-[100%] h-[100%] bg-[000000] opacity-[0.65] z-[1001]"></div>
<!-- Modal -->
<div id="modal-default" class="modal-default---[d-[none]+pos-[fixed]+top-[50%]+left-[50%]+transform-[translate(-50%,-50%)]+bg-[ffffff]+rounded-[8px]+z-[1001]+w-[90%]+max-w-[500px]+shadow-[0_4px_12px_rgba(0,0,0,0.3)]]">
<!-- Header -->
<div class="modal-header---[d-[flex]+justify-[space-between]+items-[center]+p-[16px]+border-b-[1px_solid_eeeeee]]">
<h4 class="m-[0] fw-[600]">Titre de la modale</h4>
<button class="close-btn close-btn---[bg-[transparent]+border-[none]+cursor-[pointer]+font-size-[24px]]"
onclick="closeModal('modal-default')">×</button>
</div>
<!-- Body -->
<div class="modal-body modal-body---[p-[16px]]">
<p>Contenu de la modale</p>
</div>
<!-- Footer -->
<div class="modal-footer---[p-[16px]+border-t-[1px_solid_eeeeee]+d-[flex]+justify-[flex-end]]">
<button class="bg-[eaeaea] c-[333] p-[8px_16px] rounded-[4px] border-[1px_solid_ccc] mr-[8px]"
onclick="closeModal('modal-default')">
Annuler
</button>
<button class="bg-[4b7bec] c-[fff] p-[8px_16px] rounded-[4px] border-[none]">Confirmer</button>
</div>
</div>
Modale Standard (Centrée)
Position par défaut au centre de l'écran :
<button class="btn-modal" onclick="openModal('modal-centered')">Modale Centrée</button>
<div id="modal-centered" class="modal-centered---[d-[none]+pos-[fixed]+top-[50%]+left-[50%]+transform-[translate(-50%,-50%)]+bg-[ffffff]+rounded-[8px]+z-[1001]+w-[90%]+max-w-[500px]+shadow-[0_4px_12px_rgba(0,0,0,0.3)]]">
<div class="modal-header">
<h4 class="m-[0] fw-[600]">Modale Centrée</h4>
<button class="close-btn" onclick="closeModal('modal-centered')">×</button>
</div>
<div class="modal-body---[p-[16px]]">
<p>Cette modale est explicitement centrée verticalement et horizontalement.</p>
</div>
<div class="modal-footer">
<button class="bg-[eaeaea] c-[333] p-[8px_16px] rounded-[4px] border-[1px_solid_ccc] mr-[8px]" onclick="closeModal('modal-centered')">Annuler</button>
<button class="bg [4b7bec] c-[fff] p-[8px_16px] rounded-[4px] border-[none]">Confirmer</button>
</div>
</div>
Modale En Haut
Positionnée en haut de l'écran :
<button onclick="openModal('modal-top')">Modale En Haut</button>
<div id="modal-top" class="modal-top---[d-[none]+pos-[fixed]+top-[20px]+left-[50%]+transform-[translateX(-50%)]+bg-[ffffff]+rounded-[8px]+z-[1001]+w-[90%]+max-w-[500px]+shadow-[0_4px_12px_rgba(0,0,0,0.3)]]">
<!-- Contenu -->
</div>
Modale En Bas
Positionnée en bas de l'écran :
<button onclick="openModal('modal-bottom')">Modale En Bas</button>
<div id="modal-bottom" class="modal-bottom---[d-[none]+pos-[fixed]+bottom-[20px]+left-[50%]+transform-[translateX(-50%)]+bg-[ffffff]+rounded-[8px]+z-[1001]+w-[90%]+max-w-[500px]+shadow-[0_4px_12px_rgba(0,0,0,0.3)]]">
<!-- Contenu -->
</div>
Modale Plein Écran
Occupe toute la fenêtre du navigateur :
<button onclick="openModal('modal-bottom')">Modale En Haut</button>
<div id="modal-fullscreen" class="modal-fullscreen---[d-[none]+pos-[fixed]+top-[0]+left-[0]+w-[100%]+h-[100%]+bg-[ffffff]+z-[1001]+overflow-[auto]]">
<!-- Contenu -->
</div>
API JavaScript
Contrôlez les modales programmatiquement :
// Ouvrir une modale
marssel.modalManager.openModal('modal-id');
// Fermer une modale
marssel.modalManager.closeModal('modal-id');
// Fermer toutes les modales
marssel.modalManager.closeAllModals();
// Vérifier si une modale est ouverte
if (marssel.modalManager.isOpen('modal-id')) {
// ...
}
Événements
Écoutez les événements d'ouverture et fermeture :
// Au clic sur l'overlay
document.getElementById('modal-overlay').addEventListener('click', () => {
marssel.modalManager.closeAllModals();
});
// Fermeture au clavier (ESC)
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
marssel.modalManager.closeAllModals();
}
});
Modale Responsive
Adaptez la taille de la modale selon l'écran :
<div id="modal-responsive" class="modal---[d-[none]+pos-[fixed]+top-[50%]+left-[50%]+transform-[translate(-50%,-50%)]+bg-[ffffff]+rounded-[8px]+z-[1001]+w-[95%]+max-w-[400px]] md--modal---[max-w-[600px]] lg--modal---[max-w-[800px]]">
<!-- Contenu -->
</div>
Animations
Ajoutez des transitions pour une meilleure UX :
<div id="modal-animated" class="modal---[d-[none]+pos-[fixed]+top-[50%]+left-[50%]+transform-[translate(-50%,-50%)]+bg-[ffffff]+rounded-[8px]+z-[1001]+opacity-[0]+transition-[all_0.3s_ease]]">
<!-- Contenu -->
</div>
// Ajouter la classe d'animation à l'ouverture
marssel.modalManager.onOpen('modal-animated', (modal) => {
setTimeout(() => {
modal.style.opacity = '1';
}, 10);
});
Modale Centrée
Cette modale est explicitement centrée verticalement et horizontalement.
Modale En Haut
Cette modale est positionnée en haut de l'écran.
Modale En Bas
Cette modale est positionnée en bas de l'écran.
Modale Plein Écran
Cette modale occupe tout l'écran.
Idéale pour afficher beaucoup de contenu ou sur les petits écrans.
Fin du contenu avec défilement.