Блок с этапами подбора персонала
Шесть шагов подбора со сроками: у каждого этапа своя полоса длительности, доля от общего цикла и строка о том, что заказчик получает на руки.
<section class="vbkip">
<div class="vbkip-wrap">
<div class="vbkip-head">
<h2 class="vbkip-h2">Путь вакансии от заявки до испытательного срока</h2>
<p class="vbkip-lead">Шесть шагов с понятным сроком. После каждого у вас на руках остаётся документ или список кандидатов, поэтому видно, на чём стоит работа.</p>
<p class="vbkip-total" id="vbkip-total"></p>
</div>
<div class="vbkip-grid" id="vbkip-grid">
<article class="vbkip-card" data-days="2">
<span class="vbkip-no">01</span>
<span class="vbkip-when">Дни 1-2</span>
<h3>Снимаем профиль должности</h3>
<p>Разговариваем с руководителем, для которого ищем человека: задачи первых трёх месяцев, чем занят предшественник, что считается провалом. Сразу проверяем оклад по рынку и говорим, если цифра не соберёт откликов.</p>
<div class="vbkip-bar"><i></i></div>
<span class="vbkip-share"></span>
<span class="vbkip-get">Заказчик получает профиль вакансии на одной странице и обзор зарплат по региону</span>
</article>
<article class="vbkip-card" data-days="5">
<span class="vbkip-no">02</span>
<span class="vbkip-when">Дни 2-6</span>
<h3>Ищем и выходим на связь</h3>
<p>Размещаем вакансию, поднимаем свою базу и пишем тем, кто работу пока не ищет. Линейные позиции идут потоком через обзвон, руководителей ищем адресно по компаниям вашей отрасли.</p>
<div class="vbkip-bar"><i></i></div>
<span class="vbkip-share"></span>
<span class="vbkip-get">Заказчик получает отчёт по воронке: сколько человек просмотрено и сколько ответило</span>
</article>
<article class="vbkip-card" data-days="4">
<span class="vbkip-no">03</span>
<span class="vbkip-when">Дни 5-8</span>
<h3>Проводим первичный отбор</h3>
<p>Созваниваемся с каждым откликом: опыт по задачам из профиля, ожидания по деньгам, готовность к графику и дороге. Проверяем документы и разрешение на работу, задаём вопросы по последним двум местам.</p>
<div class="vbkip-bar"><i></i></div>
<span class="vbkip-share"></span>
<span class="vbkip-get">Заказчик получает короткий список с заключением рекрутера по каждому кандидату</span>
</article>
<article class="vbkip-card" data-days="5">
<span class="vbkip-no">04</span>
<span class="vbkip-when">Дни 8-12</span>
<h3>Организуем интервью у вас</h3>
<p>Согласуем время, напоминаем кандидату накануне и приезжаем на встречу вместе с ним, если нужно. После каждого интервью собираем обратную связь с обеих сторон и правим поиск, когда кандидаты промахиваются по профилю.</p>
<div class="vbkip-bar"><i></i></div>
<span class="vbkip-share"></span>
<span class="vbkip-get">Заказчик получает собранное расписание встреч и причины отказов кандидатов</span>
</article>
<article class="vbkip-card" data-days="4">
<span class="vbkip-no">05</span>
<span class="vbkip-when">Дни 12-16</span>
<h3>Доводим до выхода на работу</h3>
<p>Помогаем сформулировать предложение о работе, обсуждаем условия и держим связь с кандидатом до первого рабочего дня. На этом отрезке чаще всего перехватывают встречным предложением, поэтому звоним через день.</p>
<div class="vbkip-bar"><i></i></div>
<span class="vbkip-share"></span>
<span class="vbkip-get">Заказчик получает подтверждённую дату выхода и собранные рекомендации с прошлых мест</span>
</article>
<article class="vbkip-card vbkip-card--w" data-days="0">
<span class="vbkip-no">06</span>
<span class="vbkip-when">90 дней после выхода</span>
<h3>Держим гарантию замены</h3>
<p>Созваниваемся с руководителем на седьмой, тридцатый и девяностый день. Если человек уволился или его решили не оставлять после испытательного срока, ищем замену заново и денег за это не берём.</p>
<div class="vbkip-bar vbkip-bar--w"><i></i></div>
<span class="vbkip-share">Гарантийный период</span>
<span class="vbkip-get">Заказчик получает бесплатную замену и три контрольных звонка по адаптации</span>
</article>
</div>
</div>
</section>
<style>
.vbkip, .vbkip *, .vbkip *::before, .vbkip *::after { box-sizing: border-box; }
.vbkip {
--acc: #4657a8; --ink: #191d2b; --muted: #616782; --line: #e3e5ef; --soft: #f4f5fa;
--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;
}
.vbkip-wrap { max-width: 1220px; margin: 0 auto; padding: 0 clamp(0px, 2vw, 40px); }
.vbkip-head { max-width: 46em; margin-bottom: clamp(26px, 3.4vw, 44px); }
.vbkip-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 12px; }
.vbkip-lead { font-size: 16px; line-height: 1.62; color: var(--muted); margin: 0 0 16px; }
.vbkip-total { display: inline-block; font-size: 14px; font-weight: 600; color: var(--acc); background: var(--soft); border-radius: 999px; padding: 9px 18px; margin: 0; }
.vbkip-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); gap: 14px; }
.vbkip-card { display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: 20px; padding: clamp(20px, 2.2vw, 28px); }
.vbkip-card--w { background: var(--soft); border-color: transparent; }
.vbkip-no { font-family: var(--fh); font-size: 13px; font-weight: 700; letter-spacing: .06em; color: var(--acc); }
.vbkip-when { font-size: 12.5px; color: var(--muted); margin: 6px 0 10px; }
.vbkip-card h3 { font-family: var(--fh); font-size: 19px; line-height: 1.28; font-weight: 700; margin: 0 0 10px; }
.vbkip-card p { margin: 0 0 18px; font-size: 14.5px; line-height: 1.62; color: var(--muted); }
.vbkip-bar { height: 5px; border-radius: 5px; background: var(--soft); overflow: hidden; margin-top: auto; }
.vbkip-card--w .vbkip-bar { background: #e4e6f0; }
.vbkip-bar i { display: block; height: 100%; width: 0; border-radius: 5px; background: var(--acc); transition: width .9s cubic-bezier(.22,1,.36,1); }
.vbkip-bar--w i { background: repeating-linear-gradient(90deg, var(--acc) 0 8px, transparent 8px 14px); }
.vbkip-share { font-size: 12px; color: var(--muted); margin: 9px 0 14px; }
.vbkip-get { font-size: 13.5px; line-height: 1.5; font-weight: 600; border-top: 1px solid var(--line); padding-top: 14px; }
.vbkip-card--w .vbkip-get { border-top-color: #dfe1ee; }
@media (max-width: 560px) { .vbkip-card { padding: 20px; } }
@media (prefers-reduced-motion: reduce) { .vbkip-bar i { transition: none !important; } }
</style>
<script>
(function () {
var roots = document.querySelectorAll('.vbkip');
for (var i = 0; i < roots.length; i++) init(roots[i]);
function init(root) {
if (root.__vb) return; root.__vb = 1;
var cards = root.querySelectorAll('.vbkip-card');
var total = 0, i;
for (i = 0; i < cards.length; i++) total += +cards[i].getAttribute('data-days') || 0;
function plural(n, a) { var m = n % 100; if (m > 4 && m < 21) return a[2]; m = n % 10; return m === 1 ? a[0] : (m > 1 && m < 5 ? a[1] : a[2]); }
var head = root.querySelector('#vbkip-total');
if (head) head.textContent = 'Полный цикл до выхода кандидата: ' + total + ' рабочих ' + plural(total, ['день', 'дня', 'дней']);
var max = 0;
for (i = 0; i < cards.length; i++) max = Math.max(max, +cards[i].getAttribute('data-days') || 0);
for (i = 0; i < cards.length; i++) {
var d = +cards[i].getAttribute('data-days') || 0;
var sh = cards[i].querySelector('.vbkip-share');
if (d && sh) sh.textContent = d + ' ' + plural(d, ['рабочий день', 'рабочих дня', 'рабочих дней']) +
', это ' + Math.round(d / total * 100) + '% срока';
cards[i].setAttribute('data-w', d ? Math.round(d / max * 100) : 100);
}
function fill() {
for (var j = 0; j < cards.length; j++) grow(cards[j], j);
}
function grow(card, j) {
var bar = card.querySelector('.vbkip-bar i');
if (!bar) return;
setTimeout(function () { bar.style.width = card.getAttribute('data-w') + '%'; }, j * 110);
}
if (!('IntersectionObserver' in window)) { fill(); return; }
var io = new IntersectionObserver(function (es) {
for (var k = 0; k < es.length; k++) if (es[k].isIntersecting) { fill(); io.disconnect(); }
}, { rootMargin: '0px 0px -10% 0px' });
io.observe(root.querySelector('#vbkip-grid'));
setTimeout(fill, 2600);
}
})();
</script> Вставляется целиком в блок T123 «HTML-код». Внутри уже есть стили и скрипт, подключать ничего не нужно.
Как вставить блок в Tilda
- Скопируйте кодКнопка «Скопировать код» выше кладёт всё содержимое в буфер обмена.
- Добавьте блок T123В редакторе страницы: «Библиотека блоков» → «Другое» → T123 «HTML-код».
- Вставьте и сохранитеНажмите «Контент», вставьте код в поле, сохраните и обновите страницу.
- ОпубликуйтеВ превью скрипты Tilda работают не всегда — проверяйте на опубликованной странице.
Подробная инструкция с граблями — как вставить вайб-блок в Tilda.
Что менять под себя
| Где в коде | За что отвечает |
|---|---|
data-days у карточек | длительность шага в рабочих днях, из неё считается общий срок |
текст в теге span с классом получает | что остаётся у заказчика после каждого шага |
подписи Дни 1-2 и подобные | календарные границы этапов под ваш регламент работы |
--acc в начале стилей | цвет номеров, полос длительности и плашки с общим сроком |
Как идёт подбор персонала: зачем он нужен
Работодателю важно понимать, за что он платит на каждом отрезке работы. Блок раскладывает подбор на шесть шагов: снятие профиля должности, поиск, первичный отбор, интервью у заказчика, доведение до выхода и гарантийный период. У каждого шага указан диапазон дней, короткое описание работы рекрутера и результат, который остаётся у компании. Последняя карточка отведена гарантии и оформлена отдельным фоном, потому что этот период идёт уже после выхода человека.
Полоса под текстом показывает длительность шага относительно самого длинного, а подпись считает долю от общего цикла в процентах. Общий срок скрипт собирает сам из атрибутов data-days и выводит в строку под подзаголовком, поэтому при смене цифр итог пересчитывается автоматически. Полосы наполняются при появлении блока в поле зрения с задержкой в сто миллисекунд между карточками. Внешних библиотек и картинок в блоке нет.
Вопросы по этому блоку
-
Удалите карточку целиком вместе с её атрибутом data-days. Сетка перестроится, а общий срок и доли в процентах пересчитаются при следующей загрузке страницы.
-
Гарантия идёт после выхода кандидата и в рабочие дни цикла не входит, поэтому у неё стоит data-days со значением ноль и отдельный класс с пунктирной заливкой.
-
Да, схема одинаковая. Замените строки о заказчике на то, что получает руководитель подразделения, и поправьте сроки под свой регламент согласования.
-
Да. Код на этой странице копируется целиком, без регистрации и подписки. Указывать авторство не нужно, использовать можно в коммерческих проектах.
-
Нет. Все классы внутри имеют собственный префикс vbkip, поэтому не пересекаются ни со стилями Tilda, ни с другими блоками. Скрипт привязан к своему элементу и запускается один раз, даже если блок вставлен дважды.
-
Раскладка перестраивается под узкие экраны, размеры заданы через clamp, поля ввода имеют шрифт 16 пикселей — iOS не будет зумить страницу при фокусе. Отдельной мобильной версии подключать не нужно.
Другие блоки преимуществ
Ещё блоки для подбора персонала
Собрать сайт целиком
Дровосеки делают сайты на Tilda под ключ: структура, тексты, дизайн, вёрстка и вайб-блоки под задачи бизнеса. Как это выглядит для ниши «Подбор персонала», видно на отдельной странице.