<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss">
<channel>
<title>Дизайн и графика - Максимум веб информации</title>
<link>https://web-maxs.ru/</link>
<language>ru</language><item>
<title>Вертикальный рекламный слайдер для DLE: готовый код баннерной карусели в сайдбар</title>
<link>https://web-maxs.ru/design_and_graphics/405-vertikalnyj-reklamnyj-slajder-dlja-dle-gotovyj-kod-bannernoj-karuseli-v-sajdbar.html</link>
<pdalink>https://web-maxs.ru/design_and_graphics/405-vertikalnyj-reklamnyj-slajder-dlja-dle-gotovyj-kod-bannernoj-karuseli-v-sajdbar.html</pdalink>
<guid>405</guid>
<pubDate>Thu, 22 Oct 2026 10:05:25 +0400</pubDate>
<category>native-yes</category>

<content:encoded><![CDATA[<p>Баннеры в сайдбаре давно приелись посетителям: статичная картинка сверху, ещё одна снизу — кликабельность падает, доход с рекламы вместе с ней. Вертикальный слайдер решает эту проблему: он прокручивает несколько рекламных предложений на одной площади, оживляет страницу и удерживает внимание.</p> <h2><span style="color:#236fa1;">Что делает этот слайдер</span></h2> <p>Компонент представляет собой вертикальную карусель на чистом jаvascript и CSS — без jQuery и сторонних библиотек. Основные возможности:</p> <ul> <li><b>Автопрокрутка слайдов</b> каждые 5,5 секунды с плавным скроллом (<code>scroll-behavior: smooth</code> и <code>scroll-snap</code>);</li> <li><b>Поддержка тегов баннеров DLE</b> — конструкция, <b>например:</b></li> </ul> <pre class="language-markup"><code></code></pre> <p><span style="font-size:1.1em;color:#34495e;"><b> подключает стандартные рекламные места из админпанели;</b></span></p> <ul> <li><b>Fallback-баннеры</b>: если рекламное место пустое, сработает блок <code>[not-banner_...]</code> и покажется резервный слайд с прямой ссылкой;</li> <li><b>Навигация</b> — кнопки «вверх/вниз» со стрелками и вертикальные индикаторы-точки справа;</li> <li><b>Прокрутка колесом мыши и свайпом на телефонах</b> — трек использует нативный скролл, поэтому управление интуитивно понятно;</li> <li><b>Адаптивность</b>: на экранах до 480 px баннер растягивается на всю ширину и уменьшает высоту с 480 до 380 px;</li> <li><b>Доступность</b>: кнопки помечены <code>aria-label</code>, точки навигации объединены в <code>role="tablist"</code>, картинки лениво загружаются через <code>loading="lazy"</code>.</li> </ul> <h2><span style="color:#236fa1;">Установка в DLE</span></h2> <ol> <li>Откройте шаблон сайта (например, <code>templates/Default/</code>) и вставьте весь код в файл <code>sidebar.tpl</code> или в нужное место через тег <code>&#123;include file="banner-slider.tpl"}</code> — так удобнее переиспользовать блок.</li> <li>Если используете рекламные места, создайте их в админпанели: <b>Список рекламных материалов для сайта</b> → добавьте баннеры с именами <code>scoolmaster</code>, <code>sidebar_2</code> и другими, которые прописаны в тегах <code>[banner_...]</code>.</li> <li>Загрузите изображения баннеров в папку шаблона. В примере это файлы <code>black-widow-avengers.jpg</code>, <code>thanos.jpg</code> и другие — размер 320×480 px, формат JPEG или WebP.</li> <li>Замените ссылки <code><a href="https://example.com/promo1">https://example.com/promo1</a></code> на свои, а также заголовки <code>&lt;h3&gt;</code> и описания под каждым баннером.</li> </ol> <p>Обратите внимание на атрибут <code>rel="noopener nofollow"</code> в ссылках: <code>noopener</code> защищает от уязвимости <code>window.opener</code>, а <code>nofollow</code> корректно расходует вес страницы — стандартная практика для рекламных блоков.</p> <h2><span style="color:#236fa1;">Настройка под себя</span></h2> <h3><span style="color:#236fa1;">Скорость и количество слайдов</span></h3> <p><span style="font-size:1.1em;"><b>Интервал автопрокрутки задаётся константой в скрипте:</b></span></p> <div> <div> <pre><code class="language-javascript">const AUTOPLAY_DELAY = 5500; // миллисекунды </code></pre> </div> </div> <p>Чтобы добавить новый баннер, скопируйте блок <code>&lt;div class="dvs-slide"&gt;...&lt;/div&gt;</code> целиком и вставьте после последнего слайда. Скрипт автоматически пересчитает индикаторы — точки создаются динамически из количества слайдов, ничего дописывать не нужно.</p> <h3><span style="color:#236fa1;">Размеры</span></h3> <p><span style="color:#34495e;"><b>Высота баннера меняется в CSS:</b></span></p> <div> <div> <pre><code class="language-css">.dvs-track { height: 480px; /* базовая высота */ } @media (max-width: 480px) { .dvs-track { height: 380px; /* высота на мобильных */ } } </code></pre> </div> </div> <p>Максимальная ширина контейнера — <code>max-width: 340px</code>, под стандартный сайдбар. Если шаблон шире, просто увеличьте значение.</p> <h3><span style="color:#236fa1;">Цветовая схема</span></h3> <p>Тёмная подложка (<code>#12151c</code>) и акцентный синий (<code>#3b82f6</code>) заданы в трёх местах: фон слайдера, цвет заливки кнопок при наведении (<code>hover</code>), активная точка-индикатор (<code>.dvs-dot.is-active</code>). Замените их на цвета своей темы, и слайдер впишется в любой дизайн — от минималистичного до тёмного «кино-стиля», который как раз обыгрывается в демо-баннерах с постерами.</p> <h3><span style="color:#236fa1;">Градиент поверх картинки</span></h3> <p><span style="font-size:1.1em;color:#34495e;"><b>Затемнение под текстом задаётся градиентом:</b></span></p> <div> <div> <pre><code class="language-css">background: linear-gradient(180deg, rgba(0,0,0,0) 35%, rgba(0,0,0,0.88) 100%); </code></pre> </div> </div> <p>Он прозрачен в верхней части и почти чёрный внизу — поэтому заголовок и подпись читаются на любом фоне. Плотность затемнения регулируйте последним значением альфы (0.88).</p> <h2><span style="color:#236fa1;">Как это работает технически</span></h2> <p>Внутри слайдера нет единого механизма анимации «перетаскивания» — вместо него используется связка CSS <code>scroll-snap-type: y mandatory</code> и JS-метода <code>scrollTo()</code>. Трек — это обычная вертикальная прокручиваемая область, в которой каждый слайд «прилипает» к началу контейнера. <span style="color:#34495e;"><b>Такой подход даёт три преимущества:</b></span></p> <ol> <li><b>Нативность.</b> Скролл мышью, тачпадом и пальцем работает «из коробки», с плавной физикой, которую невозможно повторить на <code>transform</code>-анимациях.</li> <li><b>Надёжность.</b> Даже если jаvascript не загрузился, посетитель всё равно пролистает баннеры обычным скроллом — деградация поведения мягкая.</li> <li><b>Синхронизация.</b> Обработчик события <code>scroll</code> с дебаунсом в 60 мс сверяет позицию трека с индексом слайда и обновляет активную точку — то есть навигация «догоняет» пользователя, каким бы способом он ни листал.</li> </ol> <p>Автопрокрутка грамотно поставлена на паузу: при наведении курсора (<code>mouseenter</code>) и начале касания (<code>touchstart</code>) таймер останавливается, чтобы баннер не «убегал» из-под взгляда. С уходом курсора цикл возобновляется.</p> <p>Мелочь, но приятная: если слайд в разметке один, скрипт скрывает кнопки навигации и не запускает лишнюю логику — код можно смело переиспользовать и на страницах с единственным баннером.</p> <h2><span style="color:#236fa1;">Преимущества для трафика и монетизации</span></h2> <ul> <li><b>Экономия места.</b> Шесть баннеров занимают площадь одного — критично для сайдбаров, где конкурируют виджеты, меню и блок соцсетей.</li> <li><b>Больше показов каждому объявлению.</b> Слайдер раскручивает всю рекламную ротацию, а не только верхний баннер.</li> <li><b>Визуальный акцент.</b> Анимация смены слайдов цепляет взгляд на первый экран, что повышает CTR по сравнению со статичными блоками.</li> <li><b>SEO-безопасность.</b> Всё содержимое остаётся в HTML: текст оверлеев индексируется, картинки получают <code>alt</code>, а <code>loading="lazy"</code> не тормозит первичный рендер — Core Web Vitals не страдают.</li> </ul> <h2><span style="color:#236fa1;">Возможные доработки</span></h2> <p>Код легко расширяется: можно добавить счётчик «1/6» рядом с точками, подгрузку баннеров через AJAX для реальной ротации или привязку показа слайда к категории новости через теги DLE <code>[aviable]</code> и <code>[category]</code>. Ещё один практичный приём — дублировать ссылку баннера текстом внутри <code>dvs-caption</code>, если нужно, чтобы кликалась не только картинка.</p> <p>Готовый блок достаточно вставить в шаблон один раз — и вертикальная карусель заработает без сборки, зависимостей и правок движка.</p>]]></content:encoded>
</item><item>
<title>Адаптивное горизонтальное многоуровневое меню для CMS DLE: пошаговое руководство с кодом</title>
<link>https://web-maxs.ru/design_and_graphics/404-adaptivnoe-gorizontalnoe-mnogourovnevoe-menju-dlja-cms-dle-poshagovoe-rukovodstvo-s-kodom.html</link>
<pdalink>https://web-maxs.ru/design_and_graphics/404-adaptivnoe-gorizontalnoe-mnogourovnevoe-menju-dlja-cms-dle-poshagovoe-rukovodstvo-s-kodom.html</pdalink>
<guid>404</guid>
<pubDate>Wed, 21 Oct 2026 20:38:31 +0400</pubDate>
<category>native-yes</category>

<enclosure url="https://web-maxs.ru/uploads/posts/2026-10/5ab7c15bf0_mnogourovnevoe-menju-dlja-cms-dle.webp" type="image/webp" />
<enclosure url="https://web-maxs.ru/uploads/posts/2026-10/mnogourovnevoe-menju-dlja-cms-dle2.webp" type="image/webp" />
<enclosure url="https://web-maxs.ru/uploads/posts/2026-10/mnogourovnevoe-menju-dlja-cms-dle3.webp" type="image/webp" />
<content:encoded><![CDATA[<p>DLE (DataLife Engine) по-прежнему живёт на тысячах сайтов, и один из самых частых запросов его владельцев — сделать нормальное выпадающее меню: горизонтальное, многоуровневое и, главное, удобное на телефоне.</p> <p>Стандартные способы ограничены, поэтому соберём меню с нуля: HTML-каркас, CSS-стили на флексах, немного jаvascript для мобильной версии и корректная интеграция с шаблоном DLE. Всё, что ниже — рабочий код, который можно вставить в свой шаблон и доработать под дизайн.</p> <h2><span style="color:#236fa1;">Что будем делать</span></h2> <p><span style="color:#34495e;font-size:1.1em;"><b>Цель — трёхуровневое горизонтальное меню:</b></span></p> <ul> <li>первый уровень — основные разделы сайта;</li> <li>второй и третий уровни — выпадающие списки при наведении (на десктопе) или раскрытии по тапу (на мобильных);</li> <li>на ширине до 992 пикселей меню сворачивается в «бургер», а вложенные уровни раскрываются аккордеоном;</li> <li>пункты меню задаются вручную или подтягиваются из категорий DLE.</li> </ul> <div style="color:#333333;border:1px solid rgb(0,137,123);padding:0.78em;background-color:#e0f2f1;box-shadow:rgba(126,142,177,0.2) 0px 0.35em 0.7em;" class="noncontenteditable dle-information-block"> <div class="contenteditable"> <p><b>Подход не зависит от версии движка (актуально для DLE 13–21) и не требует плагинов.</b></p> </div> </div> <h2><span style="color:#236fa1;">Шаг 1. HTML-структура меню</span></h2> <p><span style="color:#34495e;font-size:1.1em;"><b>Открываем файл шаблона <code>templates/ваш_шаблон/main.tpl</code> и в нужном месте (обычно внутри шапки) размещаем разметку:</b></span></p> <div> <div> <pre><code class="language-html">&lt;nav class="top-menu"&gt; &lt;button class="menu-toggle" aria-label="Открыть меню" aria-expanded="false"&gt; &lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt; &lt;/button&gt; &lt;ul class="menu"&gt; &lt;li&gt;&lt;a href="/"&gt;Главная&lt;/a&gt;&lt;/li&gt; &lt;li class="has-sub"&gt; &lt;a href="/novosti/"&gt;Новости&lt;/a&gt; &lt;ul class="submenu"&gt; &lt;li&gt;&lt;a href="/novosti/mir/"&gt;В мире&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="/novosti/sport/"&gt;Спорт&lt;/a&gt;&lt;/li&gt; &lt;li class="has-sub"&gt; &lt;a href="/novosti/tehnologii/"&gt;Технологии&lt;/a&gt; &lt;ul class="submenu"&gt; &lt;li&gt;&lt;a href="/novosti/tehnologii/gadzhety/"&gt;Гаджеты&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="/novosti/tehnologii/soft/"&gt;Софт&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="/statji/"&gt;Статьи&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="/forum/"&gt;Форум&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="/kontakty.html"&gt;Контакты&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/nav&gt; </code></pre> </div> </div> <p>Логика простая: пункт с вложенным списком получает класс <code>has-sub</code>, а вложенные списки — общий класс <code>submenu</code>. Именно на этих классах будет держаться вся стилизация и поведение.</p> <h2><span style="color:#236fa1;">Шаг 2. CSS: десктопная версия</span></h2> <p><span style="color:#236fa1;"><img src="https://web-maxs.ru/uploads/posts/2026-10/5ab7c15bf0_mnogourovnevoe-menju-dlja-cms-dle.webp" alt="" style="display:block;margin-left:auto;margin-right:auto;"></span><span style="color:#34495e;font-size:1.1em;"><b>Добавляем стили в файл <code>templates/ваш_шаблон/css/style.css</code> (или в отдельный <code>menu.css</code>, который подключим в <code>main.tpl</code>).</b></span></p> <div> <div> <pre><code class="language-css">/* ===== Контейнер меню ===== */ .top-menu { position: relative; background: #1e2a38; } .menu { display: flex; flex-wrap: wrap; list-style: none; margin: 0; padding: 0; } .menu &gt; li { position: relative; } .menu a { display: block; padding: 14px 20px; color: #fff; text-decoration: none; font: 15px/1.2 Arial, sans-serif; transition: background .2s; } .menu a:hover, .menu &gt; li.active &gt; a { background: #2e4156; } /* ===== Выпадающие уровни ===== */ .submenu { position: absolute; top: 100%; left: 0; min-width: 200px; list-style: none; margin: 0; padding: 0; background: #2e4156; opacity: 0; visibility: hidden; transform: translateY(10px); transition: .25s ease; z-index: 100; } /* второй уровень раскрывается вниз, третий — вбок */ .has-sub:hover &gt; .submenu, .has-sub.open &gt; .submenu { opacity: 1; visibility: visible; transform: translateY(0); } .submenu .submenu { top: 0; left: 100%; transform: translateX(10px); } .submenu a { padding: 12px 18px; border-bottom: 1px solid rgba(255,255,255,.06); } /* стрелка у пунктов с подменю */ .has-sub &gt; a::after { content: ""; display: inline-block; margin-left: 8px; border: 5px solid transparent; border-top-color: #fff; vertical-align: middle; } /* ===== Бургер скрыт на десктопе ===== */ .menu-toggle { display: none; flex-direction: column; gap: 5px; padding: 14px; background: none; border: 0; cursor: pointer; } .menu-toggle span { width: 26px; height: 2px; background: #fff; transition: .3s; } </code></pre> </div> </div> <div style="border:1px solid rgb(255,152,0);padding:0.78em;background-color:#fff3e0;color:#333333;box-shadow:rgba(126,142,177,0.2) 0px 0.35em 0.7em;" class="noncontenteditable dle-warning-block"> <div class="contenteditable"> <p><b>Обратите внимание на приём с <code>visibility</code> и <code>opacity</code> вместо <code>display: none</code> — он даёт плавную анимацию появления и не «роняет» меню при резком уводе курсора.</b></p> </div> </div> <h2><span style="color:#236fa1;">Шаг 3. CSS: мобильная версия</span></h2> <p><img src="https://web-maxs.ru/uploads/posts/2026-10/mnogourovnevoe-menju-dlja-cms-dle2.webp" alt="" style="display:block;margin-left:auto;margin-right:auto;"></p> <p><img src="https://web-maxs.ru/uploads/posts/2026-10/mnogourovnevoe-menju-dlja-cms-dle3.webp" alt="" style="display:block;margin-left:auto;margin-right:auto;"></p> <p><span style="font-size:1.1em;color:#34495e;"><b>В конец того же файла добавляем медиазапрос — на узких экранах меню перестраивается в вертикальный аккордеон:</b></span></p> <div> <div> <pre><code class="language-css">@media (max-width: 992px) { .menu-toggle { display: flex; } .menu { display: none; flex-direction: column; width: 100%; } .top-menu.open .menu { display: flex; } /* подменю больше не абсолютные — встают в поток */ .submenu { position: static; opacity: 1; visibility: visible; transform: none; display: none; background: #263545; } .has-sub.open &gt; .submenu { display: block; } .submenu .submenu { background: #1e2a38; } /* анимация бургера в крестик */ .top-menu.open .menu-toggle span:nth-child(1) { transform: translateY(7px) rotate(45deg); } .top-menu.open .menu-toggle span:nth-child(2) { opacity: 0; } .top-menu.open .menu-toggle span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); } } </code></pre> </div> </div> <h2><span style="color:#236fa1;">Шаг 4. jаvascript: раскрытие на мобильных</span></h2> <p><span style="font-size:1.1em;color:#236fa1;"><b>Файл <code>templates/ваш_шаблон/js/menu.js</code>:</b></span></p> <div> <div> <pre><code class="language-js">document.addEventListener('DOMContentLoaded', function () { var nav = document.querySelector('.top-menu'); if (!nav) return; // открыть/закрыть бургер nav.querySelector('.menu-toggle').addEventListener('click', function () { var open = nav.classList.toggle('open'); this.setAttribute('aria-expanded', open); }); // раскрытие подменю по тапу nav.querySelectorAll('.has-sub &gt; a').forEach(function (link) { link.addEventListener('click', function (e) { if (window.innerWidth &lt;= 992) { e.preventDefault(); var li = link.parentElement; var isOpen = li.classList.contains('open'); // закрываем соседние пункты — так аккордеон аккуратнее li.parentElement.querySelectorAll('.has-sub.open').forEach(function (el) { el.classList.remove('open'); }); if (!isOpen) li.classList.add('open'); } }); }); // при переходе на десктоп сбрасываем раскрытия window.addEventListener('resize', function () { if (window.innerWidth &gt; 992) { nav.classList.remove('open'); nav.querySelectorAll('.has-sub.open').forEach(function (el) { el.classList.remove('open'); }); } }); }); </code></pre> </div> </div> <p><span style="color:#34495e;font-size:1.1em;"><b>Подключаем скрипт в <code>main.tpl</code> перед закрывающим <code>&lt;/body&gt;</code>:</b></span></p> <div> <div> <pre><code class="language-html">&lt;script src="&#123;THEME}/js/menu.js"&gt;&lt;/script&gt; </code></pre> </div> </div> <p><span style="font-size:1.1em;color:#34495e;"><b>Тег <code>&#123;THEME}</code> DLE автоматически подставит путь до текущего шаблона — переопределять ничего не нужно. То же самое работает для CSS, если вынесете стили в отдельный файл:</b></span></p> <div> <div> <pre><code class="language-html">&lt;link rel="stylesheet" href="&#123;THEME}/css/menu.css"&gt; </code></pre> </div> </div> <h3><span style="color:#236fa1;">Шаг 5. Интеграция с DLE: два способа наполнения меню</span></h3> <p><b>Способ 1 — статичное меню в <code>main.tpl</code>.</b> Подходит, если разделы меняются редко: пишете пункты руками, как в примере выше. Полный контроль над разметкой и вложенностью.</p> <p><b>Способ 2 — автогенерация из категорий.</b> DLE умеет строить меню категорий тегом:</p> <div> <div> <pre><code class="language-html">{catmenu template="catmenu" cache="yes"} </code></pre> </div> </div> <p>Движок возьмёт файл <code>templates/ваш_шаблон/catmenu.tpl</code> и построит дерево категорий. Чтобы вписать его в нашу структуру, содержимое <code>catmenu.tpl</code> может выглядеть так:</p> <div> <div> <pre><code class="language-html">&lt;li class="has-sub [active]active[/active]"&gt; &lt;a href="{url}"&gt;{name}&lt;/a&gt; {sub-menu} &lt;/li&gt; </code></pre> </div> </div> <p>Тег <code>{sub-menu}</code> DLE заменит на вложенный <code>&lt;ul&gt;</code> с подкатегориями. Здесь есть нюанс: класс <code>has-sub</code> тегом не управляется, поэтому если нужно строгое поведение «стрелка только там, где есть подменю», проще отдать стилям — или использовать комбинированный подход: первый уровень статичный, вложенные уровни — через <code>{catmenu}</code>.</p> <p>Также не забывайте про подсветку текущего раздела: в шаблонах пунктов доступны теги <code>[active] … [/active]</code>, а в статичном меню активный пункт можно пометить классом <code>active</code> вручную и стилизовать через правило <code>.menu &gt; li.active &gt; a</code>, которое уже есть в CSS выше.</p> <h4><span style="color:#236fa1;">Шаг 6. SEO-нюансы меню</span></h4> <p><span style="color:#34495e;font-size:1.1em;"><b>Меню — это навигация, а не место для перелинковки на всё подряд, поэтому несколько правил, которые реально влияют на индексацию:</b></span></p> <ul> <li>оставляйте разметку семантичной: контейнер <code>&lt;nav&gt;</code>, списки <code>&lt;ul&gt;</code>, никаких <code>&lt;div&gt;</code>-имитаций;</li> <li>не прячьте важные разделы глубже второго уровня — ссылочная ценность с каждым уровнем падает;</li> <li>избегайте дублей: не ставьте в меню две ссылки на один URL под разными названиями;</li> <li>текст ссылки должен отражать содержимое страницы («Новости технологий», а не «Раздел 3»);</li> <li>выпадающие уровни на десктопе делайте раскрываемыми при наведении, но не скрывайте их <code>display: none</code> навсегда — поисковики индексируют ссылки из выпадающих меню, если те присутствуют в разметке.</li> </ul> <h5><span style="color:#236fa1;">Типичные ошибки при интеграции</span></h5> <ul> <li><b>Меню «прыгает» при наведении.</b> Причина — у вложенного <code>.submenu</code> не задан <code>z-index</code>, и его перекрывает контент. Проверьте, что у родителей стоит <code>position: relative</code>, а у подменю — <code>z-index: 100</code>.</li> <li><b>Подменю уходит за край экрана.</b> Если пункт с выпадашкой стоит у правого края, раскрывайте её влево: добавьте класс <code>.open-left</code> с правилом <code>.open-left &gt; .submenu { left: auto; right: 0; }</code>.</li> <li><b>На мобильных по тапу сразу срабатывает переход по ссылке.</b> Наш скрипт перехватывает клики только на родительских пунктах с подменю — обычные пункты работают как ссылки, это правильно. Если родительский раздел тоже должен вести на страницу, дублируйте его первым пунктом подменю («Все новости»).</li> <li><b>Меню не наследует стили темы.</b> Убедитесь, что подключение <code>menu.css</code> стоит ниже основного файла стилей, иначе специфичность может переопределить правила.</li> </ul> <p><span style="font-size:1.3em;color:#e67e23;"><b>Стоит обратить внимание на один нюанс !!!</b></span></p> <p>Если у Вас в шаблоне уже есть похожие классы, например: <code> <b>.submenu has-sub</b> то придется их переименовать во всех стилях и html. </code></p> <p><span style="font-size:1.1em;color:#34495e;"><b><code>Например: .submenu2 has-sub2 соответственно в стилях должно быть так: </code></b></span></p> <pre class="language-markup"><code>.submenu2 { position: static; opacity: 1; visibility: visible; transform: none; display: none; background: #263545; }</code></pre>]]></content:encoded>
</item><item>
<title>Счётчик обратного отсчёта для DLE 19: пошаговая интеграция</title>
<link>https://web-maxs.ru/design_and_graphics/363-schetchik-obratnogo-otscheta-dlja-dle-19-poshagovaja-integracija.html</link>
<pdalink>https://web-maxs.ru/design_and_graphics/363-schetchik-obratnogo-otscheta-dlja-dle-19-poshagovaja-integracija.html</pdalink>
<guid>363</guid>
<pubDate>Fri, 02 Jan 2026 17:47:52 +0400</pubDate>
<category>native-yes</category>

<content:encoded><![CDATA[<p><span style="font-size:16.4px;">Если вам нужно временно уведомить посетителей о технических работах или грядущем событии на сайте на CMS DLE 19, поможет <b>счётчик обратного отсчёта</b>. В этой статье — готовый код, инструкция по внедрению и советы по кастомизации.</span></p> <h2><span style="font-size:22.0016px;color:#236fa1;">Зачем нужен счётчик в DLE 19</span></h2> <p><span style="font-size:16.4px;">Счётчик решает сразу несколько задач:</span></p> <ul> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">информирует пользователей о времени до завершения работ или старта события;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">снижает число повторных обращений с вопросами «когда заработает?»;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">поддерживает визуальный интерес к странице во время простоя;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">придаёт интерфейсу динамичность и современность.</span></p> </li> </ul> <h3><span style="font-size:22px;color:#236fa1;">Что входит в решение</span></h3> <p><span style="font-size:16.4px;">Готовый код включает:</span></p> <ul> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">HTML‑разметку блока счётчика;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">CSS‑стили для оформления и анимации;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">jаvascript‑логику расчёта времени и обновления интерфейса.</span></p> </li> <li><span style="font-size:16.4px;">Блок рекламы под таймером отсчета времени;</span></li> <li><span style="font-size:16.4px;">Появление уведомления "Работы завершены! Сайт снова доступен!"</span></li> </ul> <p><span style="font-size:16.4px;">Всё работает <b>без внешних библиотек</b> — только чистый код, совместимый с DLE 19.</span></p> <h3><span style="font-size:22px;color:#236fa1;">Шаг 1. HTML‑разметка</span></h3> <p><span style="font-size:16.4px;">Вставьте в нужный шаблон DLE (например, <code>offline.tpl</code>) или замените полностью на следующий код:</span></p> <div style="color:#333333;border:1px solid rgb(0,137,123);padding:0.7rem;background-color:#e0f2f1;box-shadow:rgba(0,0,0,0.24) 0px 1px 2px;"> <p><b><span style="font-size:16.4px;">(Не забудьте вставить {reason} - Используется для вывода причины отключения сайта, которое вы задаете в настройках скрипта) Замените или добавьте ниже "Сайт вернется в строй через" вот это {reason}</span></b></p> </div> <pre class="language-markup"><code>&lt;div class="maintenance-countdown"&gt; &lt;div class="countdown-border"&gt;&lt;/div&gt; &lt;!-- Градиентная рамка --&gt; &lt;div class="countdown-content"&gt; &lt;h3&gt;Технические работы&lt;/h3&gt; &lt;p&gt;Сайт вернётся в строй через:&lt;/p&gt; &lt;div class="timer"&gt; &lt;div class="time-unit"&gt; &lt;span id="days"&gt;00&lt;/span&gt; &lt;span class="label"&gt;Дней&lt;/span&gt; &lt;/div&gt; &lt;div class="time-unit"&gt; &lt;span id="hours"&gt;00&lt;/span&gt; &lt;span class="label"&gt;Часов&lt;/span&gt; &lt;/div&gt; &lt;div class="time-unit"&gt; &lt;span id="minutes"&gt;00&lt;/span&gt; &lt;span class="label"&gt;Минут&lt;/span&gt; &lt;/div&gt; &lt;div class="time-unit"&gt; &lt;span id="seconds"&gt;00&lt;/span&gt; &lt;span class="label"&gt;Секунд&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="ad-container"&gt; &lt;script src="//wpwidget.ru/js/wps-widget-entry.min.js" async&gt;&lt;/script&gt; &lt;div class="wps-widget" data-w="//wpwidget.ru/greetings?orientation=3&amp;pid=5452"&gt;&lt;/div&gt; &lt;/div&gt; </code></pre> <h2>Шаг 2. CSS‑стили</h2> <p><span style="font-size:16.4px;">Добавьте в файл стилей вашего шаблона (<code>style.css</code>):</span></p> <pre class="language-markup"><code>body { background-color: #0c4951; } .maintenance-countdown { position: relative; width: 100%; max-width: 1000px; margin: 40px auto; overflow: hidden; border-radius: 16px; } /* Градиентная рамка (анимированная) */ .countdown-border { position: absolute; inset: 0; border-radius: 16px; background: conic-gradient( from var(--angle), #ff9800, #e91e63, #9c27b0, #3f51b5, #03a9f4, #00bcd4, #4caf50, #8bc34a ); --angle: 0deg; animation: rotate 8s linear infinite; filter: blur(8px); } @keyframes rotate { to { --angle: 360deg; } } /* Контент внутри (накладывается поверх рамки) */ .countdown-content { position: relative; padding: 30px; background: #086189; /* Тёмный фон для контраста */ border-radius: 14px; color: white; text-align: center; z-index: 1; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); } .countdown-content h3 { margin: 0 0 10px 0; font-size: 1.8em; color: #fff; } .countdown-content p { margin: 0 0 25px 0; color: #bbb; font-size: 1.1em; } /* Таймер */ .timer { display: flex; justify-content: center; gap: 15px; flex-wrap: wrap; } .time-unit { text-align: center; min-width: 70px; } #days, #hours, #minutes, #seconds { font-size: 2.6em; font-weight: bold; color: #ff9800; line-height: 1.2; } .label { display: block; font-size: 0.8em; color: #888; text-transform: uppercase; letter-spacing: 0.5px; margin-top: 5px; } /* Анимация градиента */ @keyframes gradient-shift { 0% { background-position: 0% 50%; } 100% { background-position: 400% 50%; } } /* Адаптивность */ @media (max-width: 768px) { .maintenance-countdown { margin: 20px auto; max-width: 95%; } .timer { gap: 10px; } #days, #hours, #minutes, #seconds { font-size: 2.2em; } } @media (max-width: 480px) { .countdown-content { padding: 20px; } .time-unit { min-width: auto; margin: 5px 0; } } /* Контейнер для рекламы */ .ad-container { position: relative; width: 100%; max-width: 1000px; margin: 40px auto; overflow: hidden; border-radius: 16px; }</code></pre> <div> <div> <div></div> </div> <div> <h3><span style="font-size:22.0016px;color:#236fa1;">Шаг 3. jаvascript‑логика</span></h3> </div> </div> <p><span style="font-size:16.4px;">Вставьте перед закрывающим <code>&lt;/body&gt;</code> или в отдельный JS‑файл:</span></p> <div> <div> <pre class="language-markup"><code>&lt;script&gt; document.addEventListener('DOMContentLoaded', function() { // Укажите дату завершения работ (формат: YYYY-MM-DDTHH:MM:SS) const targetDate = new Date('2026-01-02T18:20:00'); // Элементы DOM const daysEl = document.getElementById('days'); const hoursEl = document.getElementById('hours'); const minutesEl = document.getElementById('minutes'); const secondsEl = document.getElementById('seconds'); function updateCountdown() { const now = new Date(); const remainingTime = targetDate - now; // Если время вышло if (remainingTime &lt;= 0) { daysEl.textContent = '00'; hoursEl.textContent = '00'; minutesEl.textContent = '00'; secondsEl.textContent = '00'; document.querySelector('.countdown-content p').textContent = 'Работы завершены! Сайт снова доступен.'; return; } // Расчёт времени const days = Math.floor(remainingTime / (1000 * 60 * 60 * 24)); const hours = Math.floor((remainingTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes = Math.floor((remainingTime % (1000 * 60 * 60)) / (1000 * 60)); const seconds = Math.floor((remainingTime % (1000 * 60)) / 1000); // Обновление значений daysEl.textContent = days.toString().padStart(2, '0'); hoursEl.textContent = hours.toString().padStart(2, '0'); minutesEl.textContent = minutes.toString().padStart(2, '0'); secondsEl.textContent = seconds.toString().padStart(2, '0'); } // Запускаем обновление каждую секунду setInterval(updateCountdown, 1000); updateCountdown(); // Инициализация }); &lt;/script&gt;</code></pre> <h3><span style="font-size:22px;color:#236fa1;">Как настроить счетчик под свои нужды</span></h3> </div> </div> <ol> <li> <p><span style="font-size:16.4px;"><b>Дата окончания</b></span><br><span style="font-size:16.4px;">Измените значение "<span style="color:#ba372a;">const targetDate</span>" в JS на нужную дату в формате <code>ГГГГ-ММ-ДДТЧЧ:ММ:СС</code>.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Текст сообщений</b></span><br><span style="font-size:16.4px;">Поправьте заголовки и подписи в HTML (<code>&lt;h3&gt;</code> и <code>&lt;p&gt;</code>).</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Цвета и стили</b></span><br><span style="font-size:16.4px;">В CSS измените:</span></p> <ul> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><code>background</code> блока;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">цвета текста (<code>color</code>);</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">размеры шрифтов (<code>font-size</code>).</span></p> </li> </ul> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Анимация градиента</b></span><br><span style="font-size:16.4px;">В <code>@keyframes glow</code> можно:</span></p> <ul> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">поменять скорость (измените <code>8s</code>);</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">сменить углы градиента в <code>background</code>.</span></p> </li> </ul> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Адаптивность</b></span><br><span style="font-size:16.4px;">В медиа‑запросе <code>@media (max-width: 768px)</code> настройте отступы и размеры для мобильных.</span></p> </li> </ol> <h2>Полезные советы</h2> <ul> <li> <p><span style="font-size:16.4px;"><b>Проверяйте время</b> — убедитесь, что часовой пояс сервера и целевой аудитории совпадают.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Тестируйте на мобильных</b> — откройте страницу на смартфоне, чтобы проверить читаемость.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Не перегружайте дизайн</b> — счётчик должен быть заметным, но не мешать восприятию информации.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Добавьте сообщение о завершении</b> — как в примере (<code>«Работы завершены!»</code>).</span></p> </li> </ul> <p><span style="font-size:16.4px;">Счётчик легко интегрируется в любой шаблон DLE, не требует внешних зависимостей и адаптируется под экраны разных размеров. Используйте его для информирования о техобслуживании, запусках или акциях — и держите аудиторию в курсе событий!</span></p> <p><span style="font-size:16.4px;">Можете скачать готовый файл offline.tpl ниже , нажав на кнопку скачать!</span></p>]]></content:encoded>
</item><item>
<title>Новогодняя HTML гирлянда со снежинками: создаём праздничное настроение на сайте</title>
<link>https://web-maxs.ru/design_and_graphics/357-novogodnjaja-girljanda-so-snezhinkami-sozdaem-prazdnichnoe-nastroenie-na-sajte.html</link>
<pdalink>https://web-maxs.ru/design_and_graphics/357-novogodnjaja-girljanda-so-snezhinkami-sozdaem-prazdnichnoe-nastroenie-na-sajte.html</pdalink>
<guid>357</guid>
<pubDate>Fri, 12 Dec 2025 09:30:04 +0400</pubDate>
<category>native-yes</category>

<content:encoded><![CDATA[<p><span style="font-size:16.4px;">В преддверии новогодних праздников каждый владелец сайта задумывается о том, как придать своему ресурсу особое праздничное настроение. Предлагаем готовое решение — <b>интерактивную HTML новогоднюю гирлянду с падающими снежинками</b>, которая превратит обычный веб‑интерфейс в настоящую зимнюю сказку.</span></p> <h2><span style="font-size:22.0016px;color:#236fa1;">Что представляет собой решение HTML гирлянды</span></h2> <h3><span style="color:#236fa1;">Основные элементы декора</span></h3> <p><span style="font-size:16.4px;">Наш новогодний комплект включает два ключевых визуальных компонента:</span></p> <ol> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Мерцающая HTML гирлянда</b> — ряд разноцветных огоньков в верхней части экрана, создающих эффект настоящей праздничной иллюминации.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Падающий снег</b> — анимированные снежинки разных форм и размеров, плавно спускающиеся по всей площади сайта.</span></p> </li> </ol> <h3><span style="color:#236fa1;">Технические особенности</span></h3> <ul> <li> <p><span style="font-size:16.4px;"><b>Полная совместимость</b> с DLE 19 и другими CMS.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Отсутствие внешних зависимостей</b> — работает на чистом CSS и jаvascript.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Адаптивность</b> — корректно отображается на любых устройствах.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Оптимизированная производительность</b> — не нагружает браузер.</span></p> </li> </ul> <h2><span style="font-size:22.0016px;color:#236fa1;">Как это работает: технические детали</span></h2> <h3><span style="color:#236fa1;">Гирлянда с огоньками для сайта</span></h3> <p><span style="font-size:16.4px;">Каждый огонёк — это отдельный HTML‑элемент с уникальными характеристиками:</span></p> <ul> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>5 цветов</b> (красный, зелёный, синий, жёлтый, фиолетовый);</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>индивидуальная анимация</b> мерцания с разной скоростью;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>случайная задержка старта</b> для асинхронного эффекта;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>световые эффекты</b> через <code>box-shadow</code> для объёмности.</span></p> </li> </ul> <h3><span style="color:#236fa1;">Падающие снежинки</span></h3> <p><span style="font-size:16.4px;">Механизм снегопада построен на динамическом создании элементов:</span></p> <ul> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>7 вариантов символов</b> снежинок (от классических до звёздочек);</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>рандомные параметры</b> размера и скорости падения;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>естественная физика движения</b> с горизонтальным смещением;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>автоматическое удаление</b> после завершения анимации.</span></p> </li> </ul> <h2><span style="color:#236fa1;font-size:22.0016px;">Преимущества решения</span></h2> <h3><span style="color:#236fa1;">Для владельцев сайта</span></h3> <ul> <li> <p><span style="font-size:16.4px;"><b>Простота внедрения</b> — три блока кода без сложной настройки.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Гибкая кастомизация</b> — легко изменить цвета, плотность снега, скорость анимации.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Низкое потребление ресурсов</b> — не влияет на скорость загрузки.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Не мешает контенту</b> — все элементы имеют <code>pointer-events: none</code>.</span></p> </li> </ul> <h3><span style="color:#236fa1;">Для посетителей</span></h3> <ul> <li> <p><span style="font-size:16.4px;"><b>Атмосферность</b> — создаёт праздничное настроение без навязчивости.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Плавность анимации</b> — нет рывков и задержек.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Адаптивность</b> — красиво выглядит на любом экране.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Ненавязчивость</b> — декор не перекрывает основной контент.</span></p> </li> </ul> <h2><span style="font-size:22.0016px;color:#236fa1;">Пошаговая инструкция по установке</span></h2> <h3><span style="color:#236fa1;">1. Добавление HTML‑разметки</span></h3> <p><span style="font-size:16.4px;">Вставьте в шаблон перед <code>&lt;/body&gt;</code>:</span></p> <pre class="language-markup"><code>&lt;div class="holiday-decor"&gt; &lt;div class="garland"&gt;&lt;/div&gt; &lt;div class="snowfall"&gt;&lt;/div&gt; &lt;/div&gt;</code></pre> <h3><span style="color:#236fa1;"><b><span style="font-size:16.4px;">2. Подключение CSS‑стилей</span></b></span></h3> <div> <pre class="language-markup"><code>&lt;style&gt; /* Основной контейнер */ .holiday-decor { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 9999; overflow: hidden; } /* Гирлянда (верхняя часть экрана) */ .garland { position: absolute; top: 0; left: 0; width: 100%; height: 40px; } /* Общий стиль огонька */ .light { position: absolute; width: 12px; height: 12px; border-radius: 50%; filter: brightness(1.3); } /* Цвета огоньков */ .light.red { background: #ff3333; } .light.green { background: #33cc33; } .light.blue { background: #3366ff; } .light.yellow { background: #ffff33; } .light.purple { background: #cc33ff; } /* Анимации мерцания (разные для каждого типа) */ @keyframes flicker-red { 0%, 100% { opacity: 0.4; box-shadow: 0 0 8px rgba(255, 51, 51, 0.6); } 25% { opacity: 1; box-shadow: 0 0 12px rgba(255, 51, 51, 0.9); } 50% { opacity: 0.5; } } @keyframes flicker-green { 0%, 100% { opacity: 0.3; box-shadow: 0 0 6px rgba(51, 204, 51, 0.5); } 30% { opacity: 0.9; box-shadow: 0 0 10px rgba(51, 204, 51, 0.8); } 60% { opacity: 0.4; } } @keyframes flicker-blue { 0%, 100% { opacity: 0.5; box-shadow: 0 0 7px rgba(51, 102, 255, 0.6); } 20% { opacity: 0.8; box-shadow: 0 0 11px rgba(51, 102, 255, 0.9); } 40% { opacity: 0.3; } } @keyframes flicker-yellow { 0%, 100% { opacity: 0.2; box-shadow: 0 0 5px rgba(255, 255, 51, 0.4); } 15% { opacity: 0.9; box-shadow: 0 0 9px rgba(255, 255, 51, 0.8); } 45% { opacity: 0.7; } 75% { opacity: 0.5; } } @keyframes flicker-purple { 0%, 100% { opacity: 0.4; box-shadow: 0 0 6px rgba(204, 51, 255, 0.5); } 22% { opacity: 0.8; box-shadow: 0 0 10px rgba(204, 51, 255, 0.8); } 55% { opacity: 0.3; } } /* Применение анимаций к классам */ .light.red { animation: flicker-red 1.8s infinite ease-in-out; } .light.green { animation: flicker-green 2.1s infinite ease-in-out; } .light.blue { animation: flicker-blue 1.9s infinite ease-in-out; } .light.yellow { animation: flicker-yellow 2.3s infinite ease-in-out; } .light.purple { animation: flicker-purple 2s infinite ease-in-out; } /* Контейнер для снежинок */ .snowfall { position: absolute; inset: 0; } /* Снежинка */ .snowflake { position: absolute; color: white; font-family: Arial, sans-serif; font-size: 18px; opacity: 0; text-shadow: 0 0 2px rgba(0, 0, 0, 0.4); animation: fall 12s linear forwards; } /* Анимация падения снежинки */ @keyframes fall { 0% { transform: translateY(-10vh) translateX(0); opacity: 0; } 10% { opacity: 0.7; } 100% { transform: translateY(110vh) translateX(var(--x-offset)); opacity: 0; } } &lt;/style&gt;</code></pre> </div> <p><span style="font-size:16.4px;">Добавьте в файл стилей все правила для классов <span style="color:#ba372a;"><b><code>.holiday-decor</code></b></span>, <span style="color:#ba372a;"><b><code>.garland</code></b></span>, <span style="color:#ba372a;"><b><code>.light</code></b></span> и <b><span style="color:#ba372a;"><code>.snowflake</code></span></b>.</span></p> <h3><span style="color:#236fa1;">3. Внедрение jаvascript‑кода</span></h3> <p><span style="font-size:16.4px;">Разместите скрипт перед <code>&lt;/body&gt;</code>, убедившись, что:</span></p> <pre class="language-markup"><code>&lt;script&gt; document.addEventListener('DOMContentLoaded', () =&gt; { const garland = document.querySelector('.garland'); const snowfall = document.querySelector('.snowfall'); // Типы огоньков для гирлянды const lightTypes = ['red', 'green', 'blue', 'yellow', 'purple']; // Создаём гирлянду (20 огоньков) for (let i = 0; i &lt; 20; i++) { const light = document.createElement('div'); light.className = `light ${lightTypes[i % lightTypes.length]}`; // Случайная позиция по горизонтали (равномерное распределение) const xPos = (i / 19) * 100; light.style.left = `calc(${xPos}% - 4px)`; // Центрируем (ширина 8px) // Небольшая вертикальная «волна» для естественности light.style.top = `${15 + Math.random() * 10}px`; // Задержка для асинхронного старта анимации light.style.animationDelay = `${Math.random() * 1}s`; garland.appendChild(light); } // Символы снежинок const snowSymbols = ['❄', '❅', '❆', '☆', '★', '*', '.']; // Функция создания снежинки const createSnowflake = () =&gt; { const snowflake = document.createElement('div'); snowflake.className = 'snowflake'; // Случайный символ snowflake.textContent = snowSymbols[Math.floor(Math.random() * snowSymbols.length)]; // Параметры const size = Math.random() * 0.8 + 0.6; // 0.6–1.4em const duration = Math.random() * 6 + 9; // 9–15 сек const xOffset = (Math.random() - 0.5) * 120; // Смещение по X // Стили snowflake.style.fontSize = `${size}em`; snowflake.style.left = `${Math.random() * window.innerWidth}px`; snowflake.style.setProperty('--x-offset', `${xOffset}px`); snowflake.style.animationDuration = `${duration}s`; snowfall.appendChild(snowflake); // Удаление после анимации setTimeout(() =&gt; snowflake.remove(), (duration + 1) * 1000); }; // Запуск снегопада (каждые 400 мс) setInterval(createSnowflake, 400); // Дополнительно: плавное появление декора document.querySelectorAll('.holiday-decor &gt; *').forEach(el =&gt; { el.style.opacity = 0; setTimeout(() =&gt; { el.style.transition = 'opacity 1.5s'; el.style.opacity = 1; }, 500); }); }); &lt;/script&gt;</code></pre> <ul> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">все селекторы соответствуют HTML;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">пути к символам снежинок корректны.</span></p> </li> </ul> <h2><span style="font-size:22.0016px;color:#236fa1;">Тонкая настройка под ваш бренд</span></h2> <h3><span style="color:#236fa1;">Изменение цветовой палитры</span></h3> <p><span style="font-size:16.4px;">Замените HEX‑коды в классах <span style="color:#ba372a;"><b><code>.light.red</code>, <code>.light.green</code></b></span> и др. на фирменные цвета вашего сайта.</span></p> <h3><span style="color:#236fa1;">Регулировка плотности декора</span></h3> <ul> <li> <p><span style="font-size:16.4px;"><b>Гирлянда</b>: измените количество итераций в цикле <span style="color:#ba372a;"><b><code>for</code></b></span> (по умолчанию 20).</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Снег</b>: отрегулируйте интервал в <span style="color:#ba372a;"><b><code>setInterval()</code></b></span> (чем больше значение, тем реже падают снежинки).</span></p> </li> </ul> <h3><span style="color:#236fa1;">Скорость анимации</span></h3> <p><span style="font-size:16.4px;">Поменяйте значения в <span style="color:#ba372a;"><b><code>@keyframes</code></b></span> (например, <code>1.8s</code> на <code>2.5s</code>) для более медленного/быстрого мерцания.</span></p> <h2><span style="font-size:22.0016px;color:#236fa1;">Рекомендации по использованию</span></h2> <h3><span style="color:#236fa1;">Оптимальные сценарии</span></h3> <ul> <li> <p><span style="font-size:16.4px;"><b>Новогодние акции</b> — подчеркнёт сезонные предложения.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Праздничные лендинги</b> — создаст нужную атмосферу.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Корпоративные сайты</b> — добавит человечности в официальный стиль.</span></p> </li> </ul> <h3><span style="color:#236fa1;">Когда лучше отключить</span></h3> <ul> <li> <p><span style="font-size:16.4px;">В рабочих зонах с высокой концентрацией внимания.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">На страницах с тяжёлой графикой (чтобы не перегружать GPU).</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">Для пользователей с чувствительностью к мерцанию (предусмотрите переключатель).</span></p> </li> </ul> <h2><span style="color:#236fa1;">Будущие улучшения</span></h2> <h3><span style="color:#236fa1;">Планируемые фичи</span></h3> <ul> <li> <p><span style="font-size:16.4px;"><b>Режим «Эко»</b> — снижение нагрузки на слабых устройствах.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Настройка через админ‑панель</b> — визуальный редактор декора.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;"><b>Сезонные вариации</b> — смена тематики (весенние цветы, осенние листья).</span></p> </li> </ul> <h3><span style="color:#236fa1;">Возможности кастомизации</span></h3> <ul> <li> <p><span style="font-size:16.4px;">Добавление звуковых эффектов.</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">Интерактивные элементы (например, «рассыпающиеся» при клике снежинки).</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">Интеграция с календарём событий (автоматическое включение/выключение).</span></p> </li> </ul> <p><span style="font-size:16.4px;">Предложенное решение — это <b>баланс эстетики и производительности</b>. Оно:</span></p> <ul> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">мгновенно создаёт праздничное настроение;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">не требует глубоких знаний программирования для внедрения;</span></p> </li> <li style="font-size:16.4px;"> <p><span style="font-size:16.4px;">легко адаптируется под любые задачи.</span></p> </li> </ul> <p><span style="font-size:16.4px;">Попробуйте внедрить новогоднюю гирлянду со снежинками — и ваш сайт заиграет новыми красками в преддверии праздников!</span></p> <p><b><span style="font-size:16.4px;color:#169179;"><i>С наступающим Новым годом! Пусть ваш онлайн‑проект сияет ярко, как праздничная иллюминация.</i> 🎄</span></b></p>]]></content:encoded>
</item></channel></rss>