logo ferr
Formulaire HTML5 : sélection multiple d’images à l’aide d’un formulaire (partie 1)

Testé avec Firefox v72

Création de trois cases à cocher

Code HTML :

<div>
  <input type="checkbox" name="case1" value="1">
  <input type="checkbox" name="case2" value="2"> 
  <input type="checkbox" name="case3" value="3"> 
</div>

L’attribut value indique la valeur retournée si la case est cochée. Si elle n’est pas cochée, aucune valeur n’est transmise.

Capture d'écran 1
Capture d'écran

Association d’un label à chaque case

Code HTML :

<div>
  <input type="checkbox" id="identifiant1" name="case1" value="1">
  <label for="identifiant1">Image 1</label>
  <input type="checkbox" id="identifiant2" name="case2" value="2">
  <label for="identifiant2">Image 2</label>
  <input type="checkbox" id="identifiant3" name="case3" value="3">
  <label for="identifiant3">Image 3</label>
</div>

L’association permet de cocher la case en cliquant sur le libellé ou la case. Elle nécessite l’utilisation de l’attribut id pour lier le label et la case.

Capture d'écran 2
Capture d'écran

Mise en forme du label pour placer une image de fond

Code CSS :

input#identifiant1 + label {
background-image :url("image1.jpg");
background-repeat:no-repeat;
background-size  :150px 250px;
display          :inline-block;
height           :250px;
width            :150px;
}
      
input#identifiant2 + label {
background-image :url("image2.jpg");
background-repeat:no-repeat;
background-size  :150px 250px;
display          :inline-block;
height           :250px;
width            :150px;
}

input#identifiant3 + label {
background-image :url("image3.jpg");
background-repeat:no-repeat;
background-size  :150px 250px;
display          :inline-block;
height           :250px;
width            :150px;
}

+ est l’opérateur d’adjacence directe. Il permet de s’assurer que le style ne s’appliquera qu’au label précédé de l’élément input. Cet élément input est lui-même ciblé par un identifiant.

Capture d'écran 3
Capture d'écran

Affichage d’un cadre rouge lorsque la case est cochée

Code CSS :

input#identifiant1:checked + label {
border-color:red;
border-style:solid;
}
      
input#identifiant2:checked + label {
border-color:red;
border-style:solid;
}
      
input#identifiant3:checked + label {
border-color:red;
border-style:solid;
}

L’attribut booléen checked indique si la case est cochée.

Capture d'écran 4
Capture d'écran

Application d'une bordure lorsque la case n'est pas cochée

Si les images sont sur une seule ligne, la sélection ne pose pas de problème. En revanche, sur plusieurs lignes, elle induit un décalage dans l'alignement.

Capture d'écran 5
Capture d'écran

Pour éviter un décalage horizontal entre une image sélectionnée et une image non sélectionnée, une bordure est ajoutée à l’image non sélectionnée. Sa couleur est identique à celle du fond dans l'exemple ci-dessous.

Code CSS ajouté pour la mise en forme du label :

border-color:white;
border-style:solid;
Capture d'écran 6
Capture d'écran

Masquage des cases à cocher

Code CSS :

input[type=checkbox] {
display:none;
}
Capture d'écran 7
Capture d'écran

Ajout du formulaire

Le code HTML complet :

<!DOCTYPE html>

<html>

  <head>
    <meta charset="UTF-8">
    <style type="text/css">@import url(selection_image.css);</style>
  </head>

  <body>
 
    <div>
      <form action="./resultat.php" method="get">
        <input type="checkbox" id="identifiant1" name="case1" value="1">
        <label for="identifiant1">Image 1</label>
        <input type="checkbox" id="identifiant2" name="case2" value="2">
        <label for="identifiant2">Image 2</label>
        <input type="checkbox" id="identifiant3" name="case3" value="3">
        <label for="identifiant3">Image 3</label>
        <p> <input type="submit" value="Valider"> </p>
      </form>     
   </div>

  </body>

</html>

Le code CSS complet :

input#identifiant1 + label {
background-image : url("image1.jpg");
background-repeat: no-repeat;
background-size  : 150px 250px;
border-color     :white;
border-style     :solid;
display          :inline-block;
height           : 250px;
width            : 150px;
}
      
input#identifiant2 + label {
background-image : url("image2.jpg");
background-repeat: no-repeat;
background-size  : 150px 250px;
border-color     :white;
border-style     :solid;
display          :inline-block;
height           : 250px;
width            : 150px;
}

input#identifiant3 + label {
background-image : url("image3.jpg");
background-repeat: no-repeat;
background-size  : 150px 250px;
border-color     :white;
border-style     :solid;
display          :inline-block;
height           : 250px;
width            : 150px;
}            

input#identifiant1:checked + label {
border-color:red;
border-style:solid;
}
      
input#identifiant2:checked + label {
border-color:red;
border-style:solid;
}
      
input#identifiant3:checked + label {
border-color:red;
border-style:solid;
}

input[type=checkbox] {
display:none;
}

Ci dessous le formulaire avec les images 1 et 3 sélectionnées

Capture d'écran 8
Capture d'écran

Après avoir cliqué sur le bouton Valider, les valeurs GET retournées par le formulaire sont : case1=1&case3=3

Téléchargement du code source