Подсказки: работа с фоном и текстом в sli.dev
Полноэкранное изображение на слайде
Базовая структура для слайда с фоновой картинкой:
<div class="absolute inset-0">
<img src="/images/filename.webp" class="w-full h-full object-cover" />
</div>
<div class="content-over ...">
<!-- контент слайда -->
</div>
content-over — класс с position: relative; z-index: 1, чтобы контент был поверх картинки.
Затемнение фона (overlay)
Если картинка слишком яркая и текст не читается — добавить bg-overlay между <img> и контентом:
<div class="absolute inset-0">
<img src="/images/filename.webp" class="w-full h-full object-cover" />
<div class="bg-overlay"></div>
</div>
bg-overlay — градиент rgba(10,10,12,0.8) → rgba(10,10,12,0.93). Затемняет картинку на 80–93%.
Когда убирать: если картинка сама по себе тёмная или хочется показать её без фильтра.
Выделение текста прямоугольником
Вместо затемнения всего фона — локальный полупрозрачный прямоугольник только под текстом:
<div style="background: rgba(10, 10, 12, 0.75); padding: 2em 3em; border: 1px solid var(--color-border);">
# Заголовок
## Подзаголовок
</div>
Параметры для подбора
| Параметр | Что делает | Диапазон |
|---|---|---|
rgba(10, 10, 12, X) |
Прозрачность фона прямоугольника | 0.5 — лёгкая дымка, 0.75 — стандарт, 0.9 — почти непрозрачный |
padding |
Отступы внутри прямоугольника | 1em 2em — компактный, 2em 3em — просторный |
border |
Рамка | 1px solid var(--color-border) — тонкая, 1px solid var(--color-accent) — акцентная с зелёным |
border-radius |
Скругление углов | 0px — нуар-стиль, 8px — мягче |
box-shadow |
Свечение | var(--glow-accent) — зелёное свечение по краю |
Комбинации
Минимальный — просто читаемость:
<div style="background: rgba(10, 10, 12, 0.6); padding: 1.5em 2em;">
Стандартный — читаемость + рамка:
<div style="background: rgba(10, 10, 12, 0.75); padding: 2em 3em; border: 1px solid var(--color-border);">
Акцентный — с зелёным свечением:
<div style="background: rgba(10, 10, 12, 0.8); padding: 2em 3em; border: 1px solid var(--color-accent); box-shadow: var(--glow-accent);">
Когда что использовать
- Overlay на весь фон — когда текста много и он разбросан по слайду
- Прямоугольник — когда текст компактный (заголовок + подзаголовок), а картинку хочется показать
- Без overlay — когда картинка тёмная и текст контрастный сам по себе
- Комбинация — overlay с пониженной прозрачностью (0.4–0.5) + прямоугольник под ключевым текстом
Рецепт: переход от overlay к прямоугольнику
Типичная ситуация: слайд с полноэкранной картинкой и overlay затемняет всё — картинка теряется. Хочется показать картинку, но текст должен читаться.
Шаги:
- Убрать
<div class="bg-overlay"></div>из блока с картинкой - Обернуть текстовый контент в
<div>с полупрозрачным фоном:
<!-- ДО -->
<div class="absolute inset-0">
<img src="/images/image.webp" class="w-full h-full object-cover" />
<div class="bg-overlay"></div> <!-- затемняет ВСЮ картинку -->
</div>
<div class="content-over flex flex-col items-center justify-center h-full text-center">
# Заголовок
Подзаголовок
</div>
<!-- ПОСЛЕ -->
<div class="absolute inset-0">
<img src="/images/image.webp" class="w-full h-full object-cover" />
</div>
<div class="content-over flex flex-col items-center justify-center h-full text-center">
<div style="background: rgba(10, 10, 12, 0.75); padding: 2em 3em; border: 1px solid var(--color-border);">
# Заголовок
Подзаголовок
</div>
</div>
Результат: картинка видна по краям, текст читается на локальном тёмном фоне.
Подбор: если картинка светлая — увеличить opacity до 0.85. Если тёмная — можно снизить до 0.6.
Конвертация PNG → WebP
PNG-картинки тяжёлые (2–5 MB каждая). WebP даёт то же качество при ~3–5x меньшем размере. Для 20 слайдов разница — десятки мегабайт.
Установка cwebp
cwebp — часть пакета libwebp:
# macOS
brew install webp
# Ubuntu/Debian
sudo apt install webp
# Windows (любой из вариантов)
# 1. Скачать бинарники: https://developers.google.com/speed/webp/download
# Распаковать, добавить папку bin/ в PATH
# 2. Через Chocolatey:
choco install webp
# 3. Через Scoop:
scoop install libwebp
Одна картинка
cwebp -q 85 images/01-courtroom-forge.png -o images/01-courtroom-forge.webp
-q 85 — качество (0–100). 85 — хороший баланс размера и качества. Для презентаций на проекторе разницы с 100 не видно.
Все картинки батчем
macOS / Linux (bash):
for f in images/*.png; do
cwebp -q 85 "$f" -o "${f%.png}.webp"
done
Windows (PowerShell):
Get-ChildItem images\*.png | ForEach-Object {
cwebp -q 85 $_.FullName -o ($_.FullName -replace '\.png$','.webp')
}
Windows (cmd):
for %f in (images\*.png) do cwebp -q 85 "%f" -o "%~dpnf.webp"
После конвертации
-
Обновить
slides.md— заменить.pngна.webpво всех<img src="...">:# было <img src="/images/01-courtroom-forge.png" ...> # стало <img src="/images/01-courtroom-forge.webp" ...> -
Удалить исходные PNG (если больше не нужны): ```bash # macOS / Linux rm images/*.png
# Windows (PowerShell) Remove-Item images*.png ```
- Проверить, что dev-сервер показывает картинки корректно
Когда НЕ конвертировать
- Если картинки ещё будут редактироваться — держи PNG как исходники в
images-orig/ - Для PDF-экспорта — slidev одинаково работает с PNG и WebP