Button-group
Grupo segmentado de botones con selección, foco y tamaños múltiples.
Vista Previa
1. Dos botones (Default)
2. Tres botones (Default)
Solo los extremos poseen los radios redondeados.
3. Escalabilidad (4 o más botones)
4. Botón Seleccionado (Extremo derecho)
Indicado semánticamente mediante aria-pressed="true".
5. Foco Visible sobre un botón
Simulación del estado focus mediante clase utilitaria para visualización.
6. Tamaño SM
Agrega la clase .button-group--sm al contenedor principal.
7. Botón Seleccionado en posición intermedia
8. Estado de foco sobre elemento seleccionado
Mantiene el color de selección sin perder la silueta del foco visible.
# Button group
Un Grupo de botones (*Button group*) permite a las personas usuarias seleccionar una única opción de un conjunto interrelacionado o ejecutar acciones hermanas que afecten a la misma zona de la interfaz, visualizándose como una estructura compacta y segmentada.
Cuándo usarlo
- Para alternar la vista de un listado de información (ej. Vista Mapa vs. Vista Lista). - Como control de segmentación que filtre el contenido actual. - Cuando hay 2 o más botones (hasta un límite razonable como 5) que conforman un mismo selector visual único.Cuándo no usarlo
- Para presentar los botones de confirmación/cancelación de un formulario general. (En ese caso, usar botones separados con el espaciado y alineación estándar). - Si el número de opciones es muy grande e impredecible (usar un selectorSelect estándar).
- Para navegación global jerárquica (usar Pestañas o Side Navigation).
Semántica Base
El componente se implementa base con la semántica nativa interactiva: - Las acciones individuales son<button type="button">.
- El contenedor es <div role="group"> y dispone de aria-label para explicar a los lectores de pantalla el propósito conjunto de los botones ("Selector de visualización", "Modo", etc.).
- La opción activa o seleccionada se rige mediante el atributo aria-pressed="true".
*Nota sobre interacciones:* Por defecto este componente proporciona la capa estructural y de estilos (HTML/CSS). Si los botones deben comportarse como un *Radio group* exclusivo (donde seleccionar uno desactiva los otros), dicho comportamiento lógico requerirá inyección de JavaScript nativo en el producto final para conmutar el atributo aria-pressed.
Trazado y Lógica de Extremos Redondeados
El diseño estipula que el grupo mantenga los bordes exteriores redondeados pero los segmentos intermedios queden planos. - Esto se logra de forma inteligente y mantenible vía CSS puro mediante:first-child y :last-child.
- Para evitar "bordes dobles" internos que sumarían 2px de contorno entre dos botones contiguos, el sistema aplica un margen negativo (margin-left: -1px;) en los hijos que se auto-solapa limpiamente escalando hacia N botones sin excepciones.
Tamaños Soportados
La visualización puede ajustarse con el modificador.button-group--sm sobre el contenedor principal, lo cual afectará automáticamente al relleno, altura y topografía de todos los botones descendientes, conservando la lógica visual y de foco sin romper las reglas de segmentación del grupo.
- Default: Altura min de 53px y tipografía 18px.
- SM: Altura min de 35px y tipografía 16px.
Estados Visuales
- Default: Fondo blanco, borde y tipografía oscuros. - Hover: Efecto transicional sin alterar la solidez base de bordes y fondo. - Focus: Eleva elz-index localmente y aplica un doble contorno (halo de accesibilidad blanco/azul claro) superponiéndose incluso a los botones vecinos, además de un sutil fondo de color azul claro.
- Selected: Toma el color de fondo primario sólido (#d82b0f), texto en color blanco e incrementa el grosor tipográfico (font-weight: 700) permitiendo una distinción que no solo recae en el contraste de color, favoreciendo la accesibilidad universal.
HTML
<div class="button-group" role="group" aria-label="Selector de opciones">
<button type="button" class="button-group__button" aria-pressed="true">Opción A</button>
<button type="button" class="button-group__button">Opción B</button>
</div>