Инструкция

Свой CSS для профиля

Переменные, классы, готовые анимации и вид на телефоне. Каждый пример можно скопировать и вставить в поле «Свой CSS» — превью в редакторе обновится сразу.

Открыть редактор

Тема «Своя» позволяет переписать внешний вид профиля обычным CSS. Доступно с премиумом.

Как включить

  1. Откройте Редактор профиля → раздел Оформление → тема «Своя».
  2. Вставьте CSS в поле «Свой CSS» — превью справа обновится сразу.
  3. Нажмите «Сохранить».

Если вы не знаете CSS

Над полем «Свой CSS» есть кнопки с готовыми кусочками: «Острые углы», «Карточка шире», «Парящий аватар», «Свой вид на телефоне» и другие. Нажмите кнопку — кусочек добавится в конец поля, превью сразу покажет результат. Дальше можно поменять в нём одно-два числа и посмотреть, что изменится.

Проще всего начинать с переменных: одна строка вроде body { --vp-radius: 0 } меняет весь профиль сразу.

Куда применяются стили

Все селекторы автоматически привязываются к вашему профилю: правило h1 { … } превратится в .vp-custom h1 { … }. Шапку сайта, меню и чужие страницы задеть нельзя. body, html и :root означают корень профиля.

Фон (картинка, видео, градиент) и эффекты снега/дождя лежат вне этой области — их свой CSS не достаёт. Регулятор громкости видео и музыки (.vp-sound) тоже не меняется: он должен всегда оставаться на виду. Всё остальное на странице профиля можно перекрашивать и двигать.

Переменные

Самый простой способ что-то поменять. Пишите их в body { … }:

Переменная По умолчанию Что меняет
--vp-radius 28px Скругление главной карточки и блоков
--vp-radius-sm 18px Скругление маленьких панелей (страницы, плитки)
--vp-width 680px Ширина колонки с профилем
--vp-gap 12px Расстояние между блоками
--vp-font шрифт сайта Шрифт всего профиля
--vp-name-size clamp(30px, 6cqi, 38px) Размер имени
--vp-text #fff Основной цвет текста
--vp-card-padding 24px Внутренний отступ главной карточки
--vp-mark-color rgb(255 255 255 / 0.45) Цвет контура огромных названий экранов на фоне (.vp-page-mark)
--accent из редактора Акцентный цвет (лучше только читать: color: var(--accent))
--card-a из редактора Непрозрачность карточек (0–1)
--card-blur из редактора Размытие под карточками
/* Квадратный строгий профиль с широкой колонкой */
body {
  --vp-radius: 0;
  --vp-radius-sm: 0;
  --vp-width: 820px;
  --vp-gap: 20px;
}

/* Моноширинный шрифт и имя покрупнее */
body {
  --vp-font: ui-monospace, Consolas, monospace;
  --vp-name-size: 48px;
}

Классы, которые можно стилизовать

Класс Что это
.vp-layout-card / .vp-layout-vibee Корень профиля, в зависимости от вида
.vp-inner Колонка с содержимым
.vp-card Главная карточка общего профиля
.vp-glass Любая стеклянная карточка (главная и блоки)
.vp-glass-glow Карточка с акцентной рамкой-градиентом
.vp-avatar-wrap Обёртка аватара — её удобно двигать, не трогая анимацию появления
.vp-avatar Аватар (вместе с рамкой)
.vp-name-row Строка с именем и значками
.vp-name Имя
.vp-badges Значки рядом с именем
.vp-handle Ник под именем
.vp-meta Дата регистрации, город и языки
.vp-bio / .vp-bio-wrap Описание и его обёртка с разделителями
.vp-presence Статус Discord внутри карточки
.vp-socials / .vp-social Ряд иконок соцсетей и одна иконка
.vp-views Счётчик просмотров и номер участника
.vp-uid Номер участника (UID)
.vp-share Кнопка «Поделиться» в углу
.vp-stats Плашки репутации (профиль Vibee)
.vp-banner Баннер карточки
.vp-blocks Все блоки под карточкой
.vp-block Один блок
.vp-block-links, .vp-block-text, .vp-block-music Ссылки, текст, Spotify
.vp-block-discord-widget, .vp-block-discord-server Статус Discord и карточка сервера
.vp-block-clock, .vp-block-weather Часы и погода
.vp-block-github, .vp-block-twitch, .vp-block-roblox, .vp-block-minecraft Виджеты аккаунтов
.vp-block-listings, .vp-block-awards Проекты из каталога и награды
.prose-vibee Текст из блока «Текст» (Markdown)
.vp-look-glass / .vp-look-neon / .vp-look-float Вид панелей: «Стекло», «Акцент», «Без панелей» (на .vp-inner)
.vp-enter-none / .vp-enter-rise / .vp-enter-stagger / .vp-enter-blur Анимация появления, выбранная в редакторе
.vp-main Первый экран профиля
.vp-arr Раскладка первого экрана; .vp-arr-bento — «Бенто», .vp-arr-crest — «Герб»
.vp-scroll-cue Подсказка «Листайте вниз»
.vp-page Отдельная страница; по виду: .vp-page-about, .vp-page-games, .vp-page-gallery, .vp-page-text
.vp-page-title / .vp-page-count Заголовок страницы и счётчик «1 из 3»
.vp-page-mark Огромное название экрана на фоне — тонкий контур без заливки
.vp-page-card Панель на страницах «Обо мне» и «Текст»
.vp-games / .vp-game Карусель игр и одна обложка
.vp-gallery / .vp-photo Карусель картинок и одна картинка
.vp-flow Любая карусель (игры и картинки); .vp-flow-card — одна карточка, .vp-flow-nav — стрелки и точки под ней
.vp-rail Точки навигации по страницам справа
.vp-tilting Карточка, которую сейчас наклоняет мышь (при включённом 3D-наклоне)
.vp-spark Искра вокруг имени (эффект «Искры»)

Экраны профиля

Если в редакторе добавлены страницы («Обо мне», «Игры», «Галерея», «Текст»), профиль листается экранами: одно движение колеса — следующий экран. На каждом экране фоном стоит его название огромными буквами — только тонкий белый контур.

У вида «Карточка» шапка и меню Vibee спрятаны, полосы прокрутки тоже нет. Шапка выезжает, если подвести мышь к верхнему краю окна, а на телефоне — при прокрутке вверх. Свой CSS шапку не достаёт.

/* Контур названий — акцентным цветом */
body { --vp-mark-color: color-mix(in srgb, var(--accent) 60%, transparent) }

/* Сделать названия ещё тише или убрать совсем */
.vp-page-mark { opacity: 0.5 }
.vp-page-mark { display: none }

/* В каруселях — квадратные углы и без стрелок */
.vp-game > span, .vp-photo { border-radius: 0 }
.vp-flow-nav { display: none }

Как двигать элементы

Любой элемент из таблицы можно сдвинуть, повернуть или поменять местами.

/* Сдвинуть на 20px вправо и 10px вверх (остальная вёрстка не поедет) */
.vp-avatar-wrap { translate: 20px -10px }

/* Повернуть и чуть увеличить */
.vp-badges { transform: rotate(-8deg) scale(1.15) }

/* Отодвинуть с отступом (соседи подвинутся) */
.vp-socials { margin-top: 40px }

/* Поставить счётчик просмотров в правый верхний угол карточки */
.vp-views { left: auto; right: 16px; bottom: auto; top: 14px }

/* Положить аватар в левый верхний угол карточки, поверх содержимого */
.vp-card { padding-top: 120px }
.vp-avatar-wrap { position: absolute; left: 24px; top: 24px }

/* Поменять порядок: блоки под карточкой — в обратном порядке */
.vp-blocks > div { display: flex; flex-direction: column-reverse }

/* Музыку поднять выше всех блоков */
.vp-block-music { order: -1 }

/* Погоду спрятать */
.vp-block-weather { display: none }

position: absolute считается от ближайшего элемента с position: relative — у главной карточки (.vp-card) он уже стоит. position: fixed запрещён.

Двигайте лучше .vp-avatar-wrap, а не .vp-avatar: у обёртки нет своих анимаций, поэтому сдвиг не «сбросится» после появления профиля.

Готовые анимации

Эти анимации уже есть на сайте — @keyframes писать не нужно, достаточно одной строки:

Название Что делает
vp-float Плавно покачивается вверх-вниз
vp-pulse Слегка увеличивается и возвращается
vp-sway Покачивается влево-вправо
vp-spin Крутится по кругу
vp-shake Коротко дрожит
vp-fade Мерцает (становится прозрачнее и обратно)
vp-hue Плавно перебирает цвета
/* Аватар парит */
.vp-avatar-wrap { animation: vp-float 4s ease-in-out infinite }

/* Значки покачиваются */
.vp-badges { animation: vp-sway 3s ease-in-out infinite }

/* Иконки соцсетей пульсируют при наведении */
.vp-social:hover { animation: vp-pulse 0.6s ease-in-out infinite }

/* Баннер медленно переливается цветами */
.vp-banner { animation: vp-hue 12s linear infinite }

Первое число — длительность одного цикла, infinite — повторять бесконечно. Посетители с включённым «уменьшить движение» анимаций не увидят.

Отдельный вид для телефона

Через @media можно задать стили, которые работают только на узком экране. Внутри — обычные правила:

/* На телефоне: квадратные углы, без баннера, имя поменьше */
@media (max-width: 640px) {
  body { --vp-radius: 0; --vp-card-padding: 16px; --vp-name-size: 28px }
  .vp-banner { display: none }
  .vp-block-clock { display: none }
}

/* На больших экранах колонка шире */
@media (min-width: 1200px) {
  body { --vp-width: 760px }
}

Разрешены условия по ширине, высоте и ориентации экрана, например (max-width: 640px), (orientation: landscape), (prefers-reduced-motion: reduce). Внутри @media нельзя писать другие @-правила.

Что разрешено и что нет

Разрешено:

  • обычные правила селектор { свойство: значение };
  • переменные --vp-…;
  • анимации через @keyframes и готовые анимации из списка выше;
  • @media для отдельного вида на телефоне;
  • картинки через url(https://…).

Вырезается автоматически:

  • @import, @font-face, @supports и другие @-правила, кроме @keyframes и @media;
  • @media с подозрительным условием (например, с url(…));
  • expression(), javascript:, data:, behavior, -moz-binding;
  • url() не на https;
  • position: fixed (им можно перекрыть сайт поддельным окном);
  • любые HTML-теги и обратные слеши.

Максимальный размер — 10 000 символов.

Готовый пример: «Акцентная карточка»

Работает с видом «Общий профиль».

/* Чуть строже углы и шире колонка */
body {
  --vp-radius: 22px;
  --vp-width: 720px;
}

/* Рамка карточки — градиент из акцентного цвета */
.vp-card {
  border-color: color-mix(in srgb, var(--accent) 45%, transparent);
  background-image: linear-gradient(160deg, color-mix(in srgb, var(--accent) 18%, transparent), transparent 55%);
}

/* Имя с градиентом от белого к акцентному */
.vp-name {
  background: linear-gradient(90deg, #ffffff, var(--accent));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  letter-spacing: -0.02em;
}

/* Аватар чуть «парит» */
.vp-avatar-wrap {
  animation: vp-float 4s ease-in-out infinite;
}

/* Иконки соцсетей — круглые, при наведении заливаются акцентом */
.vp-socials a {
  border-radius: 999px;
  background: rgb(255 255 255 / 0.06);
}
.vp-socials a:hover {
  background: var(--accent);
  color: #0a0a0c;
}

/* Описание без курсива, мягче цвет */
.vp-bio {
  font-style: normal;
  color: rgb(255 255 255 / 0.75);
}

/* Блоки под карточкой — с той же акцентной рамкой */
.vp-blocks .vp-glass {
  border-color: color-mix(in srgb, var(--accent) 30%, transparent);
}

Советы

  • Начните с кнопок-заготовок и переменных — так проще понять, что за что отвечает.
  • Если стиль не применился, скорее всего, он попал под фильтр: проверьте, нет ли в нём запрещённых @-правил, fixed или ссылок не на https.
  • Пользуйтесь var(--accent) вместо фиксированных цветов — тогда при смене цвета в редакторе стиль поменяется сам.
  • Проверяйте вид на телефоне: откройте свой профиль с телефона или сузьте окно браузера, а @media (max-width: 640px) поможет поправить то, что не помещается.