Saltar al contenido principal

Select

Paquete: @tiendana/web-foundation

Estilos del selector tdn-select: el campo con sus valores seleccionados y la lista desplegable con búsqueda, agrupación y selección múltiple. En Angular lo renderiza el componente TdnSelect; esta página documenta las clases y variables CSS que lo estilizan.

Características​

✅ Selección única o múltiple - Valores como texto o como fichas (tokens)
✅ Lista fuera del formulario - Se aloja en document.body, con posición fija
✅ Ancho configurable - --tdn-select-dropdown-width ensancha la lista respecto al campo
✅ Hoja a pantalla completa en móvil - Activada por .tdn-select__dropdown-list--responsive
✅ Búsqueda, agrupación y selección total - Con sus propios elementos BEM

Demo​

El campo cerrado y la lista abierta. En producción la lista tiene position: fixed y la coloca el componente; en esta demo se fuerza position: static solo para verla junto al campo.

Cargando demo...
Ver código

Ancho de la lista​

El componente declara el ancho de la lista como var(--tdn-select-dropdown-width, var(--tdn-select-trigger-width, auto)):

PropiedadQuién la escribeDescripción
--tdn-select-trigger-widthEl componente, en cada posicionamientoAncho del campo en px. Es el ancho por defecto de la lista
--tdn-select-dropdown-widthTú, en el tdn-select o en cualquier ancestroAncho propio de la lista, por ejemplo min(420px, 90vw). El componente lee el valor calculado del host y lo copia a la lista
<tdn-select formControlName="product" [data]="products" simple labelKey="name"
style="--tdn-select-dropdown-width: min(420px, 90vw)" />

Las variantes .document-input y .cellphone de Form Element ya fijan este valor en 200px y 300px.

No fijes el ancho en línea

Un width en línea o con !important sobre la lista anula las dos propiedades. Dimensiona siempre con --tdn-select-dropdown-width.

La lista no vive dentro del select

Mientras está abierta, la lista se mueve a document.body. Un selector que la alcance a través del select o de su contexto (.mis-filtros .tdn-select__dropdown-list) no coincide, y las propiedades CSS personalizadas, salvo --tdn-select-dropdown-width, no se heredan desde donde está el select. Estila la lista con un selector que se sostenga solo.

Hoja a pantalla completa​

En ventanas de hasta 600px de ancho, la lista con la clase .tdn-select__dropdown-list--responsive se muestra como hoja a pantalla completa:

  • Ocupa todo el viewport (top: 0, left: 0, width y height al 100%) con z-index: var(--z-index-modal).
  • Se muestra el botón de volver (__list-filter__icon-back, o __list-container__simple-close cuando no hay búsqueda).
  • La lista interior usa toda la altura disponible.

TdnSelect agrega .tdn-select__dropdown-list--responsive salvo que se use noResponsive o dropdownMobileFixed: false; en ese caso el host recibe .tdn-select--no-responsive. La clase requiere @tiendana/web-foundation 0.5.4 o superior: con una versión anterior no estiliza nada.

Referencia de clases​

Campo​

ClaseDescripción
.tdn-selectHost del selector (position: relative)
.tdn-select--activeLa lista está abierta
.tdn-select--disabledDeshabilitado: opacidad 0.5 y cursor not-allowed
.tdn-select--multipleSelección múltiple: controles en columna
.tdn-select--controls-columnFuerza los controles en columna
.tdn-select--no-responsiveDesactiva la hoja a pantalla completa
.tdn-select--ontopLa lista se abrió hacia arriba
.tdn-select__selected-listTrigger: valores y controles
.tdn-select__selected-list__valuesTexto del valor seleccionado
.tdn-select__selected-list__values__tokenFicha de un valor en selección múltiple (fondo verde neón #C6F54F resuelto en compilación, no tematizable con --color-green-neon)
.tdn-select__selected-list__values__token__labelTexto de la ficha
.tdn-select__selected-list__values__token__removeBotón para quitar una ficha
.tdn-select__selected-list__countplaceholderContador +N de valores ocultos
.tdn-select__selected-list__controls__clear-allBotón para limpiar la selección
.tdn-select__selected-list__controls__chevronChevron
.tdn-select__selected-list__controls__chevron--rotateChevron rotado (lista abierta)

Lista​

ClaseDescripción
.tdn-select__dropdown-listPanel de la lista: position: fixed, z-index: var(--z-index-dropdown)
.tdn-select__dropdown-list--ontopLa lista se abrió por encima del campo
.tdn-select__dropdown-list--single-select-modeModo de selección única (el check usa --select-check-color)
.tdn-select__dropdown-list--responsiveActiva la hoja a pantalla completa en móvil
.tdn-select__dropdown-list__list-filterBarra de búsqueda (con __icon-back, __icon-search y __icon-clear)
.tdn-select__dropdown-list__select-allFila de seleccionar todo
.tdn-select__dropdown-list__list-containerContenedor de la lista
.tdn-select__dropdown-list__list-container__listZona con scroll
.tdn-select__dropdown-list__list-container__list__groupEncabezado de grupo (sticky)
.tdn-select__dropdown-list__list-container__list__itemOpción
.tdn-select__dropdown-list__list-container__list__item--selectedOpción seleccionada
.tdn-select__dropdown-list__list-container__list__item--disabledOpción deshabilitada
.tdn-select__dropdown-list__list-container__list__loadingFila de carga en paginación remota
.tdn-select__dropdown-list__list-messageMensaje de lista vacía
.highlighted-textFragmento que coincide con la búsqueda (--color-error)

Propiedades CSS personalizadas​

Todas son opcionales y tienen un valor por defecto en la hoja.

PropiedadDescripción
--select-bgFondo de la lista
--select-shadow-colorColor de la sombra de la lista
--select-borderColor de los separadores de la lista
--select-hover-colorFondo de la opción en hover
--select-selected-bg-colorFondo de la opción seleccionada
--select-base-colorColor del checkbox
--select-check-colorColor del check en selección única
--select-group-bg-color, --select-group-padding, --select-group-font-weightAspecto de los encabezados de grupo

Ver También​