«У меня в Chrome работает» — самый частый bug-report от разработчика. Половина пользователей на Safari (mobile особенно), Firefox держится у power-users, Edge у enterprise. Cross-browser pass — обязательная check pre-launch и quarterly.
Site: {{site_url}} Target support: {{browser_support_target}}
1. Browser matrix
Что тестировать:
| Browser | Min version | Devices | Coverage |
|---|---|---|---|
| Chrome | latest + chrome-2 | desktop + Android | dev default, baseline |
| Safari | latest + safari-1 | desktop Mac + iOS | ~30% of users часто |
| Firefox | latest | desktop | dev-power-users |
| Edge | latest | desktop | enterprise / corporate |
| Samsung Internet | latest | Android mobile | большая часть Android в Asia |
| WebView (in-app) | varies | mobile via app | Twitter / Facebook / Slack openings |
2. Top 30 quirks by browser
Safari (desktop + iOS)
CSS:
backdrop-filterнуждается в-webkit-backdrop-filterprefix100vhна iOS включает chrome (top/bottom bars) → use100dvhили100svhgapнаflexпоздно landed (Safari 14.1+)overflow: clipне поддерживается до Safari 16:has()selector поздно landed (Safari 15.4+)- Date inputs выглядят native (отличается от Chrome) — могут ломать verschen
JS API:
Intl.Segmenter— Safari 14.1+ResizeObserver— Safari 13.1+ (ОК)structuredClone— Safari 15.4+Array.prototype.at— Safari 15.4+
iOS specifics:
- 300ms tap delay (фикс через
touch-action: manipulation) - Input zoom on focus если font-size < 16px
- Position: fixed unreliable когда keyboard up
- WebKit autoplay: video / audio только в response to user action
navigator.shareдоступен только в HTTPS
Firefox
CSS:
- Scrollbar styling:
scrollbar-width+scrollbar-color(нативно), не::webkit-scrollbar(Chrome/Safari) text-decorationthickness rendering minimal differently- Font rendering чуть толще чем Chrome (anti-aliasing difference)
accent-colorпоздно landed (Firefox 92+)
JS:
- Generally ОК API support, near-parity с Chrome
- Different motion easing default по сравнению с Chrome
Chrome
CSS / JS:
- Generally cutting-edge поддержка — но дев-blind-spot: что работает в Chrome не работает elsewhere
- Chrome extensions модифицируют DOM (Grammarly, Adblock, password managers) — твой код не должен ломаться от этого
prefers-reduced-motionиногда не уважается в специфических animation библиотеках
Mobile WebView (in-app browsers)
- Twitter / Facebook / LinkedIn / Slack — открывают links в их WebView, не нативном
- Cookies и localStorage могут не persist между sessions
- Address bar высота меняется при скролле →
100vhflickers - Custom URL schemes (apps) могут не работать
3. Аудит: что тестировать
Visual / layout
- Compare same page Side-by-side в каждом browser (BrowserStack или Chrome DevTools device emulation для quick check, real device для real verification)
- Шрифты рендерятся consistent
- Spacing, alignment — ровно
- Скроллбар выглядит OK (или скрыт consistent)
- Modals / overlays на iOS не «срываются» по краям
Forms / inputs
- Date picker (Safari отличается от Chrome)
- File picker (mobile vs desktop)
- Autofocus
- Autocomplete behaviour
- Inputmode hints на mobile keyboard
Critical flows
- Прокликать signup / login / checkout в каждом browser
- Проверить async actions работают (fetch, WebSocket)
- Проверить cookies / localStorage
JS APIs
- Если используешь bleeding-edge (Intl.Segmenter, ResizeObserver, IntersectionObserver) — каждый browser проверь
Performance / perceived perf
- LCP / CLS / TBT на каждом
- Animations smooth (60fps)? Без jank?
4. Polyfills и feature detection
When to polyfill
- Если API недоступен в browserslist target
- Если есть graceful fallback (нет блокера) — лучше fallback чем polyfill
- Polyfill добавляет вес — measure cost
Feature detection
// ✓ правильно
if ('IntersectionObserver' in window) { ... } else { /* fallback */ }
// ✗ user-agent sniffing — фрагильно
if (navigator.userAgent.includes('Safari')) { ... }
Tools
- caniuse.com — feature support matrix
- MDN Browser Compatibility — detailed per feature
- browserslist — define target в package.json
- autoprefixer — CSS vendor prefixes auto-applied
- core-js — JS feature polyfills (Next.js включает по default)
5. Testing методики
Real devices vs emulator
- Chrome DevTools device emulation — для layout quick check, не для JS behavior
- BrowserStack / Sauce Labs — реальные browsers/devices, paid
- Lambdatest — альтернатива
- Real device on your desk — настоящий iPhone и Android device — invaluable
Free options
open -a Safariна Mac — Safari desktop- iPhone / Android (свой собственный) — mobile real
- Firefox + about:config для отладки
- Different user profiles для extension-free / extension-heavy testing
6. Anti-patterns
- ❌ «Chrome works, ship» — половина users не на Chrome
- ❌ User-agent sniffing для feature detection — фрагильно
- ❌
-webkit-onlyprefixes безunprefixedверсии — fails в Firefox - ❌ Тестировать только desktop — mobile browsers разнятся радикально (Safari iOS vs Chrome Android)
- ❌ Polyfill всё подряд — bundle растёт, perf падает; targeted polyfills
- ❌ Игнорить in-app browsers (WebView) — Twitter / Facebook / Slack их используют
- ❌ Полагаться на
prefers-reduced-motionбез media-query — браузеры разнятся - ❌ Тестировать раз — в каждый sprint что-то новое падает в одном из browsers
7. Output
- Browser matrix with status per critical flow per browser
- Top-10 cross-browser bugs с repro steps + browser-specific fix
- Polyfill audit — что грузим, что можно убрать
- Browserslist update если target out of date
- Re-test schedule — какие browsers на каждый release, какие quarterly
Похожие промты
site / auditFeatured
Полный UX-аудит сайта
Эвристическая оценка по Нильсену + проверка ключевых сценариев. На выходе — приоритизированный список проблем.
uxauditheuristics
Открыть
Средний15-30 мин
site / auditFeatured
Аудит производительности (Core Web Vitals)
Глубокая проверка LCP, INP, CLS с привязкой к коду и приоритизированным планом исправлений.
performancecore web vitalslighthouse
Открыть
Продвинутый30-60 мин
site / auditFeatured
Аудит доступности по WCAG 2.2 AA
Проверка контраста, клавиатурной навигации, скринридеров, фокус-индикаторов и ARIA.
a11ywcagaccessibility
Открыть
Средний30-60 мин