È il 2019 e le precedenti risposte a questo problema non vengono utilizzate
- Griglia CSS
- Variabili CSS
- Elementi del modulo HTML5
- SVG in CSS
La griglia CSS è il modo di creare moduli nel 2019 poiché puoi avere le etichette che precedono i tuoi input senza avere div, span, span extra con asterischi e altre reliquie.
Ecco dove stiamo andando con CSS minimo:
L'HTML per quanto sopra:
<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>
Anche il testo segnaposto può essere aggiunto ed è altamente raccomandato. (Sto solo rispondendo a questo modulo intermedio).
Ora per le variabili 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>');
Il CSS per gli elementi del modulo:
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);
}
Il modulo stesso dovrebbe essere nella griglia CSS:
form {
align-items: center;
display: grid;
grid-gap: var(--form-grid-gap);
grid-template-columns: var(--form-grid-template-columns);
margin: auto;
}
I valori per le colonne possono essere impostati su 1fr auto
o 1fr
con qualsiasi cosa come<p>
tag nel modulo impostato su 1 / -1. Modifichi le variabili nelle tue query multimediali in modo da avere le caselle di input che vanno a tutta larghezza su dispositivi mobili e come sopra sul desktop. Se lo desideri, puoi anche modificare il gap della griglia sul dispositivo mobile utilizzando l'approccio delle variabili CSS.
Quando le caselle sono valide, dovresti ottenere un segno di spunta verde invece dell'asterisco.
SVG in CSS è un modo per salvare il browser dal dover fare un giro sul server per ottenere un'immagine dell'asterisco. In questo modo puoi mettere a punto gli asterischi, gli esempi qui sono in un angolo insolito, puoi modificarlo come l'icona SVG sopra è interamente leggibile. La viewbox può anche essere modificata per posizionare l'asterisco sopra o sotto il centro.