22 - python & all web labs
94
labWeb/kt_3/booking.html
Normal file
@@ -0,0 +1,94 @@
|
||||
<!doctype html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Вокруг Света | Заявка</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<div class="container header-inner">
|
||||
<a class="logo" href="index.html">Вокруг Света</a>
|
||||
<button id="burger" class="burger" aria-label="Меню">☰</button>
|
||||
<nav id="siteNav" class="site-nav">
|
||||
<ul>
|
||||
<li><a href="index.html">Главная</a></li>
|
||||
<li><a href="news.html">Новости</a></li>
|
||||
<li><a href="cards.html">Направления</a></li>
|
||||
<li><a href="tours.html">Расписание</a></li>
|
||||
<li><a class="active" href="booking.html">Заявка</a></li>
|
||||
<li><a href="contacts.html">Контакты</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="container">
|
||||
<h1>Форма заявки на тур</h1>
|
||||
<p>Заполните заявку, и менеджер свяжется с вами для уточнения деталей и подбора оптимального варианта поездки.</p>
|
||||
<div class="card">
|
||||
<form id="bookingForm">
|
||||
<div>
|
||||
<label for="firstName">Имя</label>
|
||||
<input id="firstName" name="firstName" required>
|
||||
</div>
|
||||
<div>
|
||||
<label for="lastName">Фамилия</label>
|
||||
<input id="lastName" name="lastName" required>
|
||||
</div>
|
||||
<div>
|
||||
<label for="email">Email</label>
|
||||
<input id="email" type="email" name="email" required>
|
||||
</div>
|
||||
<div>
|
||||
<label for="phone">Телефон</label>
|
||||
<input id="phone" name="phone" required>
|
||||
</div>
|
||||
<div>
|
||||
<label for="city">Город вылета</label>
|
||||
<input id="city" name="city" required>
|
||||
</div>
|
||||
<div>
|
||||
<label for="direction">Направление</label>
|
||||
<select id="direction" name="direction">
|
||||
<option>Турция</option>
|
||||
<option>Италия</option>
|
||||
<option>Норвегия</option>
|
||||
<option>Исландия</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label for="startDate">Дата начала</label>
|
||||
<input id="startDate" type="date" name="startDate">
|
||||
</div>
|
||||
<div>
|
||||
<label for="endDate">Дата окончания</label>
|
||||
<input id="endDate" type="date" name="endDate">
|
||||
</div>
|
||||
<div>
|
||||
<label for="people">Количество человек</label>
|
||||
<input id="people" type="number" min="1" name="people">
|
||||
</div>
|
||||
<div>
|
||||
<label for="budget">Бюджет (руб.)</label>
|
||||
<input id="budget" type="number" min="10000" name="budget">
|
||||
</div>
|
||||
<div class="form-full">
|
||||
<label for="comment">Комментарий</label>
|
||||
<textarea id="comment" name="comment"></textarea>
|
||||
</div>
|
||||
<div class="form-full">
|
||||
<button class="btn" type="submit">Отправить</button>
|
||||
</div>
|
||||
</form>
|
||||
<div id="formResult" class="result">После отправки вы увидите краткую сводку по вашей заявке.</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru</div>
|
||||
</footer>
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
49
labWeb/kt_3/cards.html
Normal file
@@ -0,0 +1,49 @@
|
||||
<!doctype html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Вокруг Света | Направления</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<div class="container header-inner">
|
||||
<a class="logo" href="index.html">Вокруг Света</a>
|
||||
<button id="burger" class="burger" aria-label="Меню">☰</button>
|
||||
<nav id="siteNav" class="site-nav">
|
||||
<ul>
|
||||
<li><a href="index.html">Главная</a></li>
|
||||
<li><a href="news.html">Новости</a></li>
|
||||
<li><a class="active" href="cards.html">Направления</a></li>
|
||||
<li><a href="tours.html">Расписание</a></li>
|
||||
<li><a href="booking.html">Заявка</a></li>
|
||||
<li><a href="contacts.html">Контакты</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="container">
|
||||
<h1>Популярные направления</h1>
|
||||
<p>Подборка направлений для спокойного отдыха, активных поездок и насыщенных экскурсионных программ.</p>
|
||||
<section class="cards-flex">
|
||||
<article class="tour-card"><img src="images/photo1.jpg" alt=""><div class="tour-card-body"><h3>Турция</h3><p>Комфортные отели у моря, тёплый климат и удобный формат отдыха для всей семьи.</p></div></article>
|
||||
<article class="tour-card"><img src="images/photo2.jpeg" alt=""><div class="tour-card-body"><h3>Грузия</h3><p>Горные маршруты, уютные старые кварталы и национальная кухня с местным колоритом.</p></div></article>
|
||||
<article class="tour-card"><img src="images/photo3.jpeg" alt=""><div class="tour-card-body"><h3>Япония</h3><p>Технологичные мегаполисы, древние храмы и сезон цветения сакуры в лучших локациях.</p></div></article>
|
||||
<article class="tour-card"><img src="images/photo4.jpeg" alt=""><div class="tour-card-body"><h3>Италия</h3><p>Классические экскурсии, гастрономические маршруты и прогулки по историческим центрам.</p></div></article>
|
||||
<article class="tour-card"><img src="images/photo5.jpeg" alt=""><div class="tour-card-body"><h3>Исландия</h3><p>Ледники, вулканические пейзажи и насыщенная программа для любителей природы.</p></div></article>
|
||||
<article class="tour-card"><img src="images/photo6.jpeg" alt=""><div class="tour-card-body"><h3>Франция</h3><p>Париж, Прованс и Лазурный берег с насыщенными экскурсиями и свободным временем.</p></div></article>
|
||||
<article class="tour-card"><img src="images/photo7.webp" alt=""><div class="tour-card-body"><h3>Испания</h3><p>Пляжный сезон почти круглый год, яркие фестивали и интересные городские маршруты.</p></div></article>
|
||||
<article class="tour-card"><img src="images/photo8.jpg" alt=""><div class="tour-card-body"><h3>Норвегия</h3><p>Фьорды, северная природа и круизы с остановками в самых красивых портах.</p></div></article>
|
||||
<article class="tour-card"><img src="images/photo9.jpg" alt=""><div class="tour-card-body"><h3>Марокко</h3><p>Старинные медины, рынки ремесленников и поездки по пустынным ландшафтам.</p></div></article>
|
||||
<article class="tour-card"><img src="images/photo10.webp" alt=""><div class="tour-card-body"><h3>Португалия</h3><p>Атлантическое побережье, винные регионы и уютные города с богатой историей.</p></div></article>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru</div>
|
||||
</footer>
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
44
labWeb/kt_3/contacts.html
Normal file
@@ -0,0 +1,44 @@
|
||||
<!doctype html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Вокруг Света | Контакты</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<div class="container header-inner">
|
||||
<a class="logo" href="index.html">Вокруг Света</a>
|
||||
<button id="burger" class="burger" aria-label="Меню">☰</button>
|
||||
<nav id="siteNav" class="site-nav">
|
||||
<ul>
|
||||
<li><a href="index.html">Главная</a></li>
|
||||
<li><a href="news.html">Новости</a></li>
|
||||
<li><a href="cards.html">Направления</a></li>
|
||||
<li><a href="tours.html">Расписание</a></li>
|
||||
<li><a href="booking.html">Заявка</a></li>
|
||||
<li><a class="active" href="contacts.html">Контакты</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="container">
|
||||
<h1>Контакты</h1>
|
||||
<section class="card">
|
||||
<h2>Наш офис</h2>
|
||||
<p>Мы работаем ежедневно и помогаем подобрать туры для отпуска, командировок и семейных поездок.</p>
|
||||
<p><b>Адрес:</b> Москва, ул. Примерная, 10</p>
|
||||
<p><b>Телефон:</b> +7 (900) 123-45-67</p>
|
||||
<p><b>Email:</b> info@tour-example.ru</p>
|
||||
<p id="geoResult"></p>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru</div>
|
||||
</footer>
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
7
labWeb/kt_3/figma-link.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
Макет главной страницы в Figma:
|
||||
https://www.figma.com/file/example123/Vokrug-Sveta-Main-Page
|
||||
|
||||
Описание макета:
|
||||
- Первый экран с заголовком, текущей датой и кнопкой перехода к заявке
|
||||
- Блок с ключевыми преимуществами агентства
|
||||
- Секция со слайдером туристических направлений
|
||||
BIN
labWeb/kt_3/images/photo1.jpg
Normal file
|
After Width: | Height: | Size: 172 KiB |
BIN
labWeb/kt_3/images/photo10.webp
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
labWeb/kt_3/images/photo2.jpeg
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
labWeb/kt_3/images/photo3.jpeg
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
labWeb/kt_3/images/photo4.jpeg
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
labWeb/kt_3/images/photo5.jpeg
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
labWeb/kt_3/images/photo6.jpeg
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
BIN
labWeb/kt_3/images/photo7.webp
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
labWeb/kt_3/images/photo8.jpg
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
labWeb/kt_3/images/photo9.jpg
Normal file
|
After Width: | Height: | Size: 77 KiB |
76
labWeb/kt_3/index.html
Normal file
@@ -0,0 +1,76 @@
|
||||
<!doctype html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Вокруг Света | Главная</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<div class="container header-inner">
|
||||
<a class="logo" href="index.html">Вокруг Света</a>
|
||||
<button id="burger" class="burger" aria-label="Меню">☰</button>
|
||||
<nav id="siteNav" class="site-nav">
|
||||
<ul>
|
||||
<li><a class="active" href="index.html">Главная</a></li>
|
||||
<li><a href="news.html">Новости</a></li>
|
||||
<li><a href="cards.html">Направления</a></li>
|
||||
<li><a href="tours.html">Расписание</a></li>
|
||||
<li><a href="booking.html">Заявка</a></li>
|
||||
<li><a href="contacts.html">Контакты</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="container">
|
||||
<section class="hero">
|
||||
<h1>Туристическое агентство "Вокруг Света"</h1>
|
||||
<p>Помогаем подобрать поездки под ваш стиль отдыха: от коротких городских уикендов до больших путешествий на 10-14 дней.</p>
|
||||
<p><b>Сегодня:</b> <span id="todayDate"></span></p>
|
||||
<p>Макет главной страницы в Figma: <a href="#" title="Добавьте свою ссылку Figma">посмотреть</a></p>
|
||||
</section>
|
||||
|
||||
<section class="grid-home">
|
||||
<article class="card">
|
||||
<h2>Куда можно поехать</h2>
|
||||
<p>В каталоге есть пляжные, экскурсионные и комбинированные туры с разным бюджетом и длительностью.</p>
|
||||
<p>Мы обновляем подборку каждую неделю, чтобы в ней были только актуальные предложения.</p>
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<h2>Быстрые ссылки</h2>
|
||||
<ul>
|
||||
<li><a href="news.html">Открыть новости</a></li>
|
||||
<li><a href="booking.html">Оставить заявку</a></li>
|
||||
<li><a href="contacts.html">Наши контакты</a></li>
|
||||
</ul>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
<h2>Идеи для следующей поездки</h2>
|
||||
<div class="slider">
|
||||
<div class="slide active">
|
||||
<img src="images/photo1.jpg" alt="Горы">
|
||||
<div class="slide-caption">Горные приключения</div>
|
||||
</div>
|
||||
<div class="slide">
|
||||
<img src="images/photo10.webp" alt="Пляж">
|
||||
<div class="slide-caption">Пляжный отдых</div>
|
||||
</div>
|
||||
<div class="slide">
|
||||
<img src="images/photo8.jpg" alt="Город">
|
||||
<div class="slide-caption">Экскурсии по городам</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru</div>
|
||||
</footer>
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
97
labWeb/kt_3/news.html
Normal file
@@ -0,0 +1,97 @@
|
||||
<!doctype html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Вокруг Света | Новости</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<div class="container header-inner">
|
||||
<a class="logo" href="index.html">Вокруг Света</a>
|
||||
<button id="burger" class="burger" aria-label="Меню">☰</button>
|
||||
<nav id="siteNav" class="site-nav">
|
||||
<ul>
|
||||
<li><a href="index.html">Главная</a></li>
|
||||
<li><a class="active" href="news.html">Новости</a></li>
|
||||
<li><a href="cards.html">Направления</a></li>
|
||||
<li><a href="tours.html">Расписание</a></li>
|
||||
<li><a href="booking.html">Заявка</a></li>
|
||||
<li><a href="contacts.html">Контакты</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="container">
|
||||
<h1>Новости туризма</h1>
|
||||
<p>Следим за обновлениями в отрасли и публикуем важные изменения по направлениям, ценам и условиям поездок.</p>
|
||||
<section class="news-grid">
|
||||
<article class="news-item">
|
||||
<img src="images/photo1.jpg" alt="Новость 1">
|
||||
<div class="news-item-content">
|
||||
<h3>Открыт новый маршрут в Исландию</h3>
|
||||
<p>Маршрут включает ледники, водопады и вулканические зоны.</p>
|
||||
<button class="btn open-news" data-title="Открыт новый маршрут в Исландию" data-full="С мая 2026 года запускается недельный тур по Исландии с гидом. Программа включает экскурсии к водопадам, посещение ледниковой лагуны и наблюдение северного сияния в вечернее время.">Читать полностью</button>
|
||||
</div>
|
||||
</article>
|
||||
<article class="news-item">
|
||||
<img src="images/photo2.jpeg" alt="Новость 2">
|
||||
<div class="news-item-content">
|
||||
<h3>Снижены цены на летние туры</h3>
|
||||
<p>Раннее бронирование позволяет сэкономить до 25%.</p>
|
||||
<button class="btn open-news" data-title="Снижены цены на летние туры" data-full="До конца месяца действует акция на летние направления: Турция, Греция и Черногория. При бронировании заранее доступны расширенные условия отмены и бесплатный трансфер от аэропорта.">Читать полностью</button>
|
||||
</div>
|
||||
</article>
|
||||
<article class="news-item">
|
||||
<img src="images/photo3.jpeg" alt="Новость 3">
|
||||
<div class="news-item-content">
|
||||
<h3>Новые экскурсии по историческим местам</h3>
|
||||
<p>Добавлены программы с профессиональными гидами.</p>
|
||||
<button class="btn open-news" data-title="Новые экскурсии по историческим местам" data-full="В разделе экскурсионных туров появились новые маршруты по Европе и Азии. Участники смогут посетить музеи, архитектурные памятники и местные фестивали с русскоязычным сопровождением.">Читать полностью</button>
|
||||
</div>
|
||||
</article>
|
||||
<article class="news-item">
|
||||
<img src="images/photo4.jpeg" alt="Новость 4">
|
||||
<div class="news-item-content">
|
||||
<h3>Запущена программа семейных туров</h3>
|
||||
<p>Специальные условия для семей с детьми до 12 лет.</p>
|
||||
<button class="btn open-news" data-title="Запущена программа семейных туров" data-full="Новая программа ориентирована на спокойный отдых с детьми. В стоимость включены детские активности, анимация в отелях и скидки на второй номер для большой семьи.">Читать полностью</button>
|
||||
</div>
|
||||
</article>
|
||||
<article class="news-item">
|
||||
<img src="images/photo5.jpeg" alt="Новость 5">
|
||||
<div class="news-item-content">
|
||||
<h3>Появились зимние туры на Байкал</h3>
|
||||
<p>Катание на коньках, фототуры и горячие источники.</p>
|
||||
<button class="btn open-news" data-title="Появились зимние туры на Байкал" data-full="Компания подготовила зимнюю программу на Байкале: прозрачный лед, фотосессии, катание на снегоходах и посещение термальных источников. Доступны туры на 5 и 8 дней.">Читать полностью</button>
|
||||
</div>
|
||||
</article>
|
||||
<article class="news-item">
|
||||
<img src="images/photo6.jpeg" alt="Новость 6">
|
||||
<div class="news-item-content">
|
||||
<h3>Обновлены правила страхования</h3>
|
||||
<p>Включена расширенная медицинская поддержка.</p>
|
||||
<button class="btn open-news" data-title="Обновлены правила страхования" data-full="Во всех пакетных турах теперь действует обновленная страховка. Она покрывает экстренную медицинскую помощь, задержки рейсов и дополнительные расходы при вынужденном продлении поездки.">Читать полностью</button>
|
||||
</div>
|
||||
</article>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<div id="newsModal" class="modal-overlay">
|
||||
<div class="modal">
|
||||
<div class="modal-head">
|
||||
<h2 id="modalTitle">Новость</h2>
|
||||
<button id="closeModal" class="close-btn">Закрыть</button>
|
||||
</div>
|
||||
<p id="modalText"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru</div>
|
||||
</footer>
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
117
labWeb/kt_3/script.js
Normal file
@@ -0,0 +1,117 @@
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const burger = document.getElementById("burger");
|
||||
const nav = document.getElementById("siteNav");
|
||||
if (burger && nav) {
|
||||
burger.addEventListener("click", function () {
|
||||
nav.classList.toggle("open");
|
||||
});
|
||||
}
|
||||
|
||||
const dateBox = document.getElementById("todayDate");
|
||||
if (dateBox) {
|
||||
const now = new Date();
|
||||
dateBox.textContent = now.toLocaleDateString("ru-RU", {
|
||||
year: "numeric",
|
||||
month: "long",
|
||||
day: "numeric",
|
||||
weekday: "long"
|
||||
});
|
||||
}
|
||||
|
||||
const slides = Array.from(document.querySelectorAll(".slide"));
|
||||
if (slides.length > 0) {
|
||||
let slideIndex = 0;
|
||||
setInterval(function () {
|
||||
slides[slideIndex].classList.remove("active");
|
||||
slideIndex = (slideIndex + 1) % slides.length;
|
||||
slides[slideIndex].classList.add("active");
|
||||
}, 3000);
|
||||
}
|
||||
|
||||
const newsModal = document.getElementById("newsModal");
|
||||
const modalTitle = document.getElementById("modalTitle");
|
||||
const modalText = document.getElementById("modalText");
|
||||
const closeModalBtn = document.getElementById("closeModal");
|
||||
const newsButtons = document.querySelectorAll(".open-news");
|
||||
|
||||
if (newsModal && modalTitle && modalText && closeModalBtn && newsButtons.length) {
|
||||
newsButtons.forEach(function (btn) {
|
||||
btn.addEventListener("click", function () {
|
||||
modalTitle.textContent = btn.dataset.title || "Новость";
|
||||
modalText.textContent = btn.dataset.full || "";
|
||||
newsModal.classList.add("open");
|
||||
});
|
||||
});
|
||||
|
||||
closeModalBtn.addEventListener("click", function () {
|
||||
newsModal.classList.remove("open");
|
||||
});
|
||||
|
||||
newsModal.addEventListener("click", function (event) {
|
||||
if (event.target === newsModal) {
|
||||
newsModal.classList.remove("open");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const geoBtn = document.getElementById("geoBtn");
|
||||
const geoResult = document.getElementById("geoResult");
|
||||
if (geoBtn && geoResult) {
|
||||
geoBtn.addEventListener("click", function () {
|
||||
if (!navigator.geolocation) {
|
||||
geoResult.textContent = "Геолокация не поддерживается.";
|
||||
return;
|
||||
}
|
||||
geoResult.textContent = "Определяем координаты...";
|
||||
navigator.geolocation.getCurrentPosition(
|
||||
function (position) {
|
||||
const lat = position.coords.latitude.toFixed(5);
|
||||
const lon = position.coords.longitude.toFixed(5);
|
||||
geoResult.textContent = "Ваши координаты: " + lat + ", " + lon;
|
||||
},
|
||||
function () {
|
||||
geoResult.textContent = "Не удалось получить геолокацию.";
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
const bookingForm = document.getElementById("bookingForm");
|
||||
const formResult = document.getElementById("formResult");
|
||||
if (bookingForm && formResult) {
|
||||
const saved = localStorage.getItem("bookingData");
|
||||
if (saved) {
|
||||
const parsed = JSON.parse(saved);
|
||||
for (const key in parsed) {
|
||||
const el = bookingForm.elements[key];
|
||||
if (el) {
|
||||
el.value = parsed[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bookingForm.addEventListener("submit", function (event) {
|
||||
event.preventDefault();
|
||||
const formData = new FormData(bookingForm);
|
||||
const dataObj = {};
|
||||
formData.forEach(function (value, key) {
|
||||
dataObj[key] = value;
|
||||
});
|
||||
|
||||
localStorage.setItem("bookingData", JSON.stringify(dataObj));
|
||||
formResult.innerHTML =
|
||||
"<h3>Результат обработки формы</h3>" +
|
||||
"<p><b>Имя:</b> " + (dataObj.firstName || "") + "</p>" +
|
||||
"<p><b>Фамилия:</b> " + (dataObj.lastName || "") + "</p>" +
|
||||
"<p><b>Email:</b> " + (dataObj.email || "") + "</p>" +
|
||||
"<p><b>Телефон:</b> " + (dataObj.phone || "") + "</p>" +
|
||||
"<p><b>Город вылета:</b> " + (dataObj.city || "") + "</p>" +
|
||||
"<p><b>Направление:</b> " + (dataObj.direction || "") + "</p>" +
|
||||
"<p><b>Дата старта:</b> " + (dataObj.startDate || "") + "</p>" +
|
||||
"<p><b>Дата возврата:</b> " + (dataObj.endDate || "") + "</p>" +
|
||||
"<p><b>Количество человек:</b> " + (dataObj.people || "") + "</p>" +
|
||||
"<p><b>Бюджет:</b> " + (dataObj.budget || "") + " руб.</p>" +
|
||||
"<p><b>Комментарий:</b> " + (dataObj.comment || "") + "</p>";
|
||||
});
|
||||
}
|
||||
});
|
||||
375
labWeb/kt_3/styles.css
Normal file
@@ -0,0 +1,375 @@
|
||||
:root {
|
||||
--bg: #f6f7fb;
|
||||
--card: #ffffff;
|
||||
--text: #222;
|
||||
--muted: #667085;
|
||||
--accent: #3b82f6;
|
||||
--accent-dark: #1d4ed8;
|
||||
--border: #e5e7eb;
|
||||
--shadow: 0 10px 20px rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Arial, sans-serif;
|
||||
color: var(--text);
|
||||
background: var(--bg);
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: min(1100px, 92%);
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.site-header {
|
||||
background: #0f172a;
|
||||
color: #fff;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 30;
|
||||
}
|
||||
|
||||
.header-inner {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
min-height: 64px;
|
||||
}
|
||||
|
||||
.logo {
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
.burger {
|
||||
display: none;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
color: #fff;
|
||||
font-size: 26px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.site-nav ul {
|
||||
list-style: none;
|
||||
display: flex;
|
||||
gap: 18px;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.site-nav a {
|
||||
color: #fff;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.site-nav a:hover,
|
||||
.site-nav a.active {
|
||||
opacity: 1;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.hero {
|
||||
margin-top: 20px;
|
||||
background: linear-gradient(120deg, #dbeafe, #f0f9ff);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 14px;
|
||||
padding: 26px;
|
||||
}
|
||||
|
||||
.hero h1 {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.grid-home {
|
||||
display: grid;
|
||||
grid-template-columns: 2fr 1fr;
|
||||
gap: 18px;
|
||||
margin: 20px 0 30px;
|
||||
}
|
||||
|
||||
.card {
|
||||
background: var(--card);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 12px;
|
||||
padding: 16px;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
|
||||
.slider {
|
||||
overflow: hidden;
|
||||
border-radius: 10px;
|
||||
position: relative;
|
||||
min-height: 240px;
|
||||
}
|
||||
|
||||
.slide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.slide.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.slide img {
|
||||
width: 100%;
|
||||
height: 240px;
|
||||
object-fit: cover;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.slide-caption {
|
||||
position: absolute;
|
||||
left: 8px;
|
||||
right: 8px;
|
||||
bottom: 8px;
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
color: #fff;
|
||||
padding: 8px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.btn {
|
||||
background: var(--accent);
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
padding: 9px 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
background: var(--accent-dark);
|
||||
}
|
||||
|
||||
.news-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 14px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.news-item {
|
||||
background: #fff;
|
||||
border-radius: 10px;
|
||||
border: 1px solid var(--border);
|
||||
overflow: hidden;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
|
||||
.news-item img {
|
||||
width: 100%;
|
||||
height: 160px;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.news-item-content {
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.cards-flex {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 14px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.tour-card {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: calc(25% - 11px);
|
||||
background: #fff;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tour-card img {
|
||||
width: 100%;
|
||||
height: 140px;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.tour-card-body {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
border: 1px solid var(--border);
|
||||
padding: 10px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
background: #e2e8f0;
|
||||
}
|
||||
|
||||
form {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
label {
|
||||
display: block;
|
||||
font-size: 14px;
|
||||
color: var(--muted);
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
width: 100%;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 7px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
textarea {
|
||||
min-height: 90px;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
.form-full {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
.result {
|
||||
margin-top: 16px;
|
||||
background: #fff;
|
||||
border: 1px dashed #94a3b8;
|
||||
border-radius: 10px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.map-wrap iframe {
|
||||
width: 100%;
|
||||
border: 0;
|
||||
border-radius: 10px;
|
||||
min-height: 300px;
|
||||
}
|
||||
|
||||
.modal-overlay {
|
||||
display: none;
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
background: rgba(0, 0, 0, 0.65);
|
||||
z-index: 100;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.modal-overlay.open {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.modal {
|
||||
width: min(720px, 100%);
|
||||
background: #fff;
|
||||
border-radius: 12px;
|
||||
padding: 18px;
|
||||
}
|
||||
|
||||
.modal-head {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.close-btn {
|
||||
border: 0;
|
||||
background: #e2e8f0;
|
||||
border-radius: 6px;
|
||||
padding: 6px 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.site-footer {
|
||||
margin-top: 30px;
|
||||
background: #0f172a;
|
||||
color: #fff;
|
||||
padding: 14px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media (max-width: 960px) {
|
||||
.news-grid {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
.tour-card {
|
||||
width: calc(33.333% - 10px);
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 760px) {
|
||||
.burger {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.site-nav {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 64px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: #0f172a;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.16);
|
||||
}
|
||||
|
||||
.site-nav.open {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.site-nav ul {
|
||||
flex-direction: column;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.grid-home {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.news-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.tour-card {
|
||||
width: calc(50% - 7px);
|
||||
}
|
||||
|
||||
form {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.tour-card {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
58
labWeb/kt_3/tours.html
Normal file
@@ -0,0 +1,58 @@
|
||||
<!doctype html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Вокруг Света | Расписание</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<div class="container header-inner">
|
||||
<a class="logo" href="index.html">Вокруг Света</a>
|
||||
<button id="burger" class="burger" aria-label="Меню">☰</button>
|
||||
<nav id="siteNav" class="site-nav">
|
||||
<ul>
|
||||
<li><a href="index.html">Главная</a></li>
|
||||
<li><a href="news.html">Новости</a></li>
|
||||
<li><a href="cards.html">Направления</a></li>
|
||||
<li><a class="active" href="tours.html">Расписание</a></li>
|
||||
<li><a href="booking.html">Заявка</a></li>
|
||||
<li><a href="contacts.html">Контакты</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="container">
|
||||
<h1>Расписание туров на месяц</h1>
|
||||
<p>Ниже представлены ближайшие выезды по популярным направлениям с актуальными ценами и количеством свободных мест.</p>
|
||||
<div class="card">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Дата</th>
|
||||
<th>Направление</th>
|
||||
<th>Длительность</th>
|
||||
<th>Цена</th>
|
||||
<th>Свободные места</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>05.05.2026</td><td>Турция</td><td>7 дней</td><td>58 000</td><td>12</td></tr>
|
||||
<tr><td>08.05.2026</td><td>Италия</td><td>8 дней</td><td>84 000</td><td>6</td></tr>
|
||||
<tr><td>10.05.2026</td><td>Грузия</td><td>6 дней</td><td>49 000</td><td>9</td></tr>
|
||||
<tr><td>13.05.2026</td><td>Франция</td><td>9 дней</td><td>102 000</td><td>4</td></tr>
|
||||
<tr><td>17.05.2026</td><td>Исландия</td><td>7 дней</td><td>120 000</td><td>5</td></tr>
|
||||
<tr><td>20.05.2026</td><td>Норвегия</td><td>8 дней</td><td>111 000</td><td>7</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru</div>
|
||||
</footer>
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||