Другое
PWA-приложение для сайта
Устанавливаемый режим для сайта: иконка на экране телефона, запуск без адресной строки, manifest.json, service worker, offline-страница и настройка иконки через админку.
</>
Сайт как приложение
Добавьте сайт на главный экран и открывайте его без адресной строки.
1. Открыть сайт в браузере
2. Нажать «Добавить на экран Домой»
3. Запускать сайт как приложение
<section class="pwa-demo">
<div class="pwa-demo__phone">
<div class="pwa-demo__status"></div>
<div class="pwa-demo__icon">
<span></></span>
</div>
<h3>Сайт как приложение</h3>
<p>Добавьте сайт на главный экран и открывайте его без адресной строки.</p>
<button class="pwa-demo__button" type="button">Показать установку</button>
</div>
<div class="pwa-demo__steps" aria-live="polite">
<div class="pwa-demo__step is-active">1. Открыть сайт в браузере</div>
<div class="pwa-demo__step">2. Нажать «Добавить на экран Домой»</div>
<div class="pwa-demo__step">3. Запускать сайт как приложение</div>
</div>
</section>
.pwa-demo {
display: grid;
grid-template-columns: minmax(220px, 320px) 1fr;
gap: 24px;
align-items: center;
padding: 28px;
border-radius: 24px;
background: #0f172a;
color: #f8fafc;
}
.pwa-demo__phone {
padding: 24px;
border: 1px solid rgba(148, 163, 184, 0.24);
border-radius: 28px;
background: linear-gradient(180deg, #111827, #020617);
text-align: center;
}
.pwa-demo__status {
width: 82px;
height: 6px;
margin: 0 auto 26px;
border-radius: 999px;
background: #334155;
}
.pwa-demo__icon {
display: grid;
place-items: center;
width: 96px;
height: 96px;
margin: 0 auto 18px;
border-radius: 24px;
background: linear-gradient(135deg, #1d4ed8, #0f172a);
box-shadow: 0 18px 44px rgba(37, 99, 235, 0.32);
}
.pwa-demo__icon span {
color: #fff;
font-size: 30px;
font-weight: 800;
}
.pwa-demo__button {
border: 0;
border-radius: 999px;
padding: 12px 18px;
background: #2563eb;
color: #fff;
font-weight: 700;
}
.pwa-demo__steps {
display: grid;
gap: 12px;
}
.pwa-demo__step {
padding: 16px 18px;
border: 1px solid rgba(148, 163, 184, 0.18);
border-radius: 16px;
background: rgba(15, 23, 42, 0.72);
color: #94a3b8;
}
.pwa-demo__step.is-active {
border-color: #38bdf8;
color: #f8fafc;
}
@media (max-width: 720px) {
.pwa-demo {
grid-template-columns: 1fr;
}
}
document.querySelectorAll('.pwa-demo').forEach(function (demo) {
const button = demo.querySelector('.pwa-demo__button');
const steps = demo.querySelectorAll('.pwa-demo__step');
let index = 0;
button.addEventListener('click', function () {
steps[index].classList.remove('is-active');
index = (index + 1) % steps.length;
steps[index].classList.add('is-active');
});
});