Affichage/masquage de boutons
Gestion de l'affichage/masquage des boutons « add/delete », ici pour des images, en utilisant le CSS et le sélecteur « d'adjacente indirecte » ~
(tilde).
Résultat
En l'absence d'image dans le conteneur, le bouton
apparaît et permet de simuler le chargement d'une image dans le conteneur associé.En présence d'une image dans le conteneur, le bouton
apparaît et permet de supprimer l'image associée.Principe
HTML avant ajout d'une image
<div class="item-image">
<button class="btn-delete" title="Supprimer l'image">×</button>
<button class="btn-add" title="Charger une image">↻</button>
</div>
L'ordre des boutons n'a pas d'importance, ils peuvent être inversés.
HTML après ajout d'une image
<div class="item-image">
<img src="nom-de-l'image">
<button class="btn-delete" title="Supprimer l'image">×</button>
<button class="btn-add" title="Charger une image">↻</button>
</div>
L'image doit être ajoutée comme premier élément du conteneur afin d'autoriser la manipulation, via le CSS et le sélecteur « d'adjacente indirecte » ~
(tilde), des boutons.
CSS de masquage/affichage des boutons
/* btn Add en absence d'image */
/* btn Delete en présence d'image */
.item-image .btn-add,
.item-image img ~ .btn-delete {
pointer-events: inherit;
opacity: .25;
}
/* btn Add en présence d'une image */
/* btn Delete en absence d'une image */
.item-image img ~ .btn-add,
.item-image .btn-delete {
pointer-events: none;
opacity: 0;
}
/* affichage en plein au survol */
.item-image .btn-add:hover,
.item-image .btn-delete:hover {
cursor: pointer;
opacity: 1;
}
Le reste n'est que cosmétique.
Alternative
Une alternative en utilisant JavaScript pourrait tout à fait faire l’affaire en ajoutant des écouteurs d'événements pointerenter
et pointerleave
sur les conteneurs <div class="item-image">
et de tester la présence d'une image dans ceux-ci afin d'ajouter/enlever une classe sur les boutons concernés.