Создание своей HTML страницы
Чтобы создать HTML-страницу, достаточно использовать любой текстовый редактор — даже Блокнот. Однако для эффективной разработки рекомендуется использовать современный редактор кода, такой как Visual Studio Code (VS Code).
Как создать HTML-страницу
HTML-страница — это текстовый файл с расширением .html. Минимальная структура HTML-документа выглядит так:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Моя первая страница</title>
</head>
<body>
<h1>Привет, мир!</h1>
</body>
</html>
Сохраните этот код в файл с именем, например, index.html. Откройте его в браузере — вы увидите заголовок «Привет, мир!». Это и есть ваша первая веб-страница.
Как использовать JavaScript на странице
JavaScript можно подключать к HTML-странице двумя основными способами: встроенно (внутри HTML-файла) или через внешний файл. Второй способ — единственно правильный для профессиональной разработки.
В том же HTML файле (не рекомендуется)
JavaScript можно вставить прямо внутрь HTML-документа с помощью тега <script>:
<!DOCTYPE html>
<html>
<head>
<title>Страница с встроенным JS</title>
</head>
<body>
<h1>Привет!</h1>
<script>
alert("Это встроенный JavaScript!");
document.write("<p>Текст добавлен скриптом.</p>");
</script>
</body>
</html>
Почему это не рекомендуется:
- Нарушает принцип разделения ответственности: структура (HTML), стиль (CSS) и логика (JS) должны быть разделены.
- Сложно поддерживать и масштабировать код — особенно при росте проекта.
- Затрудняется повторное использование кода между страницами.
- Ухудшается читаемость и тестирование.
- Может замедлять загрузку страницы, если скрипт большой.
Используйте этот способ только для быстрых экспериментов, демонстраций или очень простых примеров.
Подключая внешний файл
Правильный и стандартный способ — создать отдельный файл с расширением .js и подключить его к HTML:
- Создайте файл
script.jsв той же папке, что иindex.html. - Напишите в нём JavaScript-код:
// script.js
alert("Это внешний JavaScript-файл!");
document.querySelector('h1').style.color = 'blue';
- Подключите его в HTML перед закрывающим тегом
</body>:
<!DOCTYPE html>
<html>
<head>
<title>Страница с внешним JS</title>
</head>
<body>
<h1>Привет!</h1>
<script src="script.js"></script>
</body>
</html>
Преимущества:
- Чистый, организованный код.
- Возможность переиспользования одного файла на нескольких страницах.
- Упрощённая отладка и версионный контроль (Git).
- Лучшая производительность — браузер может кэшировать внешние скрипты.
Где подключать JS — в конце или начале HTML-файла?
JavaScript следует подключать в самом конце тела HTML-документа, перед закрывающим тегом </body>.
Почему именно в конце?
Когда браузер встречает тег <script> во время парсинга HTML, он приостанавливает загрузку и разбор DOM-дерева, чтобы загрузить и выполнить скрипт. Если скрипт подключен в <head> или в начале <body>, а он пытается взаимодействовать с элементами, которые ещё не загружены — возникнет ошибка:
<head>
<script src="script.js"></script> <!-- ❌ Опасно! -->
</head>
<body>
<button id="myButton">Нажми меня</button>
</body>
Если в script.js написано:
document.getElementById('myButton').addEventListener('click', () => {
alert('Клик!');
});
— то скрипт выполнится до того, как кнопка появится в DOM, и getElementById вернёт null. Результат — ошибка в консоли.
Правильный способ:
<body>
<button id="myButton">Нажми меня</button>
<script src="script.js"></script> <!-- ✅ Безопасно: DOM уже построен -->
</body>
Теперь браузер сначала полностью загрузит и отрисует все элементы страницы, а только потом выполнит скрипт — и все запросы к DOM будут успешными.
Дополнительные преимущества:
- Быстрая отрисовка контента: пользователь видит страницу быстрее, без задержек из-за загрузки скриптов.
- Предсказуемое поведение: код работает только тогда, когда всё, к чему он обращается, уже существует.
- Совместимость с современными практиками: так делают все крупные фреймворки и библиотеки.
Исключения:
- Если скрипт не зависит от DOM (например, модуль аналитики, который запускается сразу при загрузке страницы), его можно размещать в
<head>. - Использование атрибута
defer(в<head>) позволяет отложить выполнение скрипта до завершения парсинга HTML — это альтернатива размещению в конце, но требует понимания нюансов.
<head>
<script src="script.js" defer></script> <!-- ✅ Альтернатива, если нужно в head -->
</head>
✅ Рекомендация: Всегда подключайте JavaScript-файлы перед закрывающим тегом
</body>, если только вы точно не знаете, что делаете и почему используетеdeferилиasync. Это — базовое правило надёжной и предсказуемой работы JavaScript на веб-странице.
Подключение логики обработки в кнопки
Чтобы реагировать на действия пользователя (например, нажатие кнопки), можно назначить обработчик события двумя способами: через атрибуты HTML или через JavaScript. Второй способ — единственный корректный для профессиональной разработки.
Через атрибут в кнопках (не рекомендуется)
Можно напрямую вписать JavaScript-код в атрибут onclick элемента:
<button onclick="alert('Кнопка нажата!')">Нажми меня</button>
Или вызвать функцию:
<script>
function handleClick() {
alert('Функция вызвана через атрибут!');
}
</script>
<button onclick="handleClick()">Нажми меня</button>
Почему это не рекомендуется:
- Смешивание ответственности: логика (JS) и структура (HTML) сливаются — нарушает принцип разделения.
- Сложность поддержки: сложно отлаживать, тестировать и рефакторить код, особенно при росте проекта.
- Уязвимость к ошибкам: если имя функции опечатано — ошибка не будет заметна до момента клика.
- Не масштабируемо: невозможно динамически добавлять/удалять обработчики, работать с несколькими элементами, использовать замыкания.
- Проблемы с безопасностью: в некоторых контекстах (CSP) использование
onclickможет быть заблокировано.
⚠️ Используйте этот способ только для быстрых экспериментов или учебных примеров — никогда в продакшене.
Через назначения обработчиков событий
Правильный и стандартный способ — назначать обработчики событий из JavaScript, после того как DOM загружен:
<button id="myButton">Нажми меня</button>
<script src="script.js"></script>
// script.js
const button = document.getElementById('myButton');
button.addEventListener('click', function() {
alert('Кнопка нажата через addEventListener!');
});
Преимущества:
- Полное разделение логики и разметки.
- Возможность назначать несколько обработчиков на один элемент.
- Легко удалять обработчики через
removeEventListener. - Поддержка современных возможностей JS: стрелочные функции, async/await, замыкания.
- Удобно работать с динамически создаваемыми элементами.
- Совместимость с системами сборки, тестирования и фреймворками.
Дополнительно — лучшая практика:
document.addEventListener('DOMContentLoaded', () => {
const button = document.getElementById('myButton');
if (button) {
button.addEventListener('click', () => {
console.log('Клик обработан надёжно');
});
}
});
Это гарантирует, что скрипт выполнится только после полной загрузки DOM, даже если он подключён в <head>.
Добавление обработчика на кнопку — простой пример
Представим, что у нас есть кнопка в HTML:
<button id="myButton">Нажми меня</button>
Мы хотим, чтобы при нажатии на неё в консоль браузера выводилось сообщение:
"Кнопка была нажата!"
Шаг 1: Подключите внешний JavaScript-файл
Убедитесь, что у вас есть файл script.js, и он подключен в конце <body>:
<body>
<button id="myButton">Нажми меня</button>
<script src="script.js"></script>
</body>
Шаг 2: Найдите кнопку в JavaScript
В script.js напишите:
const button = document.getElementById('myButton');
Эта строка говорит браузеру:
👉 «Найди элемент на странице, у которого атрибут id="myButton"» — и сохрани его в переменную button.
Шаг 3: Назначьте обработчик события
Теперь добавьте эту строку:
button.addEventListener('click', () => {
console.log('Кнопка была нажата!');
});
Что здесь происходит (без функций):
addEventListener— это встроенная команда, которая привязывает действие к элементу.'click'— это тип события, которое мы хотим отслеживать (нажатие).()— это просто способ сказать: «здесь будет код, который выполнится при событии».console.log(...)— это команда, которая выводит текст в окно разработчика (не на экран).
✅ Всё, что внутри
{ }— это просто набор команд, которые должны сработать, когда пользователь кликнет.
Результат:
Когда пользователь кликает по кнопке — в консоли браузера появляется сообщение:
Кнопка была нажата!
Этот шаблон — основа всего дальнейшего взаимодействия с пользователем. Его нужно запомнить как фиксированную формулу:
элемент.addEventListener('событие', () => { ... });
И заменять:
элемент— на нужный вам (button,input,divи т.д.)'событие'— на нужное (click,mouseover,keydownи т.д.){ ... }— на то, что вы хотите сделать (вывести сообщение, изменить цвет, отправить данные)