Vector Engine

Breakpointy

Skala breakpointów per rozdzielczość monitora (1280×800 → 5K), tiery wysokości, ultrawide 21:9 i layouty tabowane.

Jedna skala, dwa źródła#

Workspace używa jednego tieru breakpointów na popularną rozdzielczość desktopową. Skala żyje w dwóch miejscach, które testy trzymają w sync:

  • apps/web/src/styles/main.css — media queries layoutu,
  • apps/web/src/styles/breakpoints.ts — maszynowo czytelna skala (id, rozdzielczości, budżety kolumn).

breakpoints.test.ts parsuje stylesheet i wywala się, gdy tier, budżet kolumn lub kolejność rozjedzie się z manifestem.

Tiery szerokości#

Tiery to zapytania min-width, aplikowane rosnąco. Każdy tier redeklaruje wszystkie cztery kolumny, więc nie zależy od tieru poniżej.

TierRozdzielczośćmin-widthSourceCanvas minInspectorExport
base< 1280×800—minmax(300px, 27%)330 px300 px280 px
wxga1280×8001280 pxminmax(300px, 27%)330 px310 px290 px
hd1366×7681366 pxminmax(320px, 27%)340 px320 px300 px
wxga-plus1440×9001440 pxminmax(340px, 28%)360 px340 px320 px
hd-plus1600×9001600 pxminmax(360px, 28%)400 px350 px330 px
wsxga-plus1680×10501680 pxminmax(380px, 29%)420 px360 px340 px
full-hd1920×10801920 pxminmax(420px, 30%)480 px380 px360 px
qxga2048×11522048 pxminmax(450px, 30%)520 px400 px370 px
qhd2560×14402560 pxminmax(480px, 31%)600 px420 px380 px
uwqhd3440×14403440 pxminmax(520px, 30%)720 px440 px400 px
uhd-4k3840×21603840 pxminmax(540px, 32%)800 px460 px420 px
uhd-5k5120×28805120 pxminmax(600px, 32%)900 px520 px460 px

Cztery minimalne kolumny zawsze mieszczą się w szerokości swojego tieru (asercja w testach). Panele rosną monotonicznie — szerszy monitor nigdy nie dostaje mniejszego inspektora.

Ultrawide 21:9#

Monitory ultrawide dodatkowo matchują:

css
@media (min-aspect-ratio: 21/9) and (min-width: 2560px)

Tier capuje kolumnę source na 24%, daje canvasowi minimum 900 px, a shell traci max-width clamp powyżej 3840 px.

Tiery wysokości#

Zapytania max-height z bramką min-width: 901px — telefony i tablety zachowują layout tabowany. Deklarowane od najwyższego do najniższego, więc najgęstszy pasujący tier wygrywa.

TierReferencjamax-heightHeaderFooterPanel headingPath toolbar
short1600×900900 px60 px27 px50 px42 px
laptop1280×800820 px56 px26 px50 px40 px
hd-laptop1366×768768 px54 px25 px44 px38 px
very-short1366×700700 px50 px24 px42 px34 px
compact1280×600600 px46 px22 px40 px30 px

Tier compact ukrywa też etykiety eyebrow paneli i zmniejsza status bar do 8 px.

Layouty tabowane#

ZapytanieZachowanie
max-width: 1180pxWęższe budżety kolumn, ukryte drugorzędne metadane podglądu
max-width: 900pxLayout tabowany, jeden panel naraz
max-width: 600pxAkcje headera tylko ikony, dwukolumnowa siatka formatów

Użycie skali w kodzie#

ts
import {
  HEIGHT_TIERS,
  WIDTH_TIERS,
  minWidthQuery,
  resolveHeightTier,
  resolveWidthTier
} from '@/styles/breakpoints'

resolveWidthTier(window.innerWidth)?.id
resolveHeightTier(window.innerHeight)?.id
minWidthQuery(1920)

Dodawanie rozdzielczości#

  1. Dodaj tier do breakpoints.ts (id, rozdzielczość, budżety kolumn).
  2. Dodaj pasujące media query do main.css z redeklaracją wszystkich czterech kolumn.
  3. Uruchom testy — breakpoints.test.ts wywali się, dopóki oba źródła się nie zgodzą.