Блок с ценами на услуги салона красоты
Прайс с переключателем категорий: ногти, волосы, брови, уход. Внутри каждой — строки услуг с длительностью, ценой и кнопкой записи.
<section class="vbtsu">
<div class="vbtsu-wrap">
<div class="vbtsu-head">
<h2 class="vbtsu-h2">Цены</h2>
<p class="vbtsu-lead">Стоимость окончательная: снятие, форма и уход уже внутри. Доплат на кассе не бывает.</p>
</div>
<div class="vbtsu-tabs" id="vbtsu-tabs" role="tablist" aria-label="Категории услуг"></div>
<div class="vbtsu-list" id="vbtsu-list"></div>
</div>
</section>
<style>
.vbtsu, .vbtsu *, .vbtsu *::before, .vbtsu *::after { box-sizing: border-box; }
.vbtsu {
--acc: #b9705f; --acc-dark: #a25e4e; --ink: #33272a; --muted: #7a6a6c; --line: #ece1dd; --soft: #faf3f1;
--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, 80px) 20px;
}
.vbtsu-wrap { max-width: 1000px; margin: 0 auto; padding: 0 clamp(0px, 2vw, 40px); }
.vbtsu-head { margin-bottom: clamp(22px, 2.6vw, 34px); }
.vbtsu-h2 { font-family: var(--fh); font-size: clamp(26px, 3.4vw, 42px); line-height: 1.1; font-weight: 700; letter-spacing: -.02em; margin: 0 0 10px; }
.vbtsu-lead { font-size: 16px; line-height: 1.6; color: var(--muted); margin: 0; max-width: 40em; }
.vbtsu-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 22px; }
.vbtsu-tab { border: 1.5px solid var(--line); margin: 0; -webkit-appearance: none; appearance: none; font: inherit; cursor: pointer;
background: #fff !important; color: var(--muted) !important; border-radius: 999px; padding: 10px 20px; font-size: 15px; transition: .18s ease; }
.vbtsu-tab:hover { border-color: var(--acc); color: var(--ink) !important; }
.vbtsu-tab[aria-selected="true"] { background: var(--acc) !important; border-color: var(--acc); color: #fff !important; }
.vbtsu-list { border-top: 1px solid var(--line); }
.vbtsu-row { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 16px;
padding: 17px 0; border-bottom: 1px solid var(--line); }
.vbtsu-row__n { font-size: 16px; font-weight: 500; }
.vbtsu-row__d { display: block; font-size: 13px; color: var(--muted); margin-top: 3px; }
.vbtsu-row__p { font-family: var(--fh); font-size: 18px; font-weight: 700; white-space: nowrap; }
.vbtsu-row__b, .vbtsu-row__b:link, .vbtsu-row__b:visited, .vbtsu-row__b:active, .vbtsu-row__b:focus {
display: inline-flex; align-items: center; justify-content: center; min-height: 42px; padding: 0 20px; border-radius: 999px;
font-size: 14px; font-weight: 600; white-space: nowrap;
background: var(--soft); color: var(--acc) !important; text-decoration: none !important; transition: .18s ease; }
.vbtsu-row__b:hover { background: var(--acc); color: #fff !important; }
@media (max-width: 620px) {
.vbtsu-row { grid-template-columns: minmax(0, 1fr) auto; }
.vbtsu-row__b { grid-column: 1 / -1; justify-self: start; }
}
@media (prefers-reduced-motion: reduce) { .vbtsu * { transition: none !important; } }
</style>
<script>
(function () {
var CTA_HREF = '#zapis'; /* куда ведут кнопки записи: якорь или ссылка */
/* ── ПРАЙС: категория → список услуг ── */
var PRICE = {
'Ногти': [
{ n: 'Маникюр с покрытием гель-лаком', d: 'снятие, форма, уход в цене · 90 мин', p: '2 800 ₽' },
{ n: 'Маникюр без покрытия', d: 'обработка и питание · 50 мин', p: '1 600 ₽' },
{ n: 'Педикюр с покрытием', d: 'аппаратный, с обработкой стоп · 110 мин', p: '3 600 ₽' },
{ n: 'Укрепление и восстановление', d: 'база под нагрузку · 30 мин', p: '+700 ₽' },
{ n: 'Дизайн от простого к сложному', d: 'за 2 ногтя', p: 'от 300 ₽' }
],
'Волосы': [
{ n: 'Женская стрижка и укладка', d: 'консультация по форме · 90 мин', p: 'от 3 200 ₽' },
{ n: 'Окрашивание в один тон', d: 'краситель включён · 120 мин', p: 'от 4 800 ₽' },
{ n: 'Сложное окрашивание', d: 'аир-тач, шатуш · от 4 часов', p: 'от 9 500 ₽' },
{ n: 'Уход по длине', d: 'реконструкция · 40 мин', p: '2 400 ₽' },
{ n: 'Мужская стрижка', d: 'машинка и ножницы · 45 мин', p: '1 800 ₽' }
],
'Брови и ресницы': [
{ n: 'Коррекция бровей', d: 'форма по типу лица · 40 мин', p: '1 200 ₽' },
{ n: 'Окрашивание бровей', d: 'краска или хна · 30 мин', p: '1 100 ₽' },
{ n: 'Ламинирование бровей', d: 'с уходом · 60 мин', p: '2 900 ₽' },
{ n: 'Наращивание ресниц', d: 'классика или объём · 150 мин', p: 'от 3 400 ₽' },
{ n: 'Снятие ресниц', d: 'бережное, с уходом · 25 мин', p: '700 ₽' }
],
'Лицо': [
{ n: 'Комбинированная чистка', d: 'ультразвук и механика · 90 мин', p: '4 200 ₽' },
{ n: 'Пилинг по показаниям', d: 'подбор на консультации · 50 мин', p: 'от 3 800 ₽' },
{ n: 'Уходовая процедура', d: 'маска и массаж · 70 мин', p: '3 300 ₽' },
{ n: 'Массаж лица', d: 'лимфодренаж · 45 мин', p: '2 600 ₽' },
{ n: 'Консультация косметолога', d: 'разбор ухода · 30 мин', p: 'бесплатно' }
]
};
var roots = document.querySelectorAll('.vbtsu');
for (var i = 0; i < roots.length; i++) init(roots[i]);
function init(root) {
if (root.__vb) return; root.__vb = 1;
var tabsBox = root.querySelector('#vbtsu-tabs'), listBox = root.querySelector('#vbtsu-list');
var keys = Object.keys(PRICE), current = keys[0];
keys.forEach(function (k) {
var b = document.createElement('button');
b.type = 'button'; b.className = 'vbtsu-tab'; b.setAttribute('role', 'tab');
b.setAttribute('aria-selected', k === current ? 'true' : 'false');
b.textContent = k;
b.addEventListener('click', function () {
current = k;
tabsBox.querySelectorAll('.vbtsu-tab').forEach(function (x) { x.setAttribute('aria-selected', 'false'); });
b.setAttribute('aria-selected', 'true');
draw();
});
tabsBox.appendChild(b);
});
function draw() {
listBox.innerHTML = PRICE[current].map(function (r) {
return '<div class="vbtsu-row"><div><span class="vbtsu-row__n">' + r.n + '<\/span>' +
'<span class="vbtsu-row__d">' + r.d + '<\/span><\/div>' +
'<span class="vbtsu-row__p">' + r.p + '<\/span>' +
'<a class="vbtsu-row__b" href="' + CTA_HREF + '">Записаться<\/a><\/div>';
}).join('');
}
draw();
}
})();
</script> Вставляется целиком в блок T123 «HTML-код». Внутри уже есть стили и скрипт, подключать ничего не нужно.
Как вставить блок в Tilda
- Скопируйте кодКнопка «Скопировать код» выше кладёт всё содержимое в буфер обмена.
- Добавьте блок T123В редакторе страницы: «Библиотека блоков» → «Другое» → T123 «HTML-код».
- Вставьте и сохранитеНажмите «Контент», вставьте код в поле, сохраните и обновите страницу.
- ОпубликуйтеВ превью скрипты Tilda работают не всегда — проверяйте на опубликованной странице.
Подробная инструкция с граблями — как вставить вайб-блок в Tilda.
Что менять под себя
| Где в коде | За что отвечает |
|---|---|
объект PRICE в скрипте | категории, услуги, длительность и цены |
CTA_HREF | куда ведёт кнопка записи: якорь или ссылка |
--acc | цвет активной категории и кнопок |
Цены на услуги салона: зачем он нужен
Салонный прайс — это тридцать позиций, которые нельзя вываливать одним списком. Переключатель категорий держит блок компактным: человек видит десять строк, а не сто.
Каждая строка — услуга, длительность и цена, выровненные по колонкам. Кнопка записи ведёт на якорь формы или открывает виджет — адрес задаётся один раз в разметке.
Вопросы по этому блоку
-
В объекте PRICE добавьте новый ключ с массивом услуг. Вкладка в переключателе появится сама, вёрстку править не нужно.
-
Да, поле цены — обычная строка, пишите «от 1 500 ₽» или «1 500–2 800 ₽». Никакой арифметики блок с ней не делает.
-
Да. Код на этой странице копируется целиком, без регистрации и подписки. Указывать авторство не нужно, использовать можно в коммерческих проектах.
-
Нет. Все классы внутри имеют собственный префикс vbtsu, поэтому не пересекаются ни со стилями Tilda, ни с другими блоками. Скрипт привязан к своему элементу и запускается один раз, даже если блок вставлен дважды.
-
Раскладка перестраивается под узкие экраны, размеры заданы через clamp, поля ввода имеют шрифт 16 пикселей — iOS не будет зумить страницу при фокусе. Отдельной мобильной версии подключать не нужно.
Другие блоки тарифов
Ещё блоки для салонов красоты
Собрать сайт целиком, а не по блокам
Дровосеки делают сайты на Tilda под ключ: структура, тексты, дизайн, вёрстка и вайб-блоки под задачи бизнеса.