Задать вопрос директору
Telegram
VK
Звонок

Первый экран для сайта товарного бренда

Первый экран магазина своего бренда: оффер, три опорные цифры, переключаемая витрина разделов с ценами и рисованный товар вместо фотографии.

Живое демо — блок работает прямо здесь

Код блока

<section class="vbptb">
  <div class="vbptb-wrap">
    <div class="vbptb-main">
      <span class="vbptb-tag">Свой цех в Туле, отгружаем с 2016 года</span>
      <h1 class="vbptb-h1">Посуда для кухни, которую мы <span>делаем и отправляем сами</span></h1>
      <p class="vbptb-lead">Формуем и обжигаем керамику на собственном участке, там же шлифуем деревянные подставки и доски. Заказ собираем со своего склада в день оплаты, поэтому срок в пути зависит только от перевозчика.</p>

      <div class="vbptb-acts">
        <a class="vbptb-btn" href="#katalog">Перейти в каталог</a>
        <a class="vbptb-link" href="#proizvodstvo">Как устроен цех</a>
      </div>

      <ul class="vbptb-nums">
        <li><b data-num="214">0</b><span>позиций в каталоге: посуда, хранение, кухонные мелочи</span></li>
        <li><b data-num="38400">0</b><span>заказов собрали и отправили за девять лет</span></li>
        <li><b data-num="3" data-pre="за ">0</b><span>дня заказ доезжает до городов-миллионников</span></li>
      </ul>
    </div>

    <aside class="vbptb-card">
      <svg class="vbptb-art" viewBox="0 0 320 172" role="img" aria-label="Кружки, тарелки и банки для хранения">
        <g class="vbptb-g vbptb-on" data-k="kruzhki" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
          <path d="M40 62h56v56a10 10 0 0 1-10 10H50a10 10 0 0 1-10-10z"/>
          <path d="M96 76h13a13 13 0 0 1 0 26H96"/>
          <path d="M56 46c0-6 6-6 6-12M74 46c0-6 6-6 6-12" stroke-width="2.4"/>
        </g>
        <g class="vbptb-g" data-k="tarelki" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
          <ellipse cx="176" cy="122" rx="48" ry="14"/>
          <ellipse cx="176" cy="120" rx="28" ry="8" stroke-width="2.2"/>
          <path d="M136 100a40 40 0 0 1 80 0"/>
          <path d="M154 98a22 22 0 0 1 44 0" stroke-width="2.2"/>
        </g>
        <g class="vbptb-g" data-k="hranenie" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
          <rect x="240" y="72" width="32" height="56" rx="7"/>
          <rect x="236" y="60" width="40" height="11" rx="4"/>
          <rect x="282" y="90" width="26" height="38" rx="6"/>
          <rect x="278" y="80" width="34" height="9" rx="4"/>
        </g>
        <path d="M24 148h280" stroke="currentColor" stroke-width="2" opacity=".2"/>
      </svg>

      <div class="vbptb-rows" id="vbptb-rows" role="group" aria-label="Разделы каталога">
        <button type="button" class="vbptb-row vbptb-row--on" data-k="kruzhki">
          <span>Кружки и чашки</span><b>от 690 ₽</b>
        </button>
        <button type="button" class="vbptb-row" data-k="tarelki">
          <span>Тарелки и блюда</span><b>от 940 ₽</b>
        </button>
        <button type="button" class="vbptb-row" data-k="hranenie">
          <span>Банки для хранения</span><b>от 1 150 ₽</b>
        </button>
      </div>

      <p class="vbptb-note" id="vbptb-note"></p>
    </aside>
  </div>
</section>

<style>
.vbptb, .vbptb *, .vbptb *::before, .vbptb *::after { box-sizing: border-box; }
.vbptb {
  --acc: #9c2b45; --acc-dark: #7d2036; --ink: #1e1c1b; --muted: #6b6561; --line: #e4e0dc; --soft: #f7f5f2;
  --f: var(--t-text-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);
  --fh: var(--t-headline-font, var(--f));
  background: #fff; color: var(--ink); font-family: var(--f); padding: clamp(36px, 5vw, 84px) 20px;
}
.vbptb-wrap { max-width: 1220px; margin: 0 auto; padding: 0 clamp(0px, 2vw, 38px);
  display: grid; grid-template-columns: minmax(0, 1.08fr) minmax(0, .92fr); gap: clamp(26px, 4vw, 56px); align-items: center; }
.vbptb-tag { display: inline-block; font-size: 12.5px; font-weight: 600; letter-spacing: .01em; color: var(--acc);
  background: var(--soft); border-radius: 999px; padding: 8px 15px; margin-bottom: 18px; }
.vbptb-h1 { font-family: var(--fh); font-size: clamp(29px, 4.1vw, 52px); line-height: 1.08; font-weight: 700;
  letter-spacing: -.022em; margin: 0 0 16px; }
.vbptb-h1 span { color: var(--acc); }
.vbptb-lead { font-size: clamp(15.5px, 1.3vw, 18px); line-height: 1.62; color: var(--muted); margin: 0 0 28px; max-width: 32em; }

.vbptb-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 22px; margin-bottom: 34px; }
.vbptb-btn, .vbptb-btn:link, .vbptb-btn:visited, .vbptb-btn:active, .vbptb-btn:focus {
  display: inline-flex; align-items: center; justify-content: center; min-height: 56px; padding: 0 30px; border-radius: 12px;
  font-size: 16px; font-weight: 600; background: var(--acc); color: #fff !important; text-decoration: none !important; transition: background .2s ease; }
.vbptb-btn:hover { background: var(--acc-dark); color: #fff !important; }
.vbptb-link, .vbptb-link:link, .vbptb-link:visited, .vbptb-link:active, .vbptb-link:focus {
  font-size: 15px; font-weight: 500; color: var(--ink) !important; text-decoration: underline !important; text-underline-offset: 4px; }
.vbptb-link:hover { color: var(--acc) !important; }

.vbptb-nums { list-style: none; margin: 0; padding: 0; display: grid;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 18px 24px; }
.vbptb-nums li { border-top: 2px solid var(--line); padding-top: 14px; }
.vbptb-nums b { display: block; font-family: var(--fh); font-size: clamp(26px, 3vw, 34px); line-height: 1.05;
  font-weight: 700; letter-spacing: -.02em; margin-bottom: 6px; }
.vbptb-nums span { display: block; font-size: 13.5px; line-height: 1.5; color: var(--muted); }

.vbptb-card { background: var(--soft); border-radius: 26px; padding: clamp(22px, 2.6vw, 32px); }
.vbptb-art { display: block; width: 100%; height: auto; color: var(--ink); margin-bottom: 6px; }
.vbptb-g { transition: opacity .3s ease, color .3s ease; }
.vbptb-g[data-k] { opacity: .22; }
.vbptb-g.vbptb-on { opacity: 1; color: var(--acc); }

.vbptb-rows { display: grid; gap: 8px; margin-bottom: 16px; }
.vbptb-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%;
  border: 1.5px solid transparent; margin: 0; padding: 14px 18px; -webkit-appearance: none; appearance: none;
  font: inherit; cursor: pointer; text-align: left; border-radius: 13px; background: #fff !important; color: var(--ink) !important;
  transition: border-color .2s ease; }
.vbptb-row:hover { border-color: var(--line); }
.vbptb-row span { font-size: 15px; }
.vbptb-row b { font-size: 14px; font-weight: 600; color: var(--muted); white-space: nowrap; }
.vbptb-row--on { border-color: var(--acc); }
.vbptb-row--on b { color: var(--acc); }
.vbptb-note { margin: 0; font-size: 12.5px; line-height: 1.55; color: var(--muted); min-height: 3.2em; }

@media (max-width: 900px) { .vbptb-wrap { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 560px) {
  .vbptb-h1 { font-size: clamp(25px, 7.4vw, 34px); }
  .vbptb-nums { grid-template-columns: minmax(0, 1fr); }
}
@media (prefers-reduced-motion: reduce) { .vbptb * { transition: none !important; } }
</style>

<script>
(function () {
  /* ── РАЗДЕЛЫ ВИТРИНЫ: подпись под списком ── */
  var NOTES = {
    kruzhki: 'Кружки формуем вручную, оттенок глазури внутри партии слегка расходится. Если нужен ровный набор, отметьте это в комментарии, соберём из одной поставки.',
    tarelki: 'Тарелки идут двух диаметров, 21 и 27 сантиметров. Обе линии переносят посудомоечную машину и духовку до 220 градусов.',
    hranenie: 'Банки закрываются силиконовым кольцом, крышка из бука. Кольца продаём отдельно, если со временем потребуется замена.'
  };

  var roots = document.querySelectorAll('.vbptb');
  for (var i = 0; i < roots.length; i++) init(roots[i]);

  function init(root) {
    if (root.__vb) return; root.__vb = 1;
    var rows = root.querySelectorAll('.vbptb-row');
    var groups = root.querySelectorAll('.vbptb-g');
    var note = root.querySelector('#vbptb-note');
    var nums = root.querySelectorAll('.vbptb-nums b');
    var calm = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;

    function fmt(n) { return String(n).replace(/\B(?=(\d{3})+(?!\d))/g, ' '); }

    function pick(key) {
      for (var a = 0; a < rows.length; a++) {
        var on = rows[a].getAttribute('data-k') === key;
        rows[a].className = on ? 'vbptb-row vbptb-row--on' : 'vbptb-row';
      }
      for (var b = 0; b < groups.length; b++) {
        var g = groups[b];
        g.setAttribute('class', g.getAttribute('data-k') === key ? 'vbptb-g vbptb-on' : 'vbptb-g');
      }
      note.textContent = NOTES[key] || '';
    }

    for (var r = 0; r < rows.length; r++) {
      rows[r].addEventListener('click', function () { pick(this.getAttribute('data-k')); });
    }
    pick('kruzhki');

    function run(el) {
      var to = parseInt(el.getAttribute('data-num'), 10) || 0;
      var pre = el.getAttribute('data-pre') || '';
      if (calm) { el.textContent = pre + fmt(to); return; }
      var start = 0, dur = 1100;
      function step(ts) {
        if (!start) start = ts;
        var p = Math.min(1, (ts - start) / dur);
        el.textContent = pre + fmt(Math.round(to * (1 - Math.pow(1 - p, 3))));
        if (p < 1) requestAnimationFrame(step);
      }
      requestAnimationFrame(step);
    }

    function all() { for (var k = 0; k < nums.length; k++) run(nums[k]); }

    if (!('IntersectionObserver' in window)) { all(); return; }
    var io = new IntersectionObserver(function (es) {
      for (var q = 0; q < es.length; q++) {
        if (es[q].isIntersecting) { all(); io.disconnect(); return; }
      }
    }, { rootMargin: '0px 0px -12% 0px' });
    io.observe(root);
    setTimeout(all, 2600);
  }
})();
</script>

Вставляется целиком в блок T123 «HTML-код». Внутри уже есть стили и скрипт, подключать ничего не нужно.

Как вставить блок в Tilda

  1. Скопируйте кодКнопка «Скопировать код» выше кладёт всё содержимое в буфер обмена.
  2. Добавьте блок T123В редакторе страницы: «Библиотека блоков» → «Другое» → T123 «HTML-код».
  3. Вставьте и сохранитеНажмите «Контент», вставьте код в поле, сохраните и обновите страницу.
  4. ОпубликуйтеВ превью скрипты Tilda работают не всегда — проверяйте на опубликованной странице.

Подробная инструкция с граблями — как вставить вайб-блок в Tilda.

Что менять под себя

Где в кодеЗа что отвечает
--acc в начале стилейфирменный цвет: кнопка, акцент в заголовке, подсветка товара
data-num у трёх плитокпозиции в каталоге, число заказов, срок доставки
NOTES в начале скриптаподписи под витриной для каждого раздела каталога
href у кнопки и ссылкиадрес каталога и страницы о производстве

Первый экран товарного бренда: зачем он нужен

Покупатель приходит на сайт бренда с тремя вопросами: что вы делаете, сколько это стоит и когда приедет. Блок отвечает на все три до первого скролла: слева оффер и цифры по каталогу, заказам и сроку доставки, справа витрина разделов с ценой от. Цифры набегают счётчиком, когда экран попадает в поле зрения.

Товар нарисован векторной заглушкой прямо в разметке, поэтому блок не тянет ни одной картинки со стороны и не портит скорость страницы. Кружки, тарелки и банки разложены по группам: при выборе раздела нужная группа подсвечивается, остальные приглушаются, а под списком меняется поясняющая подпись. Свои изображения можно подставить позже, заменив пути в векторе.

Вопросы по этому блоку

  • Да. Вектор внутри тега svg заменяется на свой рисунок или на тег img с адресом картинки из медиабиблиотеки Tilda. Размеры контейнера заданы в процентах, поэтому вёрстка не поедет.

  • Достаточно вписать готовые значения в тело тегов b вместо нуля и удалить вызов run в скрипте. Блок и так гасит анимацию у посетителей, включивших уменьшение движения в системе.

  • Рабочий предел три или четыре: каждая строка привязана к своей группе в векторе через атрибут data-k. Для пятого раздела добавьте группу в рисунок и строку с тем же ключом в NOTES.

  • Да. Код на этой странице копируется целиком, без регистрации и подписки. Указывать авторство не нужно, использовать можно в коммерческих проектах.

  • Нет. Все классы внутри имеют собственный префикс vbptb, поэтому не пересекаются ни со стилями Tilda, ни с другими блоками. Скрипт привязан к своему элементу и запускается один раз, даже если блок вставлен дважды.

  • Раскладка перестраивается под узкие экраны, размеры заданы через clamp, поля ввода имеют шрифт 16 пикселей — iOS не будет зумить страницу при фокусе. Отдельной мобильной версии подключать не нужно.

Другие главные экраны

Ещё блоки для товарных брендов

Собрать сайт целиком

Дровосеки делают сайты на Tilda под ключ: структура, тексты, дизайн, вёрстка и вайб-блоки под задачи бизнеса.