Тема «Своя» позволяет переписать внешний вид профиля обычным CSS. Доступно с премиумом.
Как включить
- Откройте Редактор профиля → раздел Оформление → тема «Своя».
- Вставьте CSS в поле «Свой CSS» — превью справа обновится сразу.
- Нажмите «Сохранить».
Если вы не знаете 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)поможет поправить то, что не помещается.