Ссылка на дизайн в Figma: https://www.figma.com/design/
Мы видим, что отправка запроса происходит во новом окне, которое открывается на новой странице. Но бывают варианты, когда окно регистрации или отправки заявки появляется прям поверх страницы.
Есть два вида таких окон -
всплывающие
и
модальные
.
Всплывающие окна позволяют продолжать взаимодействие со страницей, не блокируя её. Это окно может находиться в любой части страницы и его можно закрыть.
Модальные окна блокируют страницу и вам на выбор остается два пути - заполнить форму и нажать кнопку "Отправить" или Закрыть модальное окно.
Это делается с помощью JavaScript - языка программирования, который мы будем изучать дальше.
Но в данном макете мы будем использовать новую страницу для оформления запроса на обратную связь. Для начала создадим новый
.html
файл в корневой папке нашего проекта.
В файле CSS в самом низу добавьте разделяющий комментарий, который нужно закомменировать. Это нужно для того чтобы визуально отделять код для разных файлов.
Скопируйте из файла
index.html
весь код и удалите лишнее. Обратите внимание, что на новой странице
<header>
и
<footer>
такие же, как и на главное, поэтому их можно оставить. А вот то, что находится в части
<main>
меняется - это можно удалить.
Первым блоком в
<main>
идёт баннер. Создадим для него отдельный
<article>
. И зададим классы.
Скачайте изображение стрелки в папку
img
. Изображение логотипа у вас уже есть в папке.
Скачайте изображение баннера в папке
img
. Чтобы не усложнять себе жизнь настройками фильтров для приглушения фона, просто скачайте уже полупрозрачную картинку от дизайнера в формате
.png
.
<article class="contacts_banner">
<div class="container">
<img class="contacts_logo" src="img/logo.png" alt="Логотип">
<h1 class="contacts_title">Контакты</h1>
<a class="breadcrumbs" href="#">Главная</a>
<img class="breadcrumbs" src="img/arrow.png" alt="Стрелка">
<span class="breadcrumbs">Контакты</span>
</div>
</article>
Далее настраиваем классы.
Добавим фоновое изображение и зададим блоку внутренние отступы, чтобы отделить контент внутри него.
.contacts_banner {
background-image: url(../img/contacts-banner.png);
background-repeat: no-repeat;
background-position: center;
background-size: cover;
padding: 61px 0 98px;
}
Блок с классом
container
позволит нам расположить его по центру страницы со всеми его элементами внутри.
.container {
text-align: center;
}
Далее логотип. Если вы посмотрите на макете, то дизайнер не упростил нам работу, так как не задал правильно размеры элементов. Сейчас мы оставим логотип таким же размером, как он у нас сохранён ранее, не будем ничего менять. Только зададим нижний отступ.
.contacts_logo {
margin-bottom: 15px;
}
Далее заголовок. Я использовала тег
<h1>
, так как у нас новая страница и поэтому по правилам синтаксиса мы можем использовать заголовок этого уровня на каждой новой странице только один раз.
.contacts_title {
margin: 0;
margin-bottom: 20px;
font-size: 48px;
}
Далее элементы из хлебных крошек. Нужно задать им расстояние справа, а так же выровнять по горизонтали.
.breadcrumbs {
vertical-align: middle;
}
.breadcrumbs:not(:last-child) {
margin-right: 6px;
}
Отлично, блок с баннером готов. Потом эту основу можно использовать для других второстепенных страниц.
Далее переходим к блоку с формой отправки заявки.
Если посмотреть внимательно на этот раздел, то мы можем увидеть, что слева располагается блок с контактами, а справа форма. Учитываем это при формировании вёрстки.
Сначала разберёмся с левой частью блока.
<article class="contacts_form">
<ul class="list_reset contacts_list">
<li class="contacts_list_item">
<img src="img/list-img-1.png" alt="Адрес">
<h2 class="contacts_list_title">Адрес</h2>
<span class="contacts_list_text">Москва, 3 Микрорайон, д. 18, оф. 15</span>
</li>
<li class="contacts_list_item">
<img src="img/list-img-2.png" alt="Телефон">
<h2 class="contacts_list_title">Телефон</h2>
<span class="contacts_list_text">офис: <a href="tel:+845466789">+(84) 546-6789</a></span><br>
<span class="contacts_list_text">магазин: <a href="tel:+844566789">+(84) 456-6789</a></span>
</li>
<li class="contacts_list_item">
<img src="img/list-img-3.png" alt="Время">
<h2 class="contacts_list_title">Время работы</h2>
<span class="contacts_list_text">Пн-Пт: 9:00 - 22:00</span><br>
<span class="contacts_list_text">Сб-Вс: 9:00 - 21:00</span>
</li>
</ul>
</article>
Позиционируем весь блок по центру.
.contacts_form {
text-align: center;
}
Далее работаем с основой списка
<ul>
. Нам нужно чтобы контент был прижат к левому краю.
.contacts_list {
display: inline-block;
text-align: left;
}
Между элементами списка необходимо задать расстояние.
.contacts_list_item:not(:last-child) {
margin-bottom: 50px;
}
Чтобы сделать следующий шаг и разместить контент внутри элементов списка есть несколько способов:
- объединить первую строку (иконка + заголовок);
- оставить иконку отдельно и объединить заголовок + текст
От выбора будут зависеть стили для позиционирования. Я объединю текстовые блоки. Для этого в код HTML нужно добавить теги и класс.
<article class="contacts_form">
<ul class="list_reset contacts_list">
<li class="contacts_list_item flex">
<img class="contacts_list_icon" src="img/list-img-1.png" alt="Адрес">
<div>
<h2 class="contacts_list_title">Адрес</h2>
<span class="contacts_list_text">Москва, 3 Микрорайон, д. 18, оф. 15</span>
</div>
</li>
<li class="contacts_list_item flex">
<img class="contacts_list_icon" src="img/list-img-2.png" alt="Телефон">
<div>
<h2 class="contacts_list_title">Телефон</h2>
<span class="contacts_list_text">офис: <a href="tel:+845466789">+(84) 546-6789</a></span><br>
<span class="contacts_list_text">магазин: <a href="tel:+844566789">+(84) 456-6789</a></span>
</div>
</li>
<li class="contacts_list_item flex">
<img class="contacts_list_icon" src="img/list-img-3.png" alt="Время">
<div>
<h2 class="contacts_list_title">Время работы</h2>
<span class="contacts_list_text">Пн-Пт: 9:00 - 22:00</span><br>
<span class="contacts_list_text">Сб-Вс: 9:00 - 21:00</span>
</div>
</li>
</ul>
</article>
Зададим размер иконкам и расстояние межу иконкой и текстом.
Далее работаем с текстовыми блоками. Для этого нужно сделать его flex-блоком. И незабудьте удалить принудительные переносы строки (
<br>
) в телефонах и времени работы, а вот в адресе, наоборот, перенос нужно добавить.
<article class="contacts_form">
<ul class="list_reset contacts_list">
<li class="contacts_list_item flex">
<img class="contacts_list_icon" src="img/list-img-1.png" alt="Адрес">
<div class="flex contacts_list_block">
<h2 class="contacts_list_title">Адрес</h2>
<span class="contacts_list_text">Москва, 3 Микрорайон,<br> д. 18, оф. 15</span>
</div>
</li>
<li class="contacts_list_item flex">
<img class="contacts_list_icon" src="img/list-img-2.png" alt="Телефон">
<div class="flex contacts_list_block">
<h2 class="contacts_list_title">Телефон</h2>
<span class="contacts_list_text">офис: <a href="tel:+845466789">+(84) 546-6789</a></span>
<span class="contacts_list_text">магазин: <a href="tel:+844566789">+(84) 456-6789</a></span>
</div>
</li>
<li class="contacts_list_item flex">
<img class="contacts_list_icon" src="img/list-img-3.png" alt="Время">
<div class="flex contacts_list_block">
<h2 class="contacts_list_title">Время работы</h2>
<span class="contacts_list_text">Пн-Пт: 9:00 - 22:00</span>
<span class="contacts_list_text">Сб-Вс: 9:00 - 21:00</span>
</div>
</li>
</ul>
</article>
Сделаем отступ справа, чтобы отделить контакты от формы.
.contacts_list {
display: inline-block;
text-align: left;
margin-right: 110px;
}
Далее работаем с формой.
В форму ставим ссылку для проверки корректности отправки данных - https://jsonplaceholder.typicode.com/posts а так же пишем метод отправки данных "post".
Внутри формы на макете мы видим 5 элементов, будем добавлять их последовательно.
Форма для ввода данных -
<input>
. Для того чтобы правильно оформить заголовок для поля с вводом данных, используем тег
<label>
.
<article class="contacts_form">
<ul class="list_reset contacts_list">
...
</ul>
<form action="https://jsonplaceholder.typicode.com/posts" method="post">
<label for="username">Имя Фамилия
<input type="text" placeholder="Иванова Светлана" required>
</label>
</form>
</article>