<div class="rtds-input-field rtds-select-field rtds-select-field--lg">
<label for="selectId" class="rtds-input-field__label">
Text label
</label>
<div class="rtds-select rtds-select--lg">
<select id="selectId" class="">
<option value="1">Text</option>
<option value="2">Option 1</option>
<option value="3">Option 2</option>
<option value="4">Option 3</option>
<option value="5">Option 4</option>
<option value="6">Option 5</option>
</select>
</div>
</div>
{% extends '@select-field' %}
{% block classes %}{{ super() }} rtds-select-field--lg{% endblock %}
{
"label": "Text label",
"selectId": "selectId",
"variant": "--lg"
}
/**
* SELECT COMPONENT
*
*
*/
.rtds-select-field:where(:not(.rtds-field-inline)) {
gap: var(--spacing-1);
}
/* Sizes */
:where(.rtds-select-field--sm) .rtds-select select {
height: var(--spacing-8);
background-position: right 0.25rem center;
padding-top: var(--spacing-0-5);
padding-bottom: var(--spacing-0-5);
padding-left: var(--spacing-2);
padding-right: var(--spacing-8);
}
:where(.rtds-select-field--lg) select {
height: var(--spacing-14);
background-position: right 0.75rem center;
padding-left: var(--spacing-3);
padding-right: var(--spacing-12);
padding-top: var(--spacing-3);
padding-bottom: var(--spacing-3);
}
:where(.rtds-select-field--sm) .rtds-input-field__label {
font-size: var(--fontsize-text-xs);
}
:where(.rtds-select-field--lg) .rtds-input-field__label {
font-size: var(--fontsize-text-lg);
}
/**
* SELECT COMPONENT
*
*
*/
@layer components {
.rtds-select-field:where(:not(.rtds-field-inline)) {
@apply rtds-gap-1;
}
/* Sizes */
:where(.rtds-select-field--sm) .rtds-select select {
@apply rtds-h-8 rtds-py-0.5 rtds-pl-2 rtds-pr-8 rtds-bg-[right_0.25rem_center];
}
:where(.rtds-select-field--lg) select {
@apply rtds-h-14 rtds-py-3 rtds-pl-3 rtds-pr-12 rtds-bg-[right_0.75rem_center];
}
:where(.rtds-select-field--sm) .rtds-input-field__label {
@apply rtds-text-xs;
}
:where(.rtds-select-field--lg) .rtds-input-field__label {
@apply rtds-text-lg;
}
}
Componente composito per campi di selezione. Include un componente select personalizzabile con supporto completo per l’accessibilità e la validazione.
Il componente Select Field gestisce:
default: Select baselight: Select con tema chiaroinline: Select con layout inlinesm: Select di dimensione piccolalg: Select di dimensione grandeis-required: Select obbligatoriohas-error-markup: Select con markup per la gestione degli errorihas-description: Select con descrizionehas-error: Select con stato di erroredisabled: Select non disponibile — escluso dal tab order, non inviato nel form; label appare mutedContesto di sviluppo Fractal/Nunjucks — Questa sezione riguarda esclusivamente i parametri del context
.config.ymlusati durante lo sviluppo nella libreria. Non descrive attributi HTML o proprietà da usare nei temi, CMS o ambienti di implementazione: per quello, fare riferimento alla sezione Esempi di utilizzo.
label (stringa, obbligatorio): Testo dell’etichetta del camposelectId (stringa, obbligatorio): ID univoco per il campo selectlabelClasses (stringa, opzionale): Classi CSS aggiuntive per l’etichettahiddenLabel (booleano, opzionale): Se true, nasconde visivamente l’etichetta (rimane disponibile per screen reader)selectShortLabel (stringa, opzionale): Versione abbreviata dell’etichetta per la gestione degli errori JavaScriptgap (stringa, opzionale): Personalizzazione dello spazio interno (default: gap-1)selectPadding (stringa, opzionale): Override del padding del selectselectBorder (stringa, opzionale): Override del bordo del selectselectRadius (stringa, opzionale): Override del border-radius del selectselectClasses (stringa, opzionale): Classi CSS aggiuntive per il selectinline (booleano, opzionale): Se true, attiva il layout inlineselectPlaceholder (stringa, opzionale): Testo del placeholder (da usare con moderazione)selectRequired (booleano, opzionale): Se true, il campo è obbligatorioselectIconPlaceholder (stringa, opzionale): ID dell’icona decorativa a sinistra del selectselectIconAlert (booleano, opzionale): Se true, mostra l’icona di errore (⚠) a sinistra della freccia nativa del browserselectAriaDescribedBy (stringa, opzionale): ID dell’elemento che descrive il camposelectDescription (stringa, opzionale): Descrizione testuale del camposelectAriaInvalid (booleano, opzionale): Indica se il campo contiene un erroreselectHasErrorControl (booleano, opzionale): Se il campo necessita di validazioneerrorDescription (stringa, opzionale): Descrizione dell’erroreselectHasError (booleano, opzionale): Stile di errore per il selectselectDisabled (booleano, opzionale): Se true, aggiunge disabled al select e la classe rtds-input-field--disabled al wrapper — label e select appaiono mutedNota:
<select>non supportareadonly. Per un select “visibile ma non modificabile”, usaredisabledcon un<input type="hidden">separato per inviare il valore nel form.
Livello AA — criteri pertinenti:
<label> è sempre associata al <select> tramite for / id; i messaggi di errore e le descrizioni sono collegati tramite aria-describedbyaria-invalid e annunciati con aria-live="assertive"<label> visibile o nascosta disponibile per screen readeraria-required, aria-describedby e aria-invalid comunicano lo stato del campo (gestiti sul <select> interno)<div class="rtds-input-field rtds-select-field"> contenente una <label> e il componente @select annidato<label> è associata al select tramite for="" e rimane disponibile anche quando nascosta visivamente tramite rtds-sr-only<abbr title="obbligatorio">*</abbr> nella label<span aria-live="assertive"> per garantire l’annuncio immediato agli screen reader| Attributo | Valori | Condizione |
|---|---|---|
aria-required |
"true" |
quando selectRequired è true (gestito sul <select> interno) |
aria-describedby |
ID del messaggio di errore e/o descrizione | quando presenti errori o descrizione (gestito sul <select> interno) |
aria-invalid |
"true" |
quando selectAriaInvalid è true (gestito sul <select> interno) |
aria-live |
"assertive" |
sullo span del messaggio di errore |
hiddenLabel: true), rimane disponibile per screen reader tramite rtds-sr-onlyaria-live="assertive"*) è leggibile tramite l’attributo title="obbligatorio" sull’<abbr><!-- Esempio base -->
<div class="rtds-input-field rtds-select-field rtds-gap-1">
<label for="my-select" class="rtds-input-field__label">Scegli un'opzione</label>
<select id="my-select" name="my-select">
<option value="">Seleziona...</option>
<option value="1">Opzione 1</option>
<option value="2">Opzione 2</option>
</select>
</div>
<!-- Esempio obbligatorio con errore -->
<div class="rtds-input-field rtds-select-field rtds-gap-1 rtds-input-field--has-error">
<label for="required-select" class="rtds-input-field__label">
Regione <abbr title="obbligatorio">*</abbr>
</label>
<select id="required-select" name="region"
aria-required="true" aria-invalid="true" aria-describedby="region-error">
<option value="">Seleziona...</option>
</select>
<span class="rtds-input-field__hint">
<span id="region-error" aria-live="assertive" class="rtds-input-field__error">
Selezionare una regione
</span>
</span>
</div>