Блок тарифов на ремонт квартиры
Косметический, капитальный и ремонт под ключ с дизайном в одном ряду: цена за квадрат, срок, перечень работ и пример суммы для квартиры 54 квадратных метра.
<section class="vbtnr">
<div class="vbtnr-wrap">
<div class="vbtnr-head">
<h2 class="vbtnr-h2">Три пакета ремонта и что в них входит</h2>
<p class="vbtnr-lead">Цена указана за квадратный метр общей площади и фиксируется в договоре после замера. Черновые материалы считаются отдельной строкой по спецификации, чистовые вы выбираете сами.</p>
</div>
<div class="vbtnr-grid" id="vbtnr-grid"></div>
<p class="vbtnr-note" id="vbtnr-note"></p>
</div>
</section>
<style>
.vbtnr, .vbtnr *, .vbtnr *::before, .vbtnr *::after { box-sizing: border-box; }
.vbtnr {
--acc: #c96a12; --acc-dark: #a95709; --ink: #1c1f24; --muted: #626973; --line: #e5e2dd; --soft: #f6f3ee;
--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;
}
.vbtnr-wrap { max-width: 1140px; margin: 0 auto; padding: 0 clamp(0px, 2vw, 40px); }
.vbtnr-head { max-width: 46em; margin-bottom: clamp(26px, 3.4vw, 44px); }
.vbtnr-h2 { font-family: var(--fh); font-size: clamp(26px, 3.4vw, 40px); line-height: 1.12; font-weight: 700; letter-spacing: -.02em; margin: 0 0 12px; }
.vbtnr-lead { font-size: 16px; line-height: 1.65; color: var(--muted); margin: 0; }
.vbtnr-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(268px, 1fr)); gap: 18px; align-items: stretch; }
.vbtnr-card { position: relative; display: flex; flex-direction: column; background: #fff;
border: 1px solid var(--line); border-radius: 18px; padding: clamp(22px, 2.4vw, 30px); }
.vbtnr-card--hot { border-color: var(--acc); box-shadow: 0 0 0 1px var(--acc), 0 14px 34px rgba(28, 31, 36, .07); }
.vbtnr-badge { position: absolute; top: -12px; left: clamp(22px, 2.4vw, 30px); background: var(--acc); color: #fff;
font-size: 11.5px; font-weight: 600; line-height: 1; border-radius: 999px; padding: 7px 13px; }
.vbtnr-name { font-family: var(--fh); font-size: 20px; font-weight: 700; margin: 0 0 8px; }
.vbtnr-for { font-size: 13.5px; line-height: 1.55; color: var(--muted); margin: 0 0 20px; }
.vbtnr-price { margin-bottom: 16px; }
.vbtnr-price b { display: block; font-family: var(--fh); font-size: clamp(26px, 2.7vw, 33px); line-height: 1.05; font-weight: 700; letter-spacing: -.02em; }
.vbtnr-price i { display: block; font-style: normal; font-size: 12.5px; color: var(--muted); margin-top: 7px; }
.vbtnr-price em { display: block; font-style: normal; font-size: 13px; color: var(--acc); font-weight: 600; margin-top: 9px; }
.vbtnr-term { display: flex; justify-content: space-between; gap: 12px; font-size: 13px; color: var(--muted);
background: var(--soft); border-radius: 10px; padding: 11px 14px; margin-bottom: 20px; }
.vbtnr-term b { color: var(--ink); font-weight: 600; text-align: right; }
.vbtnr-inc { list-style: none; margin: 0 0 24px; padding: 0; flex: 1; display: grid; gap: 10px; align-content: start; }
.vbtnr-inc li { display: flex; align-items: flex-start; gap: 10px; font-size: 14px; line-height: 1.5; }
.vbtnr-inc li::before { content: ''; flex: 0 0 15px; width: 15px; height: 15px; margin-top: 3px; border-radius: 50%; background: var(--acc);
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat;
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat; }
.vbtnr-cta, .vbtnr-cta:link, .vbtnr-cta:visited, .vbtnr-cta:active, .vbtnr-cta:focus { display: flex; align-items: center; justify-content: center;
margin-top: auto; min-height: 54px; border-radius: 10px; font-size: 15.5px; font-weight: 600;
background: var(--soft); color: var(--ink) !important; text-decoration: none !important; transition: background .18s ease, color .18s ease; }
.vbtnr-cta:hover { background: #ece6dd; color: var(--ink) !important; }
.vbtnr-card--hot .vbtnr-cta { background: var(--acc); color: #fff !important; }
.vbtnr-card--hot .vbtnr-cta:hover { background: var(--acc-dark); color: #fff !important; }
.vbtnr-note { max-width: 52em; margin: clamp(20px, 2.6vw, 30px) 0 0; font-size: 13px; line-height: 1.6; color: var(--muted); }
@media (max-width: 620px) { .vbtnr-grid { grid-template-columns: minmax(0, 1fr); } }
@media (prefers-reduced-motion: reduce) { .vbtnr * { transition: none !important; } }
</style>
<script>
(function () {
var CTA_HREF = '#zamer';
var SAMPLE = 54; /* площадь примера в м², по ней считается пример суммы в карточке */
/* ПАКЕТЫ: price это цена за м², term это срок работ */
var PACKS = [
{ name: 'Косметический', price: 4900, popular: false, term: 'от 3 недель',
forWho: 'Освежить квартиру, где инженерные системы и полы в рабочем состоянии.',
inc: ['Демонтаж обоев и старых покрытий', 'Выравнивание стен под финиш', 'Поклейка обоев или покраска', 'Укладка ламината и плинтус', 'Замена розеток и выключателей', 'Вынос мусора после каждого этапа'] },
{ name: 'Капитальный', price: 9400, popular: true, term: '45-60 дней',
forWho: 'Полная переделка вторички: старые трубы, алюминиевая проводка, кривые стены.',
inc: ['Демонтаж до бетона', 'Разводка электрики по группам и щит', 'Замена труб и канализации', 'Стяжка пола и штукатурка по маякам', 'Санузел с плиткой полностью', 'Чистовая отделка комнат', 'Установка дверей и сантехники', 'Уборка перед сдачей'] },
{ name: 'Под ключ с дизайном', price: 14200, popular: false, term: 'от 4 месяцев',
forWho: 'Когда нужен готовый результат по чертежам и заезд с мебелью в назначенный день.',
inc: ['Дизайн-проект с рабочими чертежами', 'Подбор и закупка всех материалов', 'Весь объём капитального пакета', 'Перепланировка с согласованием', 'Надзор дизайнера каждую неделю', 'Сборка мебели и монтаж света', 'Комплектация шторами и текстилем'] }
];
var roots = document.querySelectorAll('.vbtnr');
for (var i = 0; i < roots.length; i++) init(roots[i]);
function init(root) {
if (root.__vb) return; root.__vb = 1;
var grid = root.querySelector('#vbtnr-grid'), note = root.querySelector('#vbtnr-note');
function money(n) { return String(Math.round(n)).replace(/\B(?=(\d{3})+(?!\d))/g, ' '); }
grid.innerHTML = PACKS.map(function (p) {
return '<article class="vbtnr-card' + (p.popular ? ' vbtnr-card--hot' : '') + '">' +
(p.popular ? '<span class="vbtnr-badge">Чаще всего берут<\/span>' : '') +
'<h3 class="vbtnr-name">' + p.name + '<\/h3>' +
'<p class="vbtnr-for">' + p.forWho + '<\/p>' +
'<div class="vbtnr-price"><b>от ' + money(p.price) + ' ₽<\/b>' +
'<i>за м² работ, материалы по спецификации<\/i>' +
'<em>двушка ' + SAMPLE + ' м²: около ' + money(p.price * SAMPLE) + ' ₽<\/em><\/div>' +
'<p class="vbtnr-term"><span>Срок работ<\/span><b>' + p.term + '<\/b><\/p>' +
'<ul class="vbtnr-inc">' + p.inc.map(function (x) { return '<li>' + x + '<\/li>'; }).join('') + '<\/ul>' +
'<a class="vbtnr-cta" href="' + CTA_HREF + '">Вызвать замерщика<\/a>' +
'<\/article>';
}).join('');
note.textContent = 'Пример суммы посчитан для площади ' + SAMPLE + ' м² по цене работ пакета. Точная смета составляется после замера: на неё влияют высота потолков, состояние стяжки и объём демонтажа.';
/* выравнивание рядов: одинаковая высота у названия, описания, цены и срока во всех карточках */
var ROWS = ['.vbtnr-name', '.vbtnr-for', '.vbtnr-price', '.vbtnr-term'];
function align() {
var single = grid.clientWidth < 620;
ROWS.forEach(function (sel) {
var nodes = Array.prototype.slice.call(grid.querySelectorAll(sel));
nodes.forEach(function (n) { n.style.minHeight = ''; });
if (single) return;
var max = 0;
nodes.forEach(function (n) { max = Math.max(max, n.offsetHeight); });
nodes.forEach(function (n) { n.style.minHeight = max + 'px'; });
});
}
align();
var t = null;
window.addEventListener('resize', function () { clearTimeout(t); t = setTimeout(align, 150); });
}
})();
</script> Вставляется целиком в блок T123 «HTML-код». Внутри уже есть стили и скрипт, подключать ничего не нужно.
Как вставить блок в Tilda
- Скопируйте кодКнопка «Скопировать код» выше кладёт всё содержимое в буфер обмена.
- Добавьте блок T123В редакторе страницы: «Библиотека блоков» → «Другое» → T123 «HTML-код».
- Вставьте и сохранитеНажмите «Контент», вставьте код в поле, сохраните и обновите страницу.
- ОпубликуйтеВ превью скрипты Tilda работают не всегда — проверяйте на опубликованной странице.
Подробная инструкция с граблями — как вставить вайб-блок в Tilda.
Что менять под себя
| Где в коде | За что отвечает |
|---|---|
массив PACKS в начале скрипта | названия пакетов, цена за м², срок и состав работ |
поле popular у пакета | какой тариф получает бейдж «Чаще всего берут» |
переменная SAMPLE | площадь квартиры для примера суммы в карточке |
переменная CTA_HREF | якорь кнопки: куда скроллит переход к замеру |
--acc и --acc-dark | цвет бейджа, галочек и кнопки популярного пакета |
Тарифы на ремонт квартиры: зачем он нужен
Посетитель сравнивает пакеты глазами, поэтому строки должны стоять на одной высоте. В блоке за это отвечает скрипт: он измеряет название, описание, цену и срок во всех карточках и выравнивает их по самому высокому. Список работ у всех пакетов стартует с одной линии, и глаз читает таблицу по горизонтали. На узком экране выравнивание отключается, карточки идут одна под другой.
Цена за квадратный метр редко говорит человеку что-то без привязки к площади, поэтому под ней стоит пример: сколько выйдет двушка 54 квадратных метра по этому пакету. Площадь примера задаётся одной переменной, суммы пересчитываются сами. Средний пакет помечен бейджем и рамкой акцентного цвета, это подсказывает выбор без давления. Кнопка ведёт якорем к форме замера, поэтому блок не спорит с формами, уже стоящими на странице.
Вопросы по этому блоку
-
Скрипт после отрисовки измеряет высоту названия, описания, цены и срока в каждой карточке и задаёт всем максимальную. При изменении ширины окна расчёт повторяется, на мобильном выравнивание снимается.
-
Удалите строку с классом vbtnr-price em из шаблона карточки в скрипте. Остальная разметка не сломается, цена за квадратный метр останется на месте.
-
Да, допишите объект в массив PACKS. Сетка построена на auto-fit с минимальной шириной 268 пикселей, поэтому четвёртая карточка встанет в ряд или перенесётся на вторую строку.
-
Да. Код на этой странице копируется целиком, без регистрации и подписки. Указывать авторство не нужно, использовать можно в коммерческих проектах.
-
Нет. Все классы внутри имеют собственный префикс vbtnr, поэтому не пересекаются ни со стилями Tilda, ни с другими блоками. Скрипт привязан к своему элементу и запускается один раз, даже если блок вставлен дважды.
-
Раскладка перестраивается под узкие экраны, размеры заданы через clamp, поля ввода имеют шрифт 16 пикселей — iOS не будет зумить страницу при фокусе. Отдельной мобильной версии подключать не нужно.
Другие блоки тарифов
Ещё блоки для ремонта и строительства
Собрать сайт целиком, а не по блокам
Дровосеки делают сайты на Tilda под ключ: структура, тексты, дизайн, вёрстка и вайб-блоки под задачи бизнеса.