Input group (Groupe d’entrée)
Le composant « groupe d’entrée » permet de regrouper sur une seule ligne plusieurs éléments de formulaire tels qu’un champ texte et un bouton.
Usage
Ce composant est utile pour créer des formulaires à champ unique, le bouton d’action étant lié à un seul champ. Il permet par exemple de créer une zone d’inscription à une newsletter en utilisant un champ mail et un bouton pour envoyer l’adresse mail au serveur.
Bonnes pratiques
Puisque ce composant sert à créer des formulaires à champ unique, il ne devrait donc pas être utilisé dans un formulaire riche (comportant plusieurs champs). Dans ce contexte, privilégiez les composants de formulaires standards (label, inputs standards, boutons séparés…).
Style & code
Dépendances :
- Classe
sipaui
sur un parent (par exemple le<body>
), - composant Text-fields (champs texte),
- composant Labels (labels),
- composant Buttons (boutons),
- composant Errors (erreurs).
Cas standard
Le groupe d’entrée est l’assemblage d’un champ texte (text, email, tel…) et d’un bouton dans un <div>
portant la classe su-input-group
.
Label + champ texte + bouton texte
<form>
<label for="input1">Label</label>
<div class="su-input-group">
<input id="input1" type="text" name="nom" required>
<button type="submit" name="validation" class="su-button su-primary">Texte</button>
</div>
</form>
Label + champ texte (avec placeholder) + bouton icône
<form>
<label for="input2">Label</label>
<div class="su-input-group">
<input id="input2" type="text" placeholder="Placeholder" name="nom" required>
<button type="submit" name="validation" class="su-button su-primary su-action-icon"><i class="su-icon">aller</i></button>
</div>
</form>
Label interne + champ texte (avec placeholder) + bouton texte
Comme expliqué dans le composant Text-fields (champs texte), il est possible d’utiliser la classe su-label-icon
pour passer le label en icône dans le champ.
<form>
<div class="su-input-group su-label-icon">
<label for="input3">
<span class="su-icon">email</span>
</label>
<input id="input3" type="text" placeholder="Placeholder" name="nom" required>
<button type="submit" name="validation" class="su-button su-primary">Texte</button>
</div>
</form>
Dans ce contexte où le label fait partie du groupe et où votre formulaire ne contient rien d’autre (même pas de message d’erreur…), il est possible de supprimer un niveau du DOM en positionnant les classes su-input-group su-label-icon
directement sur le <form>
au lieu d’utiliser un <div>
juste pour ça…
<form class="su-input-group su-label-icon">
<label for="input3">
<span class="su-icon">email</span>
</label>
<input id="input3" type="text" placeholder="Placeholder" name="nom" required>
<button type="submit" name="validation" class="su-button su-primary">Texte</button>
</form>
Cas avancés
Avec une icône SVG dans le bouton
<form>
<label for="input4">Coordonnées GPS</label>
<div class="su-input-group">
<input id="input4" type="text" placeholder="48,09557° N, 1,62680° O" name="nom" required>
<button type="submit" name="validation" class="su-button su-primary su-action-icon">
<svg viewBox="0 0 17 24" width="17" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:serif="http://www.serif.com/" fill-rule="evenodd">
<path d="M14.348 2.399C12.677.847 10.72.035 8.5.035c-2.387 0-4.416.836-5.872 2.387C1.076 4.092.265 6.05.265 8.271c0 1.073.19 2.123.526 2.911l.023.048c.024.024 1.695 3.151 3.39 6.206C7.832 24 7.951 24 8.5 24c.549 0 .669 0 4.297-6.564 1.694-3.079 3.365-6.182 3.388-6.206l.025-.048c.334-.788.525-1.838.525-2.911 0-2.364-.835-4.393-2.387-5.872zm.549 8.21c-2.005 3.748-5.156 9.5-6.397 11.506-1.241-2.03-4.391-7.758-6.397-11.506-.262-.62-.406-1.456-.406-2.315 0-1.838.669-3.485 1.957-4.869C4.848 2.135 6.495 1.491 8.5 1.491c1.838 0 3.485.67 4.87 1.958 1.289 1.194 1.933 2.84 1.933 4.845 0 .86-.144 1.694-.406 2.315z"/>
<path d="M8.5 3.807c-1.218 0-2.244.43-3.127 1.337-.907.906-1.336 1.933-1.336 3.127 0 1.217.429 2.242 1.336 3.126.908.907 1.934 1.337 3.127 1.337 1.218 0 2.244-.43 3.126-1.337.908-.907 1.337-1.934 1.337-3.126 0-1.218-.43-2.244-1.337-3.127-.882-.907-1.908-1.337-3.126-1.337zm2.125 6.612c-.62.62-1.313.906-2.125.906-.835 0-1.503-.285-2.124-.906-.62-.62-.907-1.313-.907-2.125 0-.835.287-1.504.907-2.125.62-.62 1.312-.906 2.124-.906s1.504.286 2.125.906c.62.62.906 1.313.906 2.125s-.286 1.48-.906 2.125z"/>
</svg>
</button>
</div>
</form>
Avec une RAZ (Remise À Zéro)
<form>
<label for="input5">Label</label>
<div class="su-input-group">
<div class="su-input-actions-1">
<input id="input5" type="text" name="nom" required data-sutoggleclass='{"parent":".su-input-actions-1","klass":"su-js-show"}'>
<div class="su-input-actions-area">
<button type="button" class="su-input-action" data-suemptyinput>
<i class="su-icon">vider</i>
</button>
</div>
</div>
<button type="submit" name="validation" class="su-button su-primary">Texte</button>
</div>
</form>
Pour plus d’explication sur la vidange du champ avec data-sutoggleclas
ou data-suemptyinput
, cf. Text-fields (champs texte).
Avec une erreur
<form class="su-error">
<label for="input1">Label</label>
<div class="su-input-group">
<input id="input1" type="text" name="nom" required>
<button type="submit" name="validation" class="su-button su-primary">Texte</button>
</div>
<div class="su-error-message">Message d’erreur</div>
</form>
Il existe d’autre particularités disponibles (icône-label en SVG, prérempli, en lecture seule…). Pour en savoir plus, se référer au composant Text-fields (champs texte)…
Exemples
Champs de récupération d’adresse mail
<div class="su-row">
<section class="su-col-md-8">
<form class="su-input-group su-label-icon">
<label for="input6">
<span class="su-icon">email</span>
</label>
<input id="input6" type="email" placeholder="leo.dagan@domaine.fr" name="nom" required>
<button type="submit" name="validation" class="su-button su-primary">OK</button>
</form>
</section>
</div>
Champs de récupération d’adresse mail avec option de RAZ et gestion d’erreur
Si vous décidez de remonter les erreurs, il faudra repasser les classes du groupe d’entrée sur un <div>
enfant, à la place du <form>
pour que le message d’erreur ne soit pas inclus dedans.
<div class="su-row">
<section class="su-col-md-8">
<form class="su-error">
<div class="su-input-group su-label-icon">
<div class="su-input-actions-1">
<label for="input7">
<span class="su-icon">email</span>
</label>
<input id="input7" type="email" placeholder="leo.dagan@domaine.fr" name="nom" required data-sutoggleclass='{"parent":".su-input-actions-1","klass":"su-js-show"}' value="perceval">
<div class="su-input-actions-area">
<button type="button" class="su-input-action" data-suemptyinput>
<i class="su-icon">vider</i>
</button>
</div>
</div>
<button type="submit" name="validation" class="su-button su-primary">OK</button>
</div>
<div class="su-error-message">Message d’erreur</div>
</form>
</section>
</div>
Liste des classes disponibles
su-input-group
Classes annexes
su-label-icon
(dépendant du composant Text-fields (champs texte))su-input-actions-1
(dépendant du composant Text-fields (champs texte))su-input-actions-area
(dépendant du composant Text-fields (champs texte))su-input-action
(dépendant du composant Text-fields (champs texte))su-error
(dépendant du composant Errors (erreurs))su-error-message
(dépendant du composant Errors (erreurs))su-button
(dépendant du composant Buttons (boutons))su-primary
(dépendant du composant Buttons (boutons))su-action-icon
(dépendant du composant Buttons (boutons))su-icon
(dépendant des icônes de SipaUI)