Patrones Índice de páginas
- Cómo pedimos información
- Cómo mostramos información
- Ayudar a resolver
- Páginas y flujos
Domicilio postal
Cómo pedimos información
Calle, provincia y municipio.
Mostrar código del ejemplo: includes/_pattern.formularios-direccion-postal.njk
Contenido
Nunjucks macro del ejemplo: includes/_pattern.formularios-direccion-postal.njk
{% from "components/input/_macro.input.njk" import componentInput %}
{% from "components/select/_macro.select.njk" import componentSelect %}
<fieldset>
<legend class="sr-only">Domicilio postal</legend>
<div class="grid lg:grid-cols-4 gap-x-4">
{{ componentSelect({
"id": "select-tipo-via",
"name": "tipo-via",
"classes": "lg:w-full",
"label": {
"text": "Tipo de vía"
},
"items": [
{
"value": 1,
"text": "Calle",
"selected": true
},
{
"value": 2,
"text": "Paseo"
},
{
"value": 3,
"text": "Plaza"
},
{
"value": 4,
"text": "Avenida"
}
]
}) }}
{{ componentInput({
"formGroup": {
"classes": "lg:col-span-3"
},
"label": {
"text": "Vía"
},
"id": "input-nombre-via",
"name": "nombre-via",
"classes": "w-full",
"autocomplete": "address-line1"
}) }}
</div>
<div class="grid lg:grid-cols-4 gap-x-4">
<div class="lg:col-span-2 grid grid-cols-4 gap-x-4">
{{ componentInput({
"label": {
"text": "Número"
},
"id": "input-numero",
"name": "numero",
"classes": "w-full"
}) }}
{{ componentInput({
"label": {
"text": "Escalera"
},
"id": "input-escalera",
"name": "escalera",
"classes": "w-full"
}) }}
{{ componentInput({
"label": {
"text": "Piso"
},
"id": "input-piso",
"name": "piso",
"classes": "w-full"
}) }}
{{ componentInput({
"label": {
"text": "Puerta"
},
"id": "input-puerta",
"name": "puerta",
"classes": "w-full"
}) }}
</div>
{{ componentInput({
"formGroup": {
"classes": "lg:col-span-2"
},
"label": {
"text": "Indicaciones adicionales"
},
"id": "input-indicaciones",
"name": "indicaciones",
"classes": "w-full",
"autocomplete": "address-line2"
}) }}
</div>
<div class="grid lg:grid-cols-5 gap-x-4">
{{ componentInput({
"label": {
"text": "Código Postal"
},
"id": "input-cpostal",
"name": "cpostal",
"classes": "w-44 lg:w-full",
"autocomplete": "postal-code"
}) }}
{{ componentSelect({
"formGroup": {
"classes": "lg:col-span-2"
},
"id": "select-provincia",
"name": "provincia",
"classes": "w-full",
"label": {
"text": "Provincia"
},
"items": [
{
"value": 0,
"text": "Selecciona una opción",
"selected": true,
"disabled": true,
"hidden": true
},
{
"value": 1,
"text": "Option 1"
},
{
"value": 2,
"text": "Option 2"
},
{
"value": 3,
"text": "Option 3"
}
]
}) }}
{{ componentSelect({
"formGroup": {
"classes": "lg:col-span-2"
},
"id": "select-municipio",
"name": "municipio",
"classes": "w-full",
"label": {
"text": "Municipio"
},
"items": [
{
"value": 0,
"text": "Selecciona una opción",
"selected": true,
"disabled": true,
"hidden": true
},
{
"value": 1,
"text": "Option 1"
},
{
"value": 2,
"text": "Option 2"
},
{
"value": 3,
"text": "Option 3"
}
],
"disabled": true
}) }}
</div>
</fieldset>
HTML del ejemplo: includes/_pattern.formularios-direccion-postal.njk
<fieldset>
<legend class="sr-only">Domicilio postal</legend>
<div class="grid lg:grid-cols-4 gap-x-4">
<!-- select -->
<div class="c-form-group">
<!-- label -->
<label class="block" for="select-tipo-via">Tipo de vía</label>
<!-- /label -->
<select class="c-select block mt-sm transition duration-150 ease-in-out border-black rounded font-semibold focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base lg:w-full" id="select-tipo-via" name="tipo-via">
<option value="1" selected>Calle</option>
<option value="2">Paseo</option>
<option value="3">Plaza</option>
<option value="4">Avenida</option>
</select>
</div>
<!-- /select -->
<!-- input -->
<div class="c-form-group lg:col-span-3">
<!-- label -->
<label class="block" for="input-nombre-via">Vía</label>
<!-- /label -->
<input class="c-input block mt-sm border-black rounded font-semibold placeholder-neutral-dark focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base w-full" id="input-nombre-via" name="nombre-via" type="text" autocomplete="address-line1">
</div>
<!-- /input -->
</div>
<div class="grid lg:grid-cols-4 gap-x-4">
<div class="lg:col-span-2 grid grid-cols-4 gap-x-4">
<!-- input -->
<div class="c-form-group">
<!-- label -->
<label class="block" for="input-numero">Número</label>
<!-- /label -->
<input class="c-input block mt-sm border-black rounded font-semibold placeholder-neutral-dark focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base w-full" id="input-numero" name="numero" type="text">
</div>
<!-- /input -->
<!-- input -->
<div class="c-form-group">
<!-- label -->
<label class="block" for="input-escalera">Escalera</label>
<!-- /label -->
<input class="c-input block mt-sm border-black rounded font-semibold placeholder-neutral-dark focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base w-full" id="input-escalera" name="escalera" type="text">
</div>
<!-- /input -->
<!-- input -->
<div class="c-form-group">
<!-- label -->
<label class="block" for="input-piso">Piso</label>
<!-- /label -->
<input class="c-input block mt-sm border-black rounded font-semibold placeholder-neutral-dark focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base w-full" id="input-piso" name="piso" type="text">
</div>
<!-- /input -->
<!-- input -->
<div class="c-form-group">
<!-- label -->
<label class="block" for="input-puerta">Puerta</label>
<!-- /label -->
<input class="c-input block mt-sm border-black rounded font-semibold placeholder-neutral-dark focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base w-full" id="input-puerta" name="puerta" type="text">
</div>
<!-- /input -->
</div>
<!-- input -->
<div class="c-form-group lg:col-span-2">
<!-- label -->
<label class="block" for="input-indicaciones">Indicaciones adicionales</label>
<!-- /label -->
<input class="c-input block mt-sm border-black rounded font-semibold placeholder-neutral-dark focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base w-full" id="input-indicaciones" name="indicaciones" type="text" autocomplete="address-line2">
</div>
<!-- /input -->
</div>
<div class="grid lg:grid-cols-5 gap-x-4">
<!-- input -->
<div class="c-form-group">
<!-- label -->
<label class="block" for="input-cpostal">Código Postal</label>
<!-- /label -->
<input class="c-input block mt-sm border-black rounded font-semibold placeholder-neutral-dark focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base w-44 lg:w-full" id="input-cpostal" name="cpostal" type="text" autocomplete="postal-code">
</div>
<!-- /input -->
<!-- select -->
<div class="c-form-group lg:col-span-2">
<!-- label -->
<label class="block" for="select-provincia">Provincia</label>
<!-- /label -->
<select class="c-select block mt-sm transition duration-150 ease-in-out border-black rounded font-semibold focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base w-full" id="select-provincia" name="provincia">
<option value="0" selected disabled hidden>Selecciona una opción</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
</div>
<!-- /select -->
<!-- select -->
<div class="c-form-group lg:col-span-2">
<!-- label -->
<label class="block" for="select-municipio">Municipio</label>
<!-- /label -->
<select class="c-select block mt-sm transition duration-150 ease-in-out border-black rounded font-semibold focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base w-full" id="select-municipio" name="municipio" disabled>
<option value="0" selected disabled hidden>Selecciona una opción</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
</div>
<!-- /select -->
</div>
</fieldset>
Cuándo lo utilizamos #
- Tercer paso o bloque de un formulario de registro.
- En el formulario de datos del perfil personal.
Qué componentes utilizamos #
Nos basamos en una reticula de 4 columnas en escritorio y un espaciado de 16 px
para posicionar dos tipos de inputs:
En móviles los campos se apilan manteniendo las anchuras proporcionales a la longitud de los datos que se solicitan. Consulta el código para saber las clases y parámetros que utilizamos para la construcción de este patrón.
Accesibilidad #
- Los campos relacionados deben estar agrupados dentro de una etiqueta
<fieldset>
. Es obligatorio que tenga un elemento<legend>
que describa el bloque (Domicilio postal
). Es muy recomendable que el<legend>
esté visible pero, excepcionalmente, podría ocultarse con el estilo.sr-only
- El campo
Vía
debe tener el parámetroautocomplete= "address-line1"
. - El campo
Indicaciones adicionales
debe tener el parámetroautocomplete= "address-line2"
. - El campo
Código Postal
debe tener el parámetroautocomplete= "postal-code"
. - El selector
Municipio
se activa cuando se ha seleccionado una provincia. - Consulta la información sobre accesibilidad en formularios y en los componentes entrada de texto y selector.