Home Marcas - Bsale-IO/template-docs GitHub Wiki
Este componente está diseñado para mostrar un listado y una grilla de marcas en una página web, organizadas alfabéticamente y con soporte para imágenes y enlaces.
{% if brand_list.size > 0 %}
{% capture style %}
--cols-xl: 10;
--cols-lg: 8;
--cols-md: 6;
--cols-sm: 4;
--cols: 3;
{% endcapture %}
<div class="container">
<h2 class="bs-title-home pt-4">Todas las Marcas</h2>
<div class="accordion" id="brandAccordion">
{% assign sorted_brands = brand_list | sort: "br_name" %}
{% assign current_letter = "" %} <!-- Variable para la letra actual -->
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center" id="headingBrands">
<h2 class="mb-0">
<button class="btn btn-link text-left" type="button" data-toggle="collapse" data-target="#collapseBrands" aria-expanded="false" aria-controls="collapseBrands">
Listado de Marcas (A-Z)
</button>
</h2>
<button class="btn btn-sm btn-outline-primary" type="button" data-toggle="collapse" data-target="#collapseBrands" aria-expanded="false" aria-controls="collapseBrands">
+
</button>
</div>
<div id="collapseBrands" class="collapse" aria-labelledby="headingBrands" data-parent="#brandAccordion">
<div class="card-body">
<div class="container">
<div class="row">
{% for brand in sorted_brands %}
{% if brand.br_count > 0 %}
{% assign first_letter = brand.br_name | slice: 0, 1 | upcase %}
{% if first_letter != current_letter %}
<!-- Nueva letra -->
<div class="col-12">
<h3 class="brand-letter">{{ first_letter }}</h3>
</div>
{% assign current_letter = first_letter %}
{% endif %}
<div class="col-6 col-sm-4 col-md-3 col-lg-2 mb-2">
<a href="{{ brand.link }}" class="brand-name listado" title="{{ brand.br_name }}">
- {{ brand.br_name | capitalize }}
</a>
</div>
{% endif %}
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Grilla con imágenes -->
<div class="grid" style='{{ style }}'>
{% for brand in sorted_brands %}
{% if brand.br_count > 0 and brand.br_url_logo %}
<a class="bs-brands__item grilla p-2 mt-2" href="{{ brand.link }}" title="{{ brand.br_name }}">
<div class="bs-img-square brand-home">
<picture>
<img
{{ brand.br_url_logo | img_tag_attributes: 'S' }}
alt="{{ brand.br_name }}"
title="{{ brand.br_name }}"
loading="lazy">
</picture>
</div>
</a>
{% endif %}
{% endfor %}
</div>
</div>
{% endif %}
<script>
document.addEventListener("DOMContentLoaded", function () {
const toggleButtons = document.querySelectorAll('.btn-outline-primary[data-toggle="collapse"]');
toggleButtons.forEach(button => {
button.addEventListener("click", function () {
const isExpanded = this.getAttribute("aria-expanded") === "true";
this.textContent = isExpanded ? "+" : "-";
});
});
});
</script>
css - style-marcas.css
/********** Marcas Inicio ******************/
/* Estilos para el contenedor de las marcas */
.bs-brands.grilla {
display: grid;
gap: 16px; /* Ajustar el espaciado general */
place-items: center;
grid-template-columns: repeat(auto-fit, minmax(100px, 0.2fr));
justify-content: center;
}
/* Estilos para cada item de marca */
.bs-brands__item.grilla {
background: var(--element-bg);
display: block;
padding: 12px; /* Ajustar el padding interno */
border-radius: var(--default-border-radius);
position: relative;
overflow: hidden;
transition: transform 0.3s ease;
}
/* Efecto hover para cada item */
.bs-brands__item.grilla:hover {
transform: scale(1.05);
}
/* Efecto de superposición en hover */
.bs-brands__item.grilla::after {
content: "";
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: rgba(0, 0, 0, 0.125);
opacity: 0;
transition: all 0.25s ease;
}
.bs-brands__item.grilla:hover::after {
opacity: 1;
}
/* Estilos para la imagen dentro del item */
.bs-img-square.brand {
display: flex;
justify-content: center;
align-items: center;
height: 100px;
width: 100px;
}
/* Estilos para dispositivos móviles */
@media (max-width: 768px) {
.bs-brands.grilla {
gap: 12px; /* Espaciado más pequeño en móviles */
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); /* Más adaptativo */
}
.bs-brands__item.grilla {
padding: 8px; /* Reducir padding en pantallas pequeñas */
}
}
@media screen and (min-width:992px) {
.bs-brands.grilla {
grid-template-columns: repeat(auto-fit, minmax(100px, 0.2fr));
}
}
@media screen and (min-width:1200px) {
.bs-brands.grilla {
grid-template-columns: repeat(auto-fit, minmax(100px, 0.15fr));
}
}
/********** Home Marcas (hoja)******************/
.listado {
color: var(--body-txt-default-color);
}
.listado:hover {
color:var(--primary-color);
}
.accordion>.card>.card-header {
background-color: white;
}
.btn-outline-primary,
.btn-outline-primary:not(:disabled):not(.disabled):active{
background: var(--primary-color);
color: var(--primary-contrast);
border-color:var(--primary-color);
border-radius:100px;
padding: var(--btn-padding , 0.375rem 0.75rem )
}
.btn-outline-primary:hover,
.btn-outline-primary:not(:disabled):not(.disabled):active {
background: var(--primary-hover-color);
color: var(--primary-hover-contrast);
border-color:var(--primary-hover-color);
}
.bs-img-square.brand-home {
display: flex;
justify-content: center;
align-items: center;
height: auto;
width: auto;
}
Important
En el caso que la plantilla es antigua se deberá agregar a la hoja de estilo style-grid.css