Es 2019 y las respuestas anteriores a este problema no están utilizando
- Rejilla CSS
- Variables CSS
- Elementos de formulario HTML5
- SVG en CSS
La cuadrícula CSS es la forma de hacer formularios en 2019, ya que puede tener sus etiquetas precediendo a sus entradas sin tener divs, tramos, tramos con asteriscos y otras reliquias adicionales.
Aquí es donde vamos con CSS mínimo:
El HTML para lo anterior:
<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>
El texto de marcador de posición también se puede agregar y es muy recomendable. (Solo estoy respondiendo esta forma intermedia).
Ahora para las 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>');
El CSS para los elementos del formulario:
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);
}
El formulario en sí debe estar en la cuadrícula CSS:
form {
align-items: center;
display: grid;
grid-gap: var(--form-grid-gap);
grid-template-columns: var(--form-grid-template-columns);
margin: auto;
}
Los valores para las columnas se pueden establecer en 1fr auto
o 1fr
con cualquier cosa, como <p>
etiquetas en el formulario configurado para abarcar 1 / -1. Cambia las variables en sus consultas de medios para que tenga los cuadros de entrada de ancho completo en dispositivos móviles y según lo anterior en el escritorio. También puede cambiar la brecha de la cuadrícula en el móvil si lo desea utilizando el enfoque de variables CSS.
Cuando las casillas son válidas, debería aparecer una marca verde en lugar del asterisco.
El SVG en CSS es una forma de evitar que el navegador tenga que hacer un viaje de ida y vuelta al servidor para obtener una imagen del asterisco. De esta manera, puede ajustar los asteriscos, los ejemplos aquí están en un ángulo inusual, puede editar esto ya que el ícono SVG anterior es completamente legible. El cuadro de vista también se puede modificar para colocar el asterisco encima o debajo del centro.