Componente web personalizado para crear menús desplegables con funcionalidad de selección y opciones de personalización completa. Perfecto para formularios, filtros y selección de opciones.
<!-- Importar el componente -->
<script src="select-component/index.js"></script>
<link rel="stylesheet" href="select-component/index.css">
<!-- Implementación básica -->
<select-component>
<details class="select-component" data-select-details>
<summary class="select-component-button">
<span data-select-label>Selecciona una categoría</span>
<span class="select-component-button-asset">
<svg>...</svg>
</span>
</summary>
<ul class="select-component-dropdown">
<li data-index="0" data-value="electronica" data-select-option>
Electrónica
</li>
<li data-index="1" data-value="ropa" data-select-option>
Ropa
</li>
<!-- Más opciones... -->
</ul>
</details>
</select-component>
<!-- Select con cierre automático -->
<select-component data-close-dropdown-after-selected>
<details class="select-component" data-select-details>
<summary class="select-component-button">
<span data-select-label>Selecciona un país</span>
<span class="select-component-button-asset">
<svg>...</svg>
</span>
</summary>
<ul class="select-component-dropdown">
<li data-index="0" data-value="es" data-select-option>
España
</li>
<!-- Más opciones... -->
</ul>
</details>
</select-component>
<!-- Select con opción preseleccionada -->
<select-component>
<details class="select-component" data-select-details>
<summary class="select-component-button">
<span data-select-label>Nivel de experiencia</span>
<span class="select-component-button-asset">
<svg>...</svg>
</span>
</summary>
<ul class="select-component-dropdown">
<li data-index="0" data-value="principiante" data-select-option>
Principiante
</li>
<li class="selected" data-index="1" data-value="intermedio"
data-select-option>
Intermedio
</li>
<!-- Más opciones... -->
</ul>
</details>
</select-component>
/* Estilo Material */
.select-component-page .select-component.select-material {
--select-padding: 12px 16px;
--select-border: none;
--select-border-radius: 4px;
--select-background-color: rgba(255, 255, 255, 0.06);
--select-dropdown-border: none;
--select-dropdown-border-radius: 4px;
--select-dropdown-box-shadow: 0 3px 8px rgba(0, 0, 0, 0.2);
}
/* Estilo Redondeado */
.select-component-page .select-component.select-rounded {
--select-border-radius: 50px;
--select-padding: 10px 20px;
--select-dropdown-border-radius: 8px;
}
/* Estilo Oscuro */
.select-component-page .select-component.select-dark {
--select-background-color: rgba(0, 0, 0, 0.4);
--select-border: 1px solid rgba(255, 255, 255, 0.1);
--select-border-radius: 4px;
--select-dropdown-background-color: #333;
--select-dropdown-border: 1px solid rgba(255, 255, 255, 0.1);
--select-dropdown-border-radius: 4px;
--select-dropdown-option-selected-background-color:
rgba(233, 30, 99, 0.3);
}
<!-- Ejemplo con estilo Material -->
<select-component>
<details class="select-component select-material"
data-select-details>
<!-- Contenido del select... -->
</details>
</select-component>
<!-- Ejemplo con estilo Redondeado -->
<select-component>
<details class="select-component select-rounded"
data-select-details>
<!-- Contenido del select... -->
</details>
</select-component>
<!-- Ejemplo con estilo Oscuro -->
<select-component>
<details class="select-component select-dark"
data-select-details>
<!-- Contenido del select... -->
</details>
</select-component>