Стилизация подкатегорий каталога платьев

This commit is contained in:
Konstantin
2026-05-30 11:23:30 +03:00
parent 1da999779b
commit a7cbc801a4
3 changed files with 642 additions and 486 deletions
@@ -2,6 +2,7 @@
--color-secondary: #D8CECB;
--color-gray: #EEEEEE;
--color-dark-gray: #5c5950;
--swiper-theme-color: var(--bs-dark) !important;
}
body{
@@ -152,6 +153,192 @@ header .menu>li:last-child {
border-radius: 10px !important;
}
.subcategory-showcase {
background: linear-gradient(180deg, #f8f6f5 0, #fff 100%);
color: #14142b;
}
.subcategory-showcase__heading {
max-width: 760px;
margin: 0 auto 31px;
text-align: center;
}
.subcategory-showcase__eyebrow {
display: block;
color: var(--color-dark-gray);
font-size: 11px;
letter-spacing: 0.18em;
line-height: 1.4;
text-transform: uppercase;
}
.subcategory-showcase__heading h1,
.subcategory-showcase__heading h2 {
margin: 10px 0 0;
color: #14142b;
font-size: clamp(30px, 3.2vw, 46px);
font-weight: 400;
line-height: 1.12;
}
.subcategory-slider {
padding: 3px 2px 0;
}
.subcategory-card {
display: block;
min-width: 0;
color: #14142b;
}
.subcategory-card:hover {
color: #14142b;
}
.subcategory-card__image {
position: relative;
display: block;
aspect-ratio: 1;
overflow: hidden;
background: #ede9e7;
}
.subcategory-card__image::after {
position: absolute;
inset: 10px;
border: 1px solid rgba(255, 255, 255, 0.72);
content: "";
pointer-events: none;
transition: inset 0.35s, border-color 0.35s;
}
.subcategory-card__image img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s;
}
.subcategory-card__number {
position: absolute;
right: 10px;
bottom: 10px;
min-width: 38px;
padding: 6px 7px 5px;
background: rgba(255, 255, 255, 0.92);
color: #14142b;
font-size: 11px;
letter-spacing: 0.12em;
line-height: 1;
text-align: center;
}
.subcategory-card__body {
display: flex;
gap: 14px;
align-items: center;
justify-content: space-between;
padding: 15px 1px 0;
}
.subcategory-card__title {
font-size: 17px;
line-height: 1.3;
}
.subcategory-card__arrow {
display: inline-flex;
flex: 0 0 auto;
align-items: center;
justify-content: center;
transition: transform 0.25s;
}
.subcategory-card__arrow svg,
.subcategory-slider__button svg {
fill: none !important;
stroke: currentColor;
stroke-linecap: round;
stroke-linejoin: round;
}
.subcategory-card:hover .subcategory-card__image img {
transform: scale(1.055);
}
.subcategory-card:hover .subcategory-card__image::after {
inset: 15px;
border-color: rgba(255, 255, 255, 0.92);
}
.subcategory-card:hover .subcategory-card__arrow {
transform: translateX(4px);
}
.subcategory-slider__controls {
display: flex;
gap: 16px;
align-items: center;
justify-content: center;
padding-top: 32px;
}
.subcategory-slider .swiper-pagination {
position: static;
width: auto;
min-width: 56px;
transform: none;
}
.subcategory-slider .swiper-pagination-bullet {
margin: 0 4px;
}
.subcategory-slider__button {
position: static;
width: 42px;
height: 42px;
margin: 0;
border: 1px solid rgba(20, 20, 43, 0.16);
background: transparent;
color: #14142b;
transition: background-color 0.2s, border-color 0.2s, color 0.2s;
}
.subcategory-slider__button::after {
display: none;
}
.subcategory-slider__button:hover {
background: #14142b;
border-color: #14142b;
color: #fff;
}
.subcategory-slider__button.swiper-button-disabled {
opacity: 0.32;
}
@media (max-width: 767px) {
.subcategory-showcase__heading {
margin-bottom: 24px;
}
.subcategory-showcase__heading h1,
.subcategory-showcase__heading h2 {
font-size: 31px;
}
.subcategory-card__title {
font-size: 16px;
}
.subcategory-slider__controls {
padding-top: 25px;
}
}
.bg-dominik{
background-color: var(--color-secondary);
}
@@ -1,68 +1,92 @@
<section class="subcategories py-5" style="-swiper-pagination-color: var(--color-secondary);--swiper-theme-color: var(--color-secondary);">
<section class="subcategories subcategory-showcase py-5">
<div class="container-fluid">
<div class="section-heading py-3 text-center">
<h3 class="heading">{{ module_name }}</h3>
<div class="subcategory-showcase__heading">
<span class="subcategory-showcase__eyebrow">Каталог салона</span>
<h2>{{ module_name }}</h2>
</div>
<div class="swiper swiper-{{ random }} pb-5">
{% block subcategories %}
{% set slider_id = random|default('category-list') %}
<div id="subcategory-slider-{{ slider_id }}" class="swiper subcategory-slider">
<div class="swiper-wrapper">
{% for category in categories %}
<div class="swiper-slide" style="width: auto">
<a href="{{ category.href }}" class="d-block category-item text-center">
<img src="{{ category.thumb }}" alt="{{ category.name }}" class="rounded-pill">
<div class="text-center mt-3">{{ category.name }}</div>
<div class="swiper-slide">
<a href="{{ category.href }}" class="subcategory-card">
<span class="subcategory-card__image">
<img src="{{ category.thumb }}" alt="{{ category.name }}" loading="lazy">
<span class="subcategory-card__number">{% if loop.index < 10 %}0{% endif %}{{ loop.index }}</span>
</span>
<span class="subcategory-card__body">
<span class="subcategory-card__title">{{ category.name }}</span>
<span class="subcategory-card__arrow" aria-hidden="true">
<svg width="18" height="12" viewBox="0 0 18 12">
<path d="M0 6h16M11 1l5 5-5 5"></path>
</svg>
</span>
</span>
</a>
</div>
</div>
{% endfor %}
</div>
<div class="swiper-pagination"></div>
<div class="swiper-button-next d-none d-lg-flex" style="top:33%"></div>
<div class="swiper-button-prev d-none d-lg-flex" style="top:33%"></div>
<div class="subcategory-slider__controls">
<button class="swiper-button-prev subcategory-slider__button" type="button" aria-label="Предыдущие категории">
<svg width="18" height="12" viewBox="0 0 18 12" aria-hidden="true">
<path d="M18 6H2m5 5L2 6l5-5"></path>
</svg>
</button>
<div class="swiper-pagination"></div>
<button class="swiper-button-next subcategory-slider__button" type="button" aria-label="Следующие категории">
<svg width="18" height="12" viewBox="0 0 18 12" aria-hidden="true">
<path d="M0 6h16m-5-5 5 5-5 5"></path>
</svg>
</button>
</div>
</div>
<script>
var swiper = new Swiper(".swiper-{{ random }}", {
loop: true,
spaceBetween: 10,
// Responsive breakpoints
breakpoints: {
// when window width is >= 320px
320: {
slidesPerView: 2,
spaceBetween: 50,
},
// when window width is >= 480px
575: {
slidesPerView: 3,
spaceBetween: 50,
},
// when window width is >= 640px
768: {
slidesPerView: 3,
spaceBetween: 50,
},
992: {
slidesPerView: 4,
(function () {
var slider = document.getElementById('subcategory-slider-{{ slider_id }}');
},
1200: {
slidesPerView: 4,
if (!slider || typeof Swiper === 'undefined') {
return;
}
new Swiper(slider, {
grabCursor: true,
rewind: true,
slidesPerView: 1.35,
spaceBetween: 14,
watchOverflow: true,
breakpoints: {
480: {
slidesPerView: 2.15,
spaceBetween: 16
},
768: {
slidesPerView: 3,
spaceBetween: 18
},
992: {
slidesPerView: 4,
spaceBetween: 20
},
1280: {
slidesPerView: 5,
spaceBetween: 22
}
},
pagination: {
el: slider.querySelector('.swiper-pagination'),
clickable: true
},
navigation: {
nextEl: slider.querySelector('.swiper-button-next'),
prevEl: slider.querySelector('.swiper-button-prev')
}
},
pagination: {
el: ".swiper-{{ random }} .swiper-pagination",
},
navigation: {
nextEl: ".swiper-{{ random }} .swiper-button-next",
prevEl: ".swiper-{{ random }} .swiper-button-prev",
},
});
});
})();
</script>
</div>
{% endblock %}
</div>
</section>
@@ -1,69 +1,14 @@
{{ header }}
{{ content_top }}
<section class="subcategories {% if categories %}py-5{% else %}pt-4{% endif %}" style="-swiper-pagination-color: var(--color-secondary);--swiper-theme-color: var(--color-secondary);">
<section class="subcategories subcategory-showcase subcategory-showcase--catalog {% if categories %}py-5{% else %}pt-4{% endif %}">
<div class="container-fluid">
<div class="section-heading py-3 text-center">
<h3 class="heading">{{ heading_title }}</h3>
<div class="subcategory-showcase__heading">
<span class="subcategory-showcase__eyebrow">{% if categories %}Выберите направление{% else %}Каталог салона{% endif %}</span>
<h1>{{ heading_title }}</h1>
</div>
{% if categories %}
<div class="swiper swiper-category-list pb-5 swiper-initialized swiper-horizontal swiper-pointer-events">
<div class="swiper-wrapper">
{{ block('subcategories', 'dominik/template/extension/module/subcategory.twig') }}
{% for category in categories %}
<div class="swiper-slide">
<a href="{{ category.href }}" class="d-block category-item text-center">
<img src="{{ category.thumb }}" alt="Открытые плечи" class="rounded-pill">
<div class="text-center mt-3">{{ category.name }}</div>
</a>
</div>
{% endfor %}
</div>
<div class="swiper-pagination"></div>
<div class="swiper-button-next d-none d-lg-flex" style="top:33%"></div>
<div class="swiper-button-prev d-none d-lg-flex" style="top:33%"></div>
</div>
<script>
var swiper = new Swiper(".swiper-category-list", {
loop: true,
spaceBetween: 10,
// Responsive breakpoints
breakpoints: {
// when window width is >= 320px
320: {
slidesPerView: 2,
spaceBetween: 50,
},
// when window width is >= 480px
575: {
slidesPerView: 3,
spaceBetween: 50,
},
// when window width is >= 640px
768: {
slidesPerView: 3,
spaceBetween: 50,
},
992: {
slidesPerView: 4,
},
1200: {
slidesPerView: 4,
}
},
pagination: {
el: ".swiper-category-list .swiper-pagination",
},
navigation: {
nextEl: ".swiper-category-list .swiper-button-next",
prevEl: ".swiper-category-list .swiper-button-prev",
},
});
</script>
{% endif %}
</div>
</section>