Самые частые ошибки в HTML-вёрстке
easy

Самые частые ошибки в HTML-вёрстке

Это случается и с новичками, и с сеньорами

Продолжаем нашу серию статей о базе по вёрстке. В прошлый раз мы разобрали основы HTML. Сегодня посмотрим, какие ошибки чаще всего встречаются в вёрстке веб-сайтов.

Часто ошибка в коде видна сразу при открытии страницы в браузере. Такие ошибки проще всего видеть и находить, потому что они очевидны. Но большинство ошибок проявляют себя не в виде отображения, а таким образом:

  • несовместимость с браузерами;
  • падение позиций веб-страницы в поисковой выдаче;
  • увеличение скорости загрузки;
  • появление уязвимостей в коде;
  • повышенная нагрузка на сервер.

❌ Отсутствие данных о кодировке или её неверное указание

Если в HTML-документе не указана корректная кодировка, браузер может неправильно интерпретировать символы, особенно нелатинского алфавита. Такую ошибку очень сложно пропустить: при загрузке на странице будут отображаться непонятные символы, знаки вопроса или квадраты. Для примера уберём указание кодировки из HTML-страницы:

<!DOCTYPE html>
<html>
<head>
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Привет, это журнал «Код»</title>
</head>
<body>
	<!-- неправильно -->
	<h2>Добро пожаловать в «Код»</h2>
	<p> Рассказываем, как работает вёрстка </p>
</body>
</html>
Текст на странице отобразился некорректно

Чтобы такого не было, нужно указывать правильную кодировку символов с помощью тега <meta charset="UTF-8">. Добавим его на место — в раздел <head>:

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Привет, это журнал «Код»</title>
</head>
<body>

	<!-- неправильно -->
	<h2>Добро пожаловать в «Код»</h2>
	<p> Рассказываем, как работает вёрстка </p>

</body>
</html>
Теперь текст на странице можно прочитать

🤔 Отсутствие атрибута языка

Атрибут lang нужен для указания языка веб-страницы:

<html lang="ru">

Это помогает правильно понимать контент поисковым системам, программам чтения с экрана, средствам CSS и некоторым возможностям браузеров. Например, некоторые мобильные браузеры ориентируются на атрибут lang при отображении соответствующей клавиатуры языка при вводе текста в формы.

Поисковые системы используют lang, чтобы определить, на каком языке написан контент страницы. Это помогает индексировать сайт и предоставлять её в поисковой выдаче пользователям, которые ищут информацию на определённом языке.

С помощью lang программы для чтения с экрана, или скрин-ридеры, могут читать текст с правильно.

Средства CSS могут использовать атрибут lang, чтобы применять специфичные стили в зависимости от языка, такие как типы шрифтов, отступы или размеры текста.

❌ Незакрытые теги

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

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Привет, это журнал «Код»</title>
</head>
<body>

	<!-- неправильно -->
	<h2>Это — подзаголовок
	<div>А это — блок с контентом

</body>
</html>
Что-то явно не так

А вот что будет, когда мы закроем теги правильно:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Привет, это журнал «Код»</title>
</head>
<body>

	<!-- неправильно -->
	<h2>Это — подзаголовок </h2>
	<div>А это — блок с контентом </div>

</body>
</html>
Теперь всё в порядке

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

А если не закрыть комментарий, браузер не будет обрабатывать следующий за ним код и не отобразит соответствующий контент до следующего комментария, который будет закрыт:

<!-- этот незакрытый комментарий скрывает от браузера весь следующий код
<h2>Это — подзаголовок</h2>
<div>А это — блок с контентом</div>

Вот как это выглядит на странице (никак ¯\_(ツ)_/¯):

А всё потому, что браузер просто не знает, что комментарий закончился и дальше идут теги. Для наглядности вот эта же страница в редакторе кода — обратите внимание на серый цвет (потому что серое — это комментарии, которые браузер не обрабатывает):

Раньше с помощью комментариев скрывали ненужные фрагменты HTML-документа, которые могут понадобиться в будущем. Но лучше так не делать, а сохранять версии страниц.

<!-- правильный комментарий служит для того, чтобы пояснить код, а не скрыть его от браузера -->
<p>Какой-то параграф</p>
<div>Какой-то блок контента</p>

❌ Неправильный порядок тегов

Помимо добавления закрывающего тега, если он парный, важно соблюдать правильный порядок тегов. Несовпадение тегов может вызвать проблемы с макетом и нарушить предполагаемую структуру HTML-документа. Например, у нас есть такой код:

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Привет, это журнал «Код»</title>
</head>
<body>
	<div>
		<h2>Это абзац текста.
		<div>Это внутренний блок.</div>
		</h2>
	</div>
</body>
</html>

В данном случае тег <p> не может содержать блочный элемент <div>, поэтому структура считается неверной и браузер попытается исправить ошибку самостоятельно, что может привести к непредсказуемому результату. Правильный порядок такой:

<div>
  <h2>Это абзац текста.</h2>
  <div>Это внутренний блок.</div>
</div>

По такому же принципу внутри тегов <li></li> нельзя использовать, например, теги параграфа <p></p>. Другой пример — указание тега <a> «снаружи» тега заголовка:

<!-- неправильно -->
<a href= "https://www.thecode.media><h2>Журнал «Код»</h2></a>

По спецификации HTML это не ошибка, но так не рекомендуется делать. Обёртывание заголовка <h1>...<h6> в тег ссылки <a> нарушает семантическую структуру документа, так как это предполагает, что весь блок является ссылкой, а не только текст внутри. Лучше размещать <a> внутри заголовка, чтобы сохранить чистоту структуры и предотвратить возможную путаницу при отображении страницы.

<!-- правильно -->
<h2><a href= "https://www.thecode.media>Журнал «Код»</a></h2>

🤔 Отсутствие описания DOCTYPE

Когда браузер не находит декларацию DOCTYPE в начале HTML-документа, он переключается в режим совместимости (Quirks Mode), который предназначен для поддержки старых веб-страниц. В этом режиме интерпретация кода на HTML и CSS может происходить по старым правилам, из-за чего страница может отображаться некорректно.

На отсутствие декларации DOCTYPE реагируют и поисковые роботы. Это может сказаться на индексации веб-страницы.

🤔 Использование тегов не по назначению

В языке HTML всё очень хорошо стандартизировано. Для вёрстки различных блоков и элементов страницы существуют соответствующие теги. Частая ошибка — использовать теги не по назначению, например добавлять отступы между блоками контента с помощью тегов <br> и <p>. Первый обозначает разрыв строки, а второй — границы параграфа. Если на страницу нужно добавить дополнительные отступы, используют свойства CSS.

Другой пример — тег <aside>, который ввели в HTML5 для обозначения контента, который не связан напрямую с основным, например боковая панель или выноска. С помощью <aside> указывают, что контент внутри этого тега самостоятельный, но дополняет основную информацию.

Ещё один пример — использование тегов <h1>...<h6> не для обозначения заголовков, а чтобы увеличить размер текста. Но таким образом нарушается семантическая структура документа, поэтому лучше использовать средства CSS для настройки размера шрифта.

🤔 Неправильная иерархия заголовков

Теги заголовков <h1>...<h6> предназначены для обозначения заголовков на странице, предоставляя иерархию содержимого. Это значит, что первым всегда идёт тег заголовка первого уровня <h1>, который даёт общее понимание о содержании страницы. На веб-странице может быть только один тег <h1>, потому что у документа не может быть двух заголовков.

Если на странице нужны другие заголовки, после тега <h1> всегда должен идти тег <h2> для подразделов, а затем <h3> для подподразделов. И хотя существуют теги для заголовков четвёртого, пятого и шестого уровней, их редко используют, ограничиваясь первыми тремя. Большая вложенность может усложнить понимание и восприятие структуры контента пользователями и поисковыми системами.

❌ Использование неподдерживаемых или упразднённых тегов и атрибутов

Язык HTML постоянно развивается, и некоторые теги и атрибуты устаревают или больше не поддерживаются, например <center>, <font> и <strike> или marginwidth и border=0.

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

Есть теги <blink> и <marquee>, которые вообще не стандартизированы. Тег <blink> использовался для создания мигающего текста на веб-странице, а <marquee> — для создания горизонтально или вертикально прокручиваемого текста или изображения. Но использование этих тегов нарушает современные принципы веб-дизайна и доступности, поэтому их рекомендуется избегать. Вместо них используют CSS-анимацию и JavaScript-сценарии.

🤔 Перебор с тегами <div> и отсутствие семантических тегов

Чрезмерное использование тегов <div> может привести к тому, что код будет сложно понимать и поддерживать. Семантические элементы HTML придают смысл структуре документа, помогая как разработчикам, так и поисковым роботам.

<!-- неправильно -->
<div class=”header”>Заголовок</div>
<div class=”content”>Основной контент</div>
<div class=”footer”>Подвал страницы</div>

Используя семантические теги, такие как <header>, <nav>, <article>, <section> и <footer> вместо <div> c классами, можно улучшить читаемость кода и доступность страницы для индексации.

<!-- правильно -->
<header>Заголовок</header>
<section>Основной контент</section>
<footer>Подвал страницы</footer>

🤔 Отсутствие атрибута alt у изображения

Атрибут alt обязателен для тегов <img>, он описывает контекст изображения. Это позволяет поисковым роботам лучше индексировать содержимое HTML-документа. А ещё есть пользователи, которые просматривают веб-страницы с помощью программ чтения с экрана, и пользователи, у которых медленное интернет-соединение. Альтернативный текст помогает им понять, важно ли изображение.

🤔 Злоупотребление альтернативным текстом к изображению

То, что атрибут alt обязателен для изображения, не означает, что он всегда должен содержать какую-то информацию. Например, если на странице есть аватар пользователя, не нужно подписывать его альтернативным текстом «Аватар пользователя». В этом случае атрибут alt можно оставить пустым.

Как избегать ошибок в HTML

В первую очередь на помощь приходят редакторы кода, например Visual Studio Code. Они подсвечивают синтаксис разными цветами и автоматически подставляют закрывающие теги. Даже если вы можете верстать хоть в блокноте, лучше использовать для вёрстки специальные инструменты.

Актуальные и поддерживаемые теги и атрибуты можно посмотреть на сайте Mozilla Development Network (на русском языке).

Для проверки HTML-кода можно использовать валидаторы: они проверяют код на соответствие стандартам W3C, указывают на ошибки и предупреждают о проблемах:

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

Что дальше

Дальше нас ждёт дивный и красивый мир CSS. Там тоже очень интересно и есть о чём поговорить. Подпишитесь, чтобы не пропустить:-)

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Вам может быть интересно
easy
[anycomment]
Exit mobile version