Перейти к основному содержимому

Шаблоны простых элементов веб-страниц

Разработчику Архитектору

Шаблоны простых элементов веб-страниц

Простые элементы веб-страниц составляют основу любого пользовательского интерфейса. Они обеспечивают взаимодействие пользователя с системой, позволяют вводить данные, просматривать информацию и управлять приложением. Эти компоненты универсальны — их можно встретить на сайтах электронной коммерции, в личных кабинетах, административных панелях, формах обратной связи и множестве других контекстов.

Настоящая глава представляет собой справочник по наиболее часто используемым шаблонам HTML-элементов, дополненных базовой стилизацией через CSS и минимальной серверной логикой на PHP. Все примеры написаны с учётом современных стандартов веб-разработки, семантической корректности и доступности (accessibility). Каждый шаблон автономен, легко копируется и адаптируется под конкретные задачи.


Форма входа (Login Form)

Форма входа — один из самых распространённых элементов веб-интерфейсов. Она позволяет пользователю аутентифицироваться в системе с использованием логина (или email) и пароля.


Структура HTML

Код ITЗагрузка примера кода…

Разбор:

  • <form ... method="POST" action="login.php"> отправляет учетные данные на серверный обработчик login.php.
  • novalidate отключает встроенные сообщения браузера, чтобы проект мог использовать собственную стратегию валидации.
  • type="email" и type="password" задают корректные типы полей и улучшают UX на мобильных устройствах.
  • required в полях помогает отсеять пустые отправки еще до сервера, но не заменяет серверную проверку.
  • autocomplete="email" и autocomplete="current-password" подсказывают менеджерам паролей правильное поведение.
  • Чекбокс remember передает отдельный флаг, на основе которого на сервере можно ставить долгоживущую cookie.

Базовый CSS

Код ITЗагрузка примера кода…

Разбор:

  • Селектор #loginForm задает карточечный контейнер формы — ограниченная ширина, отступы, фон и скругления.
  • .form-group структурирует поля с равномерными вертикальными интервалами, упрощая чтение формы.
  • box-sizing: border-box в инпутах предотвращает "выпирание" ширины за контейнер.
  • button[type="submit"] получает акцентный стиль и hover-состояние для визуальной обратной связи.
  • .form-check переводит чекбокс и подпись в удобную горизонтальную линию.
  • Блок .form-footer оформляет вторичные ссылки ("забыли пароль", "регистрация") как вспомогательную навигацию.

Пример обработки на PHP (login.php)

Код ITЗагрузка примера кода…

Разбор:

  • session_start() инициализирует сессию и позволяет хранить состояние авторизации между запросами.
  • Проверка $_SERVER['REQUEST_METHOD'] === 'POST' ограничивает обработку только отправкой формы.
  • filter_var(..., FILTER_SANITIZE_EMAIL) очищает email, а FILTER_VALIDATE_EMAIL валидирует формат адреса.
  • $_POST['password'] ?? '' и isset($_POST['remember']) безопасно читают входные поля с дефолтами.
  • При успешной проверке учетных данных email кладется в $_SESSION, а опция "запомнить" создает cookie через setcookie(...).
  • header('Location: dashboard.php'); exit; делает редирект и обязательно завершает скрипт после отправки заголовка.

📌 Внимание
В реальных проектах пароли никогда не хранятся в открытом виде. Используйте password_hash() и password_verify() для безопасной работы с паролями.


Таблица с данными

Таблицы используются для отображения структурированной информации — списков пользователей, товаров, заказов и т.д.


HTML

Код ITЗагрузка примера кода…


CSS

Код ITЗагрузка примера кода…


Пагинация

Пагинация позволяет разбивать длинные списки на страницы.


HTML

<nav aria-label="Навигация по страницам">
<ul class="pagination">
<li><a href="?page=1" aria-label="Первая страница">&laquo;</a></li>
<li><a href="?page=2" aria-label="Предыдущая страница">&lsaquo;</a></li>
<li><a href="?page=1">1</a></li>
<li><a href="?page=2">2</a></li>
<li class="active"><span>3</span></li>
<li><a href="?page=4">4</a></li>
<li><a href="?page=5">5</a></li>
<li><a href="?page=4" aria-label="Следующая страница">&rsaquo;</a></li>
<li><a href="?page=10" aria-label="Последняя страница">&raquo;</a></li>
</ul>
</nav>

CSS

Код ITЗагрузка примера кода…


PHP-логика

<?php
$page = $_GET['page'] ?? 1;
$perPage = 10;
$totalItems = 123; // Например, из COUNT(*) в SQL
$totalPages = ceil($totalItems / $perPage);
$page = max(1, min($page, $totalPages));

$offset = ($page - 1) * $perPage;

// Запрос к БД с LIMIT и OFFSET
// SELECT * FROM users LIMIT $perPage OFFSET $offset
?>

Разбор:

  • $page = $_GET['page'] ?? 1 задает страницу по умолчанию, если параметр не передан.
  • $totalPages = ceil($totalItems / $perPage) вычисляет общее число страниц на основе количества записей.
  • max(1, min($page, $totalPages)) ограничивает страницу допустимым диапазоном и защищает от выхода за границы.
  • $offset = ($page - 1) * $perPage рассчитывает смещение для SQL-пагинации.
  • Комментарий с LIMIT/OFFSET показывает, как серверная логика связывается с запросом к БД.
  • Такой шаблон — база для списка пользователей, заказов, товаров и любых табличных выдач.

Кнопки разных типов

Кнопки — ключевой элемент управления.


HTML

<div class="button-group">
<button class="btn-primary">Основная</button>
<button class="btn-secondary">Второстепенная</button>
<button class="btn-success">Успех</button>
<button class="btn-danger">Опасность</button>
<button class="btn-warning">Предупреждение</button>
<button class="btn-info">Информация</button>
<button class="btn-link">Ссылка</button>
</div>

CSS

Код ITЗагрузка примера кода…


Вкладки (Tabs)

Вкладки — это интерфейсный паттерн, позволяющий переключаться между различными секциями контента без перезагрузки страницы. Они улучшают навигацию и организацию информации.


HTML

Код ITЗагрузка примера кода…


CSS

Код ITЗагрузка примера кода…


JavaScript (опционально, для интерактивности)

Код ITЗагрузка примера кода…

Разбор:

  • Скрипт навешивает обработчик клика на каждую кнопку вкладки через querySelectorAll(...).forEach(...).
  • Перед активацией новой вкладки он снимает класс active у всех кнопок и прячет все панели классом hidden.
  • Затем текущей кнопке возвращается active, а связанная панель определяется через aria-controls.
  • document.getElementById(panelId).classList.remove('hidden') показывает нужный блок контента.
  • Дополнительно обновляется aria-selected, чтобы состояние вкладок было корректным для ассистивных технологий.
  • Подход дает переключение разделов без перезагрузки страницы и поддерживает базовую доступность.

📌 Внимание
Для доступности важно использовать ARIA-атрибуты (role, aria-selected, aria-controls, aria-labelledby). Это позволяет пользователям скринридеров корректно взаимодействовать с вкладками.


Простой калькулятор

Калькулятор — полезный элемент для демонстрации обработки пользовательского ввода и вычислений на стороне клиента или сервера.


HTML + PHP (серверная версия)

Код ITЗагрузка примера кода…

Разбор:

  • Форма отправляет два числа и операцию на сервер, где вычисление выполняется в PHP-блоке.
  • value="<?= htmlspecialchars($_POST['a'] ?? '') ?>" сохраняет введенные значения после submit и экранирует вывод.
  • Валидация проверяет числовой формат через is_numeric(...) и отдельно обрабатывает деление на ноль.
  • switch ($op) маршрутизирует арифметическую операцию по символу +, -, *, /.
  • Ошибка и результат выводятся в разных ветках if ($error), обе с htmlspecialchars(...) для безопасного рендера.
  • number_format($result, 6, '.', '') нормализует формат результата (фиксированная точность и десятичная точка).

CSS для калькулятора

Код ITЗагрузка примера кода…

💡 Совет
Серверная реализация гарантирует работу даже при отключённом JavaScript. Для более сложных калькуляторов (например, с историей или научными функциями) лучше использовать клиентский JavaScript.


Поля ввода разных типов

Современный HTML предоставляет множество типов <input>, улучшающих UX и валидацию.


HTML

Код ITЗагрузка примера кода…


CSS

Код ITЗагрузка примера кода…

⚠️ Предупреждение
Типы email, url, number и другие обеспечивают базовую валидацию на клиенте, но никогда не заменяют серверную проверку. Злоумышленник может легко обойти клиентские ограничения.


Форма обратной связи

Форма обратной связи — стандартный элемент веб-сайта, позволяющий пользователю отправить сообщение владельцу ресурса. Она часто используется для запросов поддержки, предложений или жалоб.


HTML

Код ITЗагрузка примера кода…


CSS

Код ITЗагрузка примера кода…


PHP (send_feedback.php)

Код ITЗагрузка примера кода…

Разбор:

  • Обработчик формы обратной связи запускается только на POST, что отделяет просмотр страницы от отправки данных.
  • trim(...) убирает лишние пробелы у имени и сообщения, повышая качество входных данных.
  • Email сначала санитизируется, затем валидируется, чтобы снизить шум и отсеять некорректные адреса.
  • in_array($subject, [...]) ограничивает тему белым списком допустимых значений.
  • При нарушении правил выполнение прерывается через die(...), а при успехе возвращается подтверждение отправки.
  • Комментарии показывают, где подключать реальную интеграцию: почтовый сервис или сохранение в БД.

📌 Внимание
На продакшене используйте библиотеки вроде PHPMailer или SwiftMailer для надёжной отправки почты и защиты от спама. Обязательно добавьте защиту от CSRF и rate limiting.


Поиск по сайту

Простая форма поиска позволяет пользователю искать контент на сайте.


HTML

<form class="search-form" method="GET" action="search.php">
<div class="search-container">
<input type="text" name="q" placeholder="Поиск по сайту…" required>
<button type="submit">🔍</button>
</div>
</form>

CSS

Код ITЗагрузка примера кода…


PHP (search.php)

Код ITЗагрузка примера кода…

Разбор:

  • Поисковый запрос берется из $_GET, очищается trim и проверяется на пустоту.
  • Массив $pages в примере имитирует источник данных; в реальном проекте его заменяет БД/поисковый движок.
  • array_filter(...) отбирает элементы по условию в замыкании fn($page) => ....
  • stripos(...) !== false выполняет поиск без учета регистра в title и content.
  • Вывод результатов обрамлен htmlspecialchars(...), чтобы пользовательский ввод и текст из источника были безопасны.
  • Блок if (count($results)) ... else ... разделяет сценарии "найдено" и "ничего не найдено".

💡 Совет
Для полноценного поиска используйте Elasticsearch, Sphinx или хотя бы FULLTEXT индексы в MySQL.


Карточка товара / элемент списка

Часто используется в интернет-магазинах, каталогах, блогах.


HTML

<article class="product-card">
<img src="product.jpg" alt="Название товара" loading="lazy">
<div class="product-info">
<h3>Название товара</h3>
<p class="price">1 990 ₽</p>
<p class="description">Краткое описание товара, его особенности и преимущества.</p>
<button class="btn btn-primary">В корзину</button>
</div>
</article>

CSS

Код ITЗагрузка примера кода…


Страница профиля пользователя

Страница профиля — это персональное пространство, где отображаются данные о пользователе, его активность и настройки. Она часто включает аватар, контактную информацию, историю действий и возможность редактирования данных.


HTML

Код ITЗагрузка примера кода…


CSS

Код ITЗагрузка примера кода…

📌 Внимание
На продакшене аватары следует загружать через защищённые маршруты с проверкой MIME-типов и ограничением размера файла.


Модальное окно (Modal)

Модальные окна используются для показа важной информации, подтверждения действий или сбора данных без перехода на другую страницу.


HTML

Код ITЗагрузка примера кода…


CSS

Код ITЗагрузка примера кода…


JavaScript

Код ITЗагрузка примера кода…

💡 Совет
Для доступности важно управлять фокусом: при открытии модального окна фокус должен перемещаться внутрь него, а при закрытии — возвращаться к вызвавшему элементу.


Форма регистрации

Форма регистрации позволяет новому пользователю создать аккаунт.


HTML

Код ITЗагрузка примера кода…


CSS (частично совпадает с формой входа)

Код ITЗагрузка примера кода…


PHP (register.php)

Код ITЗагрузка примера кода…

Разбор:

  • Этот обработчик регистрации получает и валидирует имя, email, пароль и подтверждение пароля.
  • Проверка $password !== $confirm исключает несогласованные данные до обращения к БД.
  • strlen($password) < 8 и preg_match(...) реализуют базовые требования сложности пароля.
  • password_hash($password, PASSWORD_DEFAULT) создает безопасный хеш вместо хранения открытого пароля.
  • Комментарии обозначают инфраструктурные шаги: проверка уникальности email и вставка пользователя в БД.
  • При успехе возвращается сообщение и ссылка на вход в систему.

⚠️ Предупреждение
Никогда не храните пароли в открытом виде. Используйте password_hash() и password_verify().


Форма обратной связи с валидацией на стороне клиента

Для улучшения пользовательского опыта можно добавить базовую валидацию прямо в браузере, не дожидаясь ответа сервера. Это снижает нагрузку на сервер и делает взаимодействие более отзывчивым.


HTML + JavaScript

Код ITЗагрузка примера кода…


CSS (дополнение)

.error {
display: block;
color: #dc3545;
font-size: 0.875rem;
margin-top: 0.25rem;
min-height: 1.2rem;
}

JavaScript

Код ITЗагрузка примера кода…

💡 Совет
Клиентская валидация — это удобство, а не защита. Всегда дублируйте проверки на сервере.


Простой список задач (To-Do List)

Элементарный интерфейс для управления персональными задачами.


HTML

<div class="todo-app">
<h2>Список задач</h2>
<form id="addTaskForm">
<input type="text" id="newTask" placeholder="Новая задача…" required>
<button type="submit">+</button>
</form>
<ul id="taskList">
<!-- Задачи будут добавляться сюда -->
</ul>
</div>

CSS

Код ITЗагрузка примера кода…


JavaScript

Код ITЗагрузка примера кода…

📌 Внимание
Данные хранятся в localStorage, что подходит для личного использования, но не для многопользовательских систем. Для общего доступа требуется серверное хранилище.


Страница восстановления пароля

Стандартный элемент безопасности, позволяющий пользователю сбросить забытый пароль.


HTML

<form id="resetForm" method="POST" action="reset_password.php">
<h2>Восстановление пароля</h2>
<p>Введите ваш email, и мы вышлем ссылку для сброса пароля.</p>
<div class="form-group">
<label for="resetEmail">Email</label>
<input type="email" id="resetEmail" name="email" required>
</div>
<button type="submit">Отправить ссылку</button>
<p class="form-footer">
<a href="login.php">← Назад к входу</a>
</p>
</form>

CSS

Код ITЗагрузка примера кода…


PHP (reset_password.php)

Код ITЗагрузка примера кода…

Разбор:

  • Восстановление пароля начинается с валидации email и нейтральной обработки запроса.
  • bin2hex(random_bytes(32)) генерирует криптостойкий токен для ссылки сброса.
  • Токен должен храниться в БД с TTL (например, 1 час) и признаком одноразового использования.
  • Отправка письма выполняется отдельным почтовым слоем, а не напрямую "сырым" mail в production.
  • Возвращаемое сообщение должно быть одинаковым вне зависимости от существования email, чтобы исключить enumeration.
  • Шаблон подчеркивает безопасность процесса, а не только UX.

⚠️ Предупреждение
Никогда не сообщайте пользователю, существует ли email в системе. Всегда выводите нейтральное сообщение, чтобы избежать перебора учётных записей.


Форма загрузки файла

Загрузка файлов — частая задача в веб-приложениях — аватары, документы, изображения и т.д.


HTML

<form id="uploadForm" method="POST" enctype="multipart/form-data" action="upload.php">
<h2>Загрузка файла</h2>
<div class="form-group">
<label for="fileInput">Выберите файл</label>
<input type="file" id="fileInput" name="uploaded_file" accept=".jpg,.jpeg,.png,.pdf,.doc,.docx" required>
<small class="hint">Поддерживаются: JPG, PNG, PDF, DOC/DOCX (макс. 5 МБ)</small>
</div>
<button type="submit">Загрузить</button>
</form>

CSS

Код ITЗагрузка примера кода…


PHP (upload.php)

Код ITЗагрузка примера кода…

Разбор:

  • Обработчик загрузки файла проверяет наличие $_FILES['uploaded_file'] и код ошибки UPLOAD_ERR_OK.
  • Ограничение размера ($maxSize) защищает от чрезмерной нагрузки и отказа в обслуживании.
  • MIME-тип проверяется через finfo_file(...), а не только по расширению, что безопаснее.
  • Имя файла генерируется случайно через random_bytes(...), чтобы избежать коллизий и атак через исходное имя.
  • При отсутствии директории выполняется mkdir(..., true), затем move_uploaded_file(...) переносит временный файл.
  • Успех/ошибка разделяются явно, а путь в выводе экранируется через htmlspecialchars(...).

⚠️ Предупреждение
Никогда не используйте оригинальное имя файла напрямую ($_FILES['name']) — это уязвимость. Всегда генерируйте уникальное безопасное имя.


Уведомления (Notifications)

Всплывающие сообщения для информирования пользователя об успехе, ошибках или предупреждениях.


HTML

<!-- Контейнер для уведомлений -->
<div id="notificationContainer"></div>

<!-- Пример вызова -->
<button onclick="showNotification('success', 'Данные успешно сохранены!')">Показать успех</button>
<button onclick="showNotification('error', 'Произошла ошибка при отправке.')">Показать ошибку</button>
<button onclick="showNotification('warning', 'Пароль слишком слабый.')">Показать предупреждение</button>

CSS

Код ITЗагрузка примера кода…


JavaScript

Код ITЗагрузка примера кода…

💡 Совет
Для доступности добавьте role="alert" к уведомлениям об ошибках и role="status" — к информационным.


Страница "404 — Не найдено"

Стандартная страница ошибки, отображаемая при обращении к несуществующему URL.


HTML

Код ITЗагрузка примера кода…

📌 Важно
Сервер должен возвращать HTTP-статус 404, а не просто показывать страницу с таким текстом. Иначе поисковые системы будут считать её валидной.


Как работать с шаблонами из статьи

Чтобы эти шаблоны приносили пользу в реальном проекте, удобно использовать единый порядок:

  1. Сначала берите HTML-шаблон и проверяйте семантику (label, fieldset, aria-*).
  2. Затем подключайте серверную обработку в отдельный PHP-файл.
  3. После этого добавляйте защиту — CSRF, валидацию, экранирование, rate limit.
  4. В конце переносите CSS и JS в отдельные файлы и покрывайте e2e-тестами.

Такой порядок позволяет быстро запускать MVP и при этом не пропускать требования безопасности.


Практический маршрут по энциклопедии


Основа по протоколу

Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.

Содержание