Nous sommes en 2019 et les réponses précédentes à ce problème ne sont pas utilisées.
- Grille CSS
- Variables CSS
- Éléments de formulaire HTML5
- SVG en CSS
La grille CSS est la façon de faire des formulaires en 2019 car vous pouvez avoir vos étiquettes précédant vos entrées sans avoir des divs supplémentaires, des travées, des travées avec des astérisques et d'autres reliques.
Voici où nous allons avec un minimum de CSS :
Le HTML pour ce qui précède :
<form action="https://www.example.com/register/" method="post" id="form-validate" enctype="multipart/form-data">
<p class="form-instructions">Please enter the following information to create your account.</p>
<label for="firstname">First name</label>
<input type="text" id="firstname" name="firstname" value="" title="First name" maxlength="255" required="">
<label for="lastname">Last name</label>
<input type="text" id="lastname" name="lastname" value="" title="Last name" maxlength="255" required="">
<label for="email_address">Email address</label>
<input type="email" autocapitalize="off" autocorrect="off" spellcheck="false" name="email" id="email_address" value="" title="Email address" size="30" required="">
<label for="password">Password</label>
<input type="password" name="password" id="password" title="Password" required="">
<label for="confirmation">Confirm password</label>
<input type="password" name="confirmation" title="Confirm password" id="confirmation" required="">
<input type="checkbox" name="is_subscribed" title="Subscribe to our newsletter" value="1" id="is_subscribed" class="checkbox">
<label for="is_subscribed">Subscribe to the newsletter</label>
<input type="checkbox" name="persistent_remember_me" id="remember_meGCJiRe0GbJ" checked="checked" title="Remember me">
<label for="remember_meGCJiRe0GbJ">Remember me</label>
<p class="required">* Required</p>
<button type="submit" title="Register">Register</button>
</form>
Il est également possible d'ajouter un texte de remplacement, ce qui est fortement recommandé. (Je réponds à cette question à mi-parcours).
Passons maintenant aux variables CSS :
--icon-required: url('data:image/svg+xml,\
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="-10 -6 16 16"> \
<line id="line" y1="-3" y2="3" stroke="%23df0000" stroke-linecap="butt" transform="rotate(15)"></line> \
<line id="line" y1="-3" y2="3" stroke="%23df0000" stroke-linecap="butt" transform="rotate(75)"></line> \
<line id="line" y1="-3" y2="3" stroke="%23df0000" stroke-linecap="butt" transform="rotate(-45)"></line> \
</svg>');
--icon-tick: url('data:image/svg+xml,\
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100" viewBox="-2 -2 16 16"> \
<path fill="green" stroke-linejoin="round" d="M2 6L1 7l3 4 7-10h-1L4 8z"/> \
</svg>');
Le CSS pour les éléments du formulaire :
input[type=text][required],
input[type=email][required],
input[type=password][required],
input[type=tel][required] {
background-image: var(--icon-required);
background-position-x: right;
background-repeat: no-repeat;
background-size: contain;
}
input:valid {
--icon-required: var(--icon-tick);
}
Le formulaire lui-même doit être placé dans une grille CSS :
form {
align-items: center;
display: grid;
grid-gap: var(--form-grid-gap);
grid-template-columns: var(--form-grid-template-columns);
margin: auto;
}
Les valeurs des colonnes peuvent être définies comme suit 1fr auto
o 1fr
avec des éléments tels que <p>
dans le formulaire à span 1/-1. Vous modifiez les variables dans vos media queries de manière à ce que les boîtes de saisie s'étendent sur toute la largeur sur mobile et comme indiqué ci-dessus sur ordinateur de bureau. Vous pouvez également modifier l'espacement de la grille sur mobile si vous le souhaitez en utilisant l'approche des variables CSS.
Si les cases sont valides, une coche verte devrait apparaître à la place de l'astérisque.
Le SVG en CSS est un moyen d'éviter au navigateur d'avoir à faire un aller-retour avec le serveur pour obtenir une image de l'astérisque. De cette manière, vous pouvez affiner les astérisques, les exemples ici sont à un angle inhabituel, vous pouvez éditer cela comme l'icône SVG ci-dessus est tout à fait lisible. La boîte de visualisation peut également être modifiée pour placer l'astérisque au-dessus ou au-dessous du centre.