Слой background в MapLibre GL JS представляет собой базовый визуальный уровень карты, который заполняет всю область отображения и не привязан к геометрическим данным источников. Его основная роль заключается в формировании фона карты: однотонного цвета, градиента или текстурированного изображения, на котором затем строятся все остальные слои — линии, полигоны, символы и растровые тайлы.
В отличие от других типов слоёв, background не использует
source и не зависит от географических координат. Это делает
его уникальным инструментом стилизации, работающим на уровне холста
рендеринга WebGL.
В системе стилей MapLibre GL JS порядок слоёв строго определяет визуальную композицию. Background всегда располагается ниже всех других типов слоёв, включая fill, line, symbol и raster.
Основные особенности порядка:
Пример структуры стиля:
{
"version": 8,
"layers": [
{
"id": "background",
"type": "background",
"paint": {
"background-color": "#1e1e1e"
}
},
{
"id": "water",
"type": "fill",
"source": "map",
"source-layer": "water"
}
]
}
Background управляется исключительно через paint
свойства. Он не имеет layout, поскольку не оперирует
геометрией.
Базовый цвет фона карты. Может быть задан как:
Пример:
{
"id": "bg",
"type": "background",
"paint": {
"background-color": "rgba(20, 30, 40, 1)"
}
}
При использовании выражений возможна динамическая смена цвета в зависимости от масштаба:
{
"background-color": [
"interpolate",
["linear"],
["zoom"],
0,
"#0b1320",
10,
"#1b2a41",
18,
"#2c3e50"
]
}
Контролирует прозрачность фонового слоя.
{
"paint": {
"background-color": "#000000",
"background-opacity": 0.5
}
}
Важно учитывать, что прозрачность background влияет на видимость подложек, если карта размещена поверх внешнего контейнера с собственным фоном.
Позволяет использовать изображение в качестве фона. Паттерн загружается через sprite стиля.
{
"paint": {
"background-pattern": "diagonal-stripes"
}
}
Особенности:
Если background не задан, MapLibre GL JS использует прозрачный фон canvas. Это означает:
Часто это используется при наложении карты на кастомные интерфейсы, где фон задаётся через CSS:
body {
background: linear-gradient(#0a0f1c, #1b2735);
}
Background слой является ключевым элементом при реализации смены тем карты (light/dark modes). В большинстве современных стилей именно он определяет общее восприятие интерфейса.
Пример переключения темы:
map.setPaintProperty("background", "background-color", "#ffffff");
или динамически:
function setTheme(theme) {
if (theme === "dark") {
map.setPaintProperty("background", "background-color", "#0b0f14");
} else {
map.setPaintProperty("background", "background-color", "#f5f7fa");
}
}
Background слой практически не влияет на производительность, поскольку:
Однако при использовании background-pattern следует
учитывать:
Background поддерживает выражения MapLibre GL JS, что позволяет динамически менять параметры в зависимости от:
Наиболее часто используется zoom-интерполяция:
{
"background-color": [
"step",
["zoom"],
"#223344",
5,
"#1a2a3a",
10,
"#101820"
]
}
Такая логика применяется для адаптации контрастности карты под уровень детализации.
Background слой часто используется вместе с HTML-оверлеями, где карта является частью интерфейса.
Сценарии:
В таких случаях важно согласование цвета background с внешними элементами интерфейса, чтобы избежать визуального диссонанса.
Типичные проблемы при работе с background:
Если контейнер карты имеет фон, отличный от background слоя, может возникать эффект «двойного фона».
Яркий фон снижает читаемость всех остальных слоёв, особенно symbol layers.
Если background помещён не в начало массива layers, он может быть скрыт другими слоями.
MapLibre GL JS позволяет изменять свойства background без пересборки стиля:
map.setPaintProperty("background", "background-opacity", 0.8);
или полностью заменить стиль:
map.setStyle("mapbox://styles/custom/style-id");
При этом background будет пересоздан в соответствии с новым стилем.
Background слой используется не только как декоративный элемент, но и как функциональная основа:
Внутри WebGL pipeline background реализуется как полноэкранный quad, который:
Это делает его стабильной и дешёвой по вычислениям частью рендеринга.
При использовании semi-transparent layers background начинает играть роль визуального контраста. Особенно это заметно при:
Пример:
{
"background-color": "#000814",
"background-opacity": 1
}
и поверх:
{
"fill-color": "rgba(255, 255, 255, 0.1)"
}
Такая комбинация создаёт глубину восприятия карты.
Хотя background сам по себе не анимируется как геометрические слои, его свойства могут участвовать в transition механизме MapLibre:
{
"paint": {
"background-color": "#000000",
"background-color-transition": {
"duration": 1000,
"delay": 0
}
}
}
Это позволяет плавно изменять визуальное состояние карты при переключении режимов.