Как сделать меню в две колонки из блока МЕ403 в Tilda
OUR COMPANY
Make Things Happen
Look around and catch opportunities everywhere in order to clear your mind and take your abilities to the next level

Как сделать меню в две колонки из блока МЕ403 в Tilda

1
Создали Zero для бургера. Зафиксировали его и добавили иконку открытия и закрытия меню. Задали им классы open-menu и close-menu
2
Создали блок ME403 и задали ему класс uc-m-menu
Заполнили его как на скрине ниже
3
Добавили код в блок Т123
Библиотека примера
<script>
document.addEventListener("DOMContentLoaded", function() {
    (function () {

        function fadeOut(element, duration, callback) {
            element.style.transition = `opacity ${duration}ms`;
            element.style.opacity = 0;
            setTimeout(() => {
                element.style.display = 'none';
                if (callback) callback();
            }, duration);
        }
    
        function fadeIn(element, duration, callback) {
            element.style.display = '';
            element.style.opacity = 0;
            setTimeout(() => {
                element.style.transition = `opacity ${duration}ms`;
                element.style.opacity = 1;
                if (callback) callback();
            }, 10);
        }
    
        // Получаем элементы
        const openMenuButtons = document.querySelectorAll('.open-menu');
        const closeMenuButtons = document.querySelectorAll('.close-menu');
        const ucMenu = document.querySelector('.uc-m-menu');
        const closeButton = document.querySelector('.uc-m-menu button.t450__close-button');
    
        // Обработчики для кнопок меню
        openMenuButtons.forEach(button => {
            button.addEventListener('click', function() {
                openMenuButtons.forEach(btn => fadeOut(btn, 200));
                closeMenuButtons.forEach(btn => fadeIn(btn, 200));
            });
        });
    
        closeMenuButtons.forEach(button => {
            button.addEventListener('click', function() {
                closeMenuButtons.forEach(btn => fadeOut(btn, 200));
                openMenuButtons.forEach(btn => fadeIn(btn, 200));
                if (closeButton) {
                    closeButton.click();
                }
            });
        });
    
        // Обработчик для меню
        if (ucMenu) {
            ucMenu.addEventListener('click', function() {
                setTimeout(function() {
                    const showMenu = document.querySelector('.uc-m-menu .t450__menu_show');
                    if (!showMenu) {
                        closeMenuButtons.forEach(btn => fadeOut(btn, 200));
                        openMenuButtons.forEach(btn => fadeIn(btn, 200));
                    }
                }, 200);
            });
        }
    
        // Создание нового элемента меню
        const newElem = document.createElement('div');
        newElem.className = 'menu-wrapper t-text';
        newElem.innerHTML = `
            <div class="menu-left-col">
                <div class="menu-main-link"></div>
                <div class="menu-sub-link">
                    <div class="menu-sub-back">< Назад</div>
                    <div class="menu-sub-m-title"></div>
                </div>
            </div>
            
            <div class="menu-right-col">
                <div class="menu-contact-card">
                    <div class="menu-contact-city">Москва</div>
                    <div class="menu-contact-adress">Улица Московская, 31Б</div>
                    <div class="menu-contact-phone"><a href="tel:+74957777777">+7 (495) 777 77 77</a></div>
                    <div class="menu-contact-mail"><a href="mailto:mail@mail.ru">mail@mail.ru</a></div>
                </div>
                
                <div class="menu-contact-card">
                    <div class="menu-contact-city">Владивосток</div>
                    <div class="menu-contact-adress">Улица Владивосточная, 55А</div>
                    <div class="menu-contact-phone"><a href="tel:+74237777777">+7 (423) 777 77 77</a></div>
                    <div class="menu-contact-mail"><a href="mailto:mail@mail.ru">mail@mail.ru</a></div>
                </div>
                
                <div class="menu-contact-card">
                    <div class="menu-contact-city">Санкт-Петербург</div>
                    <div class="menu-contact-adress">улица Ленинградская</div> 
                    <div class="menu-contact-phone"><a href="tel:+78127777777">+7 (812) 777 77 77</a></div>
                    <div class="menu-contact-mail"><a href="mailto:mail@mail.ru">mail@mail.ru</a></div>
                </div>
            
                <div class="menu-contact-card">
                    <div class="menu-contact-city">Краснодар</div>
                    <div class="menu-contact-adress">улица Краснодарская</div> 
                    <div class="menu-contact-phone"><a href="tel:+7985627777777">+7 (9856) 777 77 77</a></div>
                    <div class="menu-contact-mail"><a href="mailto:mail@mail.ru">mail@mail.ru</a></div>
                </div>
            </div>
        `;
    
        // Добавляем новый элемент
        const topMenu = document.querySelector('.uc-m-menu .t450__top');
        if (topMenu) {
            topMenu.appendChild(newElem);
        }
    
        // Создаем основные ссылки
        let mainLinkList = '';
        const menuLinkItems = document.querySelectorAll('.uc-m-menu .t-menu__link-item');
        
        menuLinkItems.forEach(function(el) {
            const caption = el.textContent;
            const href = el.getAttribute('href');
            const dataLink = el.getAttribute('data-menu-submenu-hook');
            mainLinkList += `<a class="main-links" href="${href}" data-menu-submenu-hook="${dataLink}">${caption}</a>`;
        });
    
        const menuMainLink = document.querySelector('.menu-main-link');
        if (menuMainLink) {
            menuMainLink.innerHTML = mainLinkList;
        }
    
        // Создаем подссылки
        let subLinkList = '';
        const menuSubLinkItems = document.querySelectorAll('.uc-m-menu .t-menusub__link-item');
        
        menuSubLinkItems.forEach(function(el) {
            const caption = el.textContent;
            const href = el.getAttribute('href');
            const subMenu = el.closest('.t-menusub');
            const dataLink = subMenu ? subMenu.getAttribute('data-submenu-hook') : '';
            subLinkList += `<a class="sub-links" href="${href}" data-menu-submenu-hook="${dataLink}"><span>${caption}</span></a>`;
        });
    
        const menuSubLink = document.querySelector('.menu-sub-link');
        if (menuSubLink) {
            menuSubLink.innerHTML += subLinkList;
        }
    
        // Скрываем элементы
        closeMenuButtons.forEach(btn => btn.style.display = 'none');
        document.querySelectorAll('.sub-links').forEach(link => link.style.display = 'none');
    
        // Обработчики для основных ссылок
        document.addEventListener('mouseenter', function(e) {
            if (e.target.classList.contains('main-links')) {
                const el = e.target;
                
                // Скрываем все подссылки и убираем активный класс
                document.querySelectorAll('.sub-links').forEach(link => link.style.display = 'none');
                document.querySelectorAll('.main-links').forEach(link => link.classList.remove('active-main'));
                
                // Добавляем активный класс текущему элементу
                el.classList.add('active-main');
                
                // Показываем соответствующие подссылки
                const data = el.getAttribute('data-menu-submenu-hook');
                if (data) {
                    document.querySelectorAll(`.sub-links[data-menu-submenu-hook="${data}"]`).forEach(link => {
                        link.style.display = '';
                    });
                }
    
                // Обработка для мобильных устройств
                const caption = el.textContent;
                const attr = el.getAttribute('data-menu-submenu-hook');
                const width = window.innerWidth;
                
                if (attr && attr !== '' && width < 680) {
                    const menuLeftCol = el.closest('.menu-left-col');
                    if (menuLeftCol) {
                        menuLeftCol.classList.add('slide-menu');
                    }
                    const menuSubTitle = document.querySelector('.menu-sub-m-title');
                    if (menuSubTitle) {
                        menuSubTitle.textContent = caption;
                    }
                }
            }
        }, true);
    
        // Обработчик для кнопки "Назад"
        const menuSubBack = document.querySelector('.menu-sub-back');
        if (menuSubBack) {
            menuSubBack.addEventListener('click', function() {
                document.querySelectorAll('.menu-left-col').forEach(col => {
                    col.classList.remove('slide-menu');
                });
            });
        }
    
        // Обработчик для подссылок
        document.addEventListener('click', function(e) {
            if (e.target.classList.contains('sub-links') || e.target.closest('.sub-links')) {
                const el = e.target.classList.contains('sub-links') ? e.target : e.target.closest('.sub-links');
                const link = el.getAttribute('href');
                if (link) {
                    window.location.href = link;
                }
                closeMenuButtons.forEach(btn => btn.click());
            }
        });       
 
 
    })();    
});    
</script>





<style>
.open-menu, .close-menu {
    cursor: pointer;
    border-radius: 50%;
    overflow: hidden;
    transition: all 0.3s ease-in-out;
}

.open-menu:hover {
    filter: invert(1);
}   

.uc-m-menu .t450, .uc-m-menu .t450__overlay {
    max-width: none !important;
    height: calc(100vh - 200px);
    top: 100px;
    width: calc(100vw - 80px);
    left: 40px;
    border-radius: 30px;
    overflow: auto;
}

.uc-m-menu button.t450__close-button {
    display: none;
}

.uc-m-menu .t450 {
    -webkit-transition: transform ease-in-out 0.6s;
    -moz-transition: transform ease-in-out 0.6s;
    -o-transition: transform ease-in-out 0.6s;
    transition: transform ease-in-out 0.6s;
    -moz-transform: translate(110%,0);
    -ms-transform: translate(110%,0);
    -webkit-transform: translate(110%,0);
    -o-transform: translate(110%,0);
    transform: translate(110%,0);
}


.uc-m-menu .t450__menu_show.t450 {
    
    -moz-transform: translate(0,0);
    -ms-transform: translate(0,0);
    -webkit-transform: translate(0,0);
    -o-transform: translate(0,0);
    transform: translate(0,0);
}

.uc-m-menu .t-menusub {
    display: none !important;
}

.uc-m-menu nav.t450__menu {
    display: none;
}

.menu-wrapper {
    display: flex;
    overflow: hidden;
}

.menu-left-col {
    display: flex;
}

.menu-main-link {
    display: flex;
    flex-direction: column;
    position: relative;
}

.menu-left-col>div {
    padding: 20px;
    box-sizing: border-box;
    transition: all 0.3s ease-in-out;
}

.menu-sub-link {
    display: flex;
    flex-direction: column;
    padding-top: 30px !important;
}

a.main-links {
    color: #fff !important;
    font-weight: 400;
    font-size: 36px;
    margin-bottom: 14px;
    opacity: 0.5;
}

a.sub-links {
    color: #fff !important;
    font-weight: 400;
    font-size: 26px;
    margin-bottom: 14px;
}

.menu-right-col {
    display: flex;
    flex-wrap: wrap;
}

.menu-right-col>div {
    width: 50%;
    padding: 30px 30px 30px 30px;
    box-sizing: border-box;
    color: #fff;
}

.menu-contact-city {
    font-size: 22px;
    margin-bottom: 16px;
    font-weight: 600;
}

.menu-contact-adress {
    opacity: 0.6;
    font-size: 14px;
}

.menu-contact-phone a {
    font-size: 22px;
    color: #fff !important;
}

.menu-contact-phone {
    margin: 7px 0;
    opacity: 0.6;
}

.menu-contact-mail a {
    color: #fff !important;
    text-decoration: underline !important;
    opacity: 0.6;
}

.uc-m-menu .t450__rightcontainer {
    display: flex;
    justify-content: space-between;
    padding-left: 60%;
}

.uc-m-menu .t450__right_descr a {
    color: #fff !important;
    font-size: 14px;
}

.uc-m-menu .t450__right_descr {
    padding-left: 30px;
}

.uc-m-menu .t450__container:after {
    content: "";
    width: 2px;
    height: 100%;
    background-color: #fff;
    position: absolute;
    left: 24%;
    top: 0;
}

.menu-right-col {
    width: 40%;
}

.menu-left-col {
    width: 60%;
}

.menu-main-link {
    width: 40%;
}

.menu-sub-link {
    width: 60%;
}


a.sub-links, a.sub-links span {
    transition: all 0.3s ease-in-out;
}

a.sub-links:hover span {
    box-shadow: 0 2px 0 0 #fff;
}

a.sub-links:after {
    content: "";
    width: 25px;
    height: 25px;
    background-image: url(https://static.tildacdn.com/tild6630-3462-4461-b432-626537356465/Group_256.svg);
    position: absolute;
    top: 7px;
    right: 30px;
    transition: all 0.3s ease-in-out;
    opacity: 0;
    background-size: contain;
    background-repeat: no-repeat;
    background-position: center;
}

a.sub-links {
    position: relative;
}

a.sub-links:hover:after {
    opacity: 1;
}

a.main-links {
    transition: all 0.3s ease-in-out;
    position: relative;
}

a.main-links:hover, a.main-links.active-main {
    opacity: 1;
}

a.main-links:after {
    content: "";
    width: 20px;
    height: 20px;
    background-image: url(https://static.tildacdn.com/tild3230-6563-4264-a166-363436363834/Subtract.svg);
    position: absolute;
    background-repeat:no-repeat;
    background-size: contain;
    top: 17px;
    right: 19px;
    transition: all 0.3s ease-in-out;
    opacity: 0;
}

a.main-links:hover:after, a.main-links.active-main:after {
    opacity: 1;
}

a.main-links[data-menu-submenu-hook=""]:after {
    opacity: 0 !important;
}


.menu-sub-back,
.menu-sub-m-title{
    display: none;
}



@media screen and (max-width:1450px){

.menu-main-link {
    width: 50%;
}
.menu-sub-link {
    width: 50%;
}

.uc-m-menu .t450__container:after {
    left: 30%;
} 

a.sub-links:after {
    right: -10px;
}

.menu-contact-phone a {
    font-size: 18px;
}
    
}

@media screen and (max-width:1180px){

a.main-links {
    font-size: 26px;
}

a.main-links:after {
    width: 15px;
    height: 15px;
    top: 13px;
    right: 10px;
}

a.sub-links {
    font-size: 18px;
}

a.sub-links:after {
    width: 15px;
    height: 15px;
    top: 5px;
    right: -10px;
}

.menu-right-col>div{
    width:100%;
    padding-bottom:0px;
}

.uc-m-menu .t450__rightcontainer {
    flex-wrap:wrap;
}    

.uc-m-menu .t450__right_social_links {
    margin-top: 10px;
}    
    
}

@media screen and (max-width:960px){

.uc-m-menu .t450__container {
    padding: 25px 10px 25px 10px;
}

.menu-left-col{
    width:100%;
}
.menu-right-col{
    width:100%;
}
.menu-wrapper {
    flex-wrap: wrap;
}

.uc-m-menu .t450__container:after {
    opacity:0;
}

.menu-main-link {
    box-shadow: 2px 0 0 0 #fff;
}

.menu-right-col>div {
    width: 33.33%;
}

.uc-m-menu .t450__rightcontainer {
    padding-left: 0%;
}

.uc-m-menu .t450__right_social_links {
    margin-right: 20px;
}    
}


@media screen and (max-width: 960px){

.menu-contact-city {
    font-size: 18px;
    font-weight: 400;
}
}


@media screen and (max-width: 680px){

.menu-contact-city {
    font-size: 18px;
    font-weight: 400;
}

.menu-right-col>div {
    width: 100%;
}    
  
.uc-m-menu .t450, .uc-m-menu .t450__overlay {
    
    height: auto;
    top: 0px;
    width: calc(100vw);
    left: 0px;
    border-radius: 0px;
    overflow: auto;
    padding-bottom: 50px;
    
}
.uc-m-menu button.t450__close-button {
    display: flex;
}

.uc-m-menu .t450__close_icon span {
    width: 100% !important;
}

.uc-m-menu .t450_opened .t450__close_icon span:nth-child(1) {
    opacity: 0;
}    
    
.uc-m-menu .t450_opened .t450__close_icon span:nth-child(4) {
    opacity: 0;
}    
 
.menu-main-link {
    width: 100vw;
}

.menu-sub-link {
    width: 100vw;
}

.menu-left-col {
    width: max-content;
} 
 
.menu-left-col>div {
    transition: all 0.3s ease-in-out;
}

.menu-left-col.slide-menu>div {
    transform: translateX(-100%);
}

.menu-sub-link {
    color: #fff;
}

.menu-sub-back {
    font-size: 20px;
    cursor: pointer;
}

.menu-sub-m-title {
    font-size: 26px;
    font-weight: 400;
    margin: 20px 0;
}

a.sub-links:after {
    right: 20px;
}

.menu-sub-back,
.menu-sub-m-title{
    display: block;
}

.uc-m-menu .t450__rightcontainer{
    display:block;
}

.uc-m-menu .t450__right_social_links{
    padding-left:30px;
}

a.main-links:after {
    opacity: 1;
}

a.main-links {
    opacity: 1;
}


}

</style>
Made on
Tilda