Следующий
Предыдущий
Graphic design is the process of visual communication and problem-solving
Read more
It is a form of solution-based thinking with the intent of producing a constructive future result
Read article
Information architecture is the art and science of structuring and organizing information
Read more
Graphic design is the process of visual communication and problem-solving
Read more
It is a form of solution-based thinking with the intent of producing a constructive future result
Read article
Information architecture is the art and science of structuring and organizing information
Read more
Information architecture is the art and science of structuring and organizing information
Read more
Graphic design is the process of visual communication and problem-solving
Read more
Product 3
It is a form of solution-based thinking with the intent of producing a constructive future result
Read article
Product 2
Information architecture is the art and science of structuring and organizing information
Read more
Product 1
Graphic design is the process of visual communication and problem-solving
Read more
Product 3
It is a form of solution-based thinking with the intent of producing a constructive future result
Read article
Product 2
Information architecture is the art and science of structuring and organizing information
Read more
Инструкция
(показать)
/start
Слайдер создается из блока TE225, стандартная ширина блока 1160px изменяется на 100%. Отступ справа изменяется в стилях. Для базовой работы слайдера нужно задать блоку класс .uc-slider, вставить код 1 в начало сайта или head страницы в настройках, а код 2 после всех блоков в конец. Сделать стрелки-переключатели можно из любых элементов в нулевом блоке. Для этого нужно добавить им классы .swiper-prev и .swiper-next соответственно.

[ВАЖНО ДЛЯ ЗАЦИКЛЕННОГО СЛАЙДЕРА]
Если на экране будет выведено 3 слайда, а общее количество слайдов при этом будет не больше 4-ех нужно дублировать слайды, чтобы увеличить их количество. В противном случае слайдер может выдать ошибку и перестать работать.

[ЧТО ЗА max() В СТИЛЯХ]
Для того, чтобы стандартный блок расширялся так, словно на него распространяется автоскейл для всех размеров используется функция max. Первым значением указывается растяжимый размер, который меняется от ширины экрана. Вторым значением после запятой — минимальный размер элемента.
Пример:
font-size: max(2vw, 14px) — текст будет плавно увеличиваться от 14px до 2% ширины всего экрана, но никогда не будет меньше 14px.

Для перевода пикселей в vw можно использовать этот сайт: https://cssunitconverter.vercel.app/px-to-vw

[КАСТОМИЗАЦИЯ]
  1. В коде 1 можно изменить размер отступа слева от слайдера. Нужно указать отступ для всех разрешений, которые используются в нулевом блоке. Для этого нужно воспользоваться ссылкой выше и перевести px в vw.
  2. Если нужно превратить блок в полностью растяжимый, то нужно скопировать код 3 и вставить его под код 1 или перенести в head страницы.
  3. Внутри кода 3 уже расставлены поясняющие комментарии. Нужно изменить все размеры на свои для всех нужных разрешений.

[УПРАВЛЕНИЕ СЛАЙДЕРОМ]
Во время тестов рекомендую выделять строку и нажимать CTRL + / ( Command + /). В таком случае код не будет удаляться и можно позже еще раз его включить. Все комментарии оставлены в коде. Количество отображаемых слайдов задается в нем, не в настройках блока.

<!--Стили желательно перенести в HEAD страницы-->
<style>
    :root {
        /*Отступ слайдера слева*/
        /*Задается для всех ширин, которые есть в нулевом блоке*/
        /*Это значение будет работать до 640px*/
        --block-padding: max(3.125vw, 10px);
    }
    
    /*Чтобы отступ сбоку был равен сделанному в нулевом блоке нужно задать его для всех разрешенений нулевого блока*/
    /*Если какого-разрешения не хватает нужно скопировать целиком весь медиазапрос и вставить ниже последнего, 
    либо в порядке возрастания значений*/
    /*Если в каком-то разрешении отключен автоскейл нужно вместо max() написать просто 10px (свое значение)*/
    /*Если какое-то разрешение не нужно, то конструкцию с ним нужно удалить*/
    @media screen and (min-width: 640px) {
        :root {
            /*Это значение будет работать от 640px до 960px*/
            --block-padding: max(3.125vw, 20px);
        }
    }
    @media screen and (min-width: 960px) {
        :root {
            /*Это значение будет работать от 960px до 1200px*/
            --block-padding: max(2.083vw, 20px);
        }
    }
    @media screen and (min-width: 1200px) {
        :root {
            /*Это значение будет работать от 1200px до 1600px*/
            --block-padding: max(1.563vw, 20px);
        }
    }
    @media screen and (min-width: 1600px) {
        :root {
            /*Это значение будет работать от 1600px*/
            --block-padding: max(1.25vw, 20px);
        }
    }
    
    
    /*Кнопки*/
    /*Если слайдер не зациклен, то когда мотать некуда кнопка для перемотки с 0.5 прозрачности*/
    .swiper-button-disabled {opacity: 0.5;}
    .swiper-prev,.swiper-next {cursor: pointer;}
    .swiper-button-lock {display: block!important;}
    
    .uc-slider .t774{padding:0 var(--block-padding);box-sizing:border-box;overflow:hidden}.uc-slider .t-card__container{max-width:100%!important;padding:0!important}.uc-slider .t774__col{display:flex;margin-left:0!important;margin-bottom:0!important;padding:0!important;max-width:100%!important;height:auto!important}.uc-slider .t774__wrapper{width:100%}
</style>

<!--Код может не работать в Беларуси из-за блокировки cdn.jsdelivr.net-->

<!--Дополнительно вставить в HEAD страницы этот код ↓ -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" />
<!--Дополнительно вставить в HEAD страницы этот код ↑ -->

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css"/>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>

<script>
    document.addEventListener("DOMContentLoaded", () => {
        function addSlider(className) {
            document.querySelectorAll('.t774__separator').forEach(e => e.remove());

            let parentBlock = document.querySelector(className), 
                sliderContainer = parentBlock.querySelector('.t774'),
                sliderWrapper = parentBlock.querySelector('.t774__container'),
                sliderItem = parentBlock.querySelectorAll('.t774__col');
                
            sliderContainer.classList.add('swiper-container');
            sliderWrapper.classList.add('swiper-wrapper');
            sliderItem.forEach((slide) => slide.classList.add('swiper-slide'));
            
            let swiperEl = `${className} .swiper-container`;
            
            const slide = new Swiper(swiperEl, {
                // закомментировать строку ниже, если слайдер не нужно зацикливать
                loop: "true",
                // если слайдер не зациклен и хочется листать слайдер не по отдельному слайду, а как мышкой вертанулось
                // то нужно раскоментить строку ниже
                // freeMode: true,
                
                // количество отображаемых слайдов, можно указывать десятичные
                slidesPerView: 3.1,
                // расстояние между слайдами, задается не в стилях
                centeredSlides: true,
                spaceBetween: 20,
                // нужен ли хватающий курсор
                grabCursor: false,
                // можно ли управлять клавишами
                keyboard: {
                  enabled: true,
                  onlyInViewport: false,
                },
                // значения для разных разрешений, к примеру можно задать другой отступ между слайдами и отображение
                breakpoints: {
                    320: {
                        // от 320 до 640 будет показываться один полный слайд и 2/10 второго
                        // расстояние будет 10px
                        slidesPerView: 1.2,
                        spaceBetween: 10,
                    },
                    640: {
                        slidesPerView: 1.4,
                        spaceBetween: 10,
                    },
                    960: {
                        slidesPerView: 2.1,
                        spaceBetween: 20,
                    },
                    1200: {
                        slidesPerView: 3.1,
                        spaceBetween: 20
                    }
                },
                // Если навигации в слайдере нет, то удалить эту конструкцию ↓
                navigation: {
                    nextEl: '.swiper-next',
                    prevEl: '.swiper-prev',
                },
                // Если навигации в слайдере нет, то удалить эту конструкцию ↑
            });
            
            slide.on('slideChange', function () {
                t_lazyload_update();
            });
        }
        
        // скопировать для нового слайдера, вставить ниже и 
        addSlider(".uc-slider");
    });
</script>

<!--Стили желательно перенести в HEAD страницы-->
<!--Коды нужно сжать и убрать комментарии-->
<!--Растяжение блока по типу автоскейла, но работающее везде, без скриптов, только стили-->
<!--Будут растягиваться: заголовок, параграф, размер текста в кнопке, отступы в блоке с текстом -->
<!--Все размеры нужно указывать без px в конце-->
<style>
    :root {
        --scale: 100vw / 320;
        /*Отступы в тексте карточки*/
        --text-padding: 10;
        /*Размер заголовка*/
        --title-size: 20;
        /*Размер текста*/
        --text-size: 12;
        /*Высота кнопки*/
        --button-height: 40;
        /*Размер текста в кнопке*/
        --button-size: 12;
    }
    
    /*В медиазапросах переменные перечислены в том-же порядке*/
    /*Если какого-разрешения не хватает нужно скопировать целиком весь медиазапрос и вставить ниже последнего, 
    либо в порядке возрастания значений. В переменной --scale заменить значение после / на то, которое указано в min-width*/
    /*Если есть ненужный медиазапрос, то его тоже нужно удалить*/

    /*Если в каком-то разрешении нет автоскейла, то для значения --scale нужно указать 1*/
    @media screen and (min-width: 640px) {
        :root {
            --scale: 100vw / 640;
            
            /*Если размер элементов не меняется на каждом разрешении, то можно удалить на таких разрешениях эти переменные ↓*/
            --text-padding: 16;
            --title-size: 20;
            --text-size: 14;
            --button-height: 40;
            --button-size: 14;
            /*Если размер элементов не меняется на каждом разрешении, то можно удалить на таких разрешениях эти переменные ↑*/
        }
    }
    @media screen and (min-width: 960px) {
        :root {
            --scale: 100vw / 960;
            
            --text-padding: 16;
            --title-size: 20;
            --text-size: 14;
            --button-height: 40;
            --button-size: 14;
        }
    }
    @media screen and (min-width: 1200px) {
        :root {
            --scale: 100vw / 1200;
            
            --text-padding: 16;
            --title-size: 20;
            --text-size: 14;
            --button-height: 40;
            --button-size: 14;
        }
    }
    @media screen and (min-width: 1600px) {
        :root {
            --scale: 100vw / 1600;
            
            --text-padding: 16;
            --title-size: 20;
            --text-size: 14;
            --button-height: 40;
            --button-size: 14;
        }
    }
    
    
   .uc-slider .t-card__title{font-size:calc(var(--title-size)*var(--scale))!important}.uc-slider .t-card__descr{font-size:calc(var(--text-size)*var(--scale))!important}.uc-slider .t-card__btn{height:calc(var(--button-height)*var(--scale))!important;font-size:calc(var(--button-size)*var(--scale))!important}.uc-slider .t774__textwrapper{padding:calc(var(--text-padding)*var(--scale))!important}.uc-slider .t-card__btn-wrapper{padding:0 calc(var(--text-padding)*var(--scale))calc(var(--text-padding)*var(--scale))calc(var(--text-padding)*var(--scale))!important}
</style>
Made on
Tilda