Immersive UI и system chrome
Основной путь: приложения из
aurobore create(vanilla/minimal) сразу корректно ложатся под status bar — писать safe-area CSS не нужно.
Runtime всегда работает в единственном режиме (без настроек в конфиге):
- WebView на весь экран — якоря
top/left/rightи фиксированная высотаscreenAxisHeight()(Screen.height/Screen.widthпо ориентации, включая перевёрнутые). WebView неanchors.fill: при открытии клавиатуры Silica сжимаетPage, но CEF остаётся полноэкранным. ApplicationWindow:displayMode: "FillScreen",statusbarForceVisible: true.- Инъектирует CSS-переменные
--aurobore-safe-area-*(и алиасы--safe-area-inset-*) изSafeZoneRect/ status bar. Native QML-значения калибруются в CSS px WebView:webCssScale = innerHeight / screenAxisHeight()(fallback1 / devicePixelRatioдо загрузки страницы). СобытиеsystemChrome:insetsChangedи CSS vars используют те же CSS px. - Подключает
aurobore-chrome.css— padding наhtmlиз этих переменных. - Нормализует
viewport-fit=coverв meta viewport (в т.ч. при dev-сервере). - Клавиатура overlay (Chromium WebView):
KeyboardInput { enabled: true }— обязательно; приenabled: falseклавиатура не показывается.- Bottom inset:
Qt.inputMethod.keyboardRectangle→injectInsets()и событиеsystemChrome:insetsChanged. - JS:
navigator.virtualKeyboard.overlaysContent = true— стабильныйwindow.innerHeight. - Fallback:
visualViewport→aurobore:keyboard-inset, еслиQt.inputMethodвернул 0.
Gecko vs Chromium: официальный гайд «Клавиатура с WebView» относится только к Gecko. Aurobore использует Chromium (
ru.auroraos.WebView); см. webview.md §«Клавиатура».
Edge-to-edge и fixed header
Для immersive UI без padding на всём html — сбросьте padding в своём CSS; CSS vars и событие insetsChanged остаются доступны:
html {
padding: 0;
}Для фиксированных toolbar/header поверх контента:
@import "@aurobore/core/css/aurobore-chrome.css";
.my-toolbar {
/* padding-top только у fixed-блока, не у всего html */
}Или утилита из @aurobore/core:
<header class="aurobore-edge-to-edge">…</header>Событие systemChrome:insetsChanged
Для кастомных fixed-элементов (редко нужно в типичном приложении):
Aurobore.on("systemChrome:insetsChanged", ({ top, right, bottom, left }) => {
// bottom > 0 — клавиатура; top — status bar / cutout
});Аппаратная «назад»
Runtime перехватывает Qt.Key_Back и вызывает window.__auroboreSpaBack() (History API). Если истории нет — событие backbutton.
Жест «назад» Silica на корневой странице сворачивает приложение (поведение ОС). SPA-навигация — через history или Aurobore.on("backbutton", …).
См. также events-and-lifecycle.md.