Ошибки в коде — это несоответствия правилам и синтаксису языка HTML, использование некорректных или недопустимых тегов, атрибутов или значений. Ошибки приводят к неправильному отображению элементов, снижению производительности и доступности сайта.
Что нужно, чтобы писать код правильно и не допускать ошибок? Знать самые распространённые ошибки и не совершать их.
Вложенный тег закрывается позже родительского
<section>
<p>Пример текста на сайте.</section>
</p>
В этом примере элемент <p> закрывается после <section>, хотя является вложенным. Это может привести к проблемам в отображении элементов. Такая ошибка повторяется из-за невнимательности и некорректной структуры HTML-документа. Если вы будете следить за вложенностью, то не ошибётесь, где должен закрываться вложенный тег, а где — его родитель.
Правильный способ вложения этих элементов:
<section>
<p>Пример текста на сайте.</p>
</section>
Пример корректного написания кода, где видна вложенность и шансов совершить ошибку меньше:
<ul class="user-menu">
<li>
<a href="#">Закладки</a>
</li>
<li>
<a href="#">Корзина</a>
</li>
<li>
<a href="#">Оформить заказ</a>
</li>
</ul>
Нет закрывающего тега
<section class="advantages">
<h2>Что выделяет нас среди конкурентов?</h2>
<ul class="advantages-list">
<li>Используем только природные материалы</li>
<li>Ежедневные отчёты о ходе работ</li>
<li>Сами соберём мебель для вас</li>
<li>Бесплатное гарантийное обслуживание в течение 10 лет</li>
</section>
В примере у списка отсутствует закрывающий тег — </ul>. В этом случае список и все его элементы отразятся некорректно. Будьте внимательны, такие мелкие ошибки могут принести много неприятностей.
Правильный вариант:
<section class="advantages">
<h2>Что выделяет нас среди конкурентов?</h2>
<ul class="advantages-list">
<li>Используем только природные материалы</li>
<li>Ежедневные отчёты о ходе работ</li>
<li>Сами соберём мебель для вас</li>
<li>Бесплатное гарантийное обслуживание в течение 10 лет</li>
</ul>
</section>
Повторяются идентификаторы
<form action="https://echo.htmlacademy.ru" method="post">
<table>
<tr>
<td>
<label for="login-field">Ваш логин</label>
</td>
<td>
<input type="text" id="login-field" name="login">
</td>
</tr>
...
<form action="https://echo.htmlacademy.ru" method="post">
<table>
<tr>
<td>
<label for="login-field">Ваш пароль</label>
</td>
<td>
<input type="text" id="login-field" name="password">
</td>
</tr>
Тег id — это идентификатор, который связывает определённое поле ввода input с текстом подписи. В каждой форме должен быть свой уникальный id, чтобы формой можно было пользоваться и отправлять данные на сервер.
У пароля из примера выше должен быть свой уникальный id:
<form action="https://echo.htmlacademy.ru" method="post">
<table>
<tr>
<td>
<label for="password-field">Ваш пароль</label>
</td>
<td>
<input type="text" id="password-field" name="password">
</td>
</tr>
Неправильное использование семантических тегов
<section class="products">
<h2>Курс для фронтендеров</h2>
…
<div>Купить курс</div>
</section>
Здесь <div> ошибочно используется вместо кнопки <button>.
Тег <div> — это универсальный контейнер без собственного значения. Он используется, когда нужно разметить некрупный элемент вёрстки или отдельный фрагмент с текстом. Его использование не создаст кнопку, которая может открыть другую страницу или форму для записи.
Кнопка <button> отвечает за выполнение определённой функции: добавить в корзину, купить, отправить, проголосовать и другие.
<section class="products">
<h2>Курс для фронтендеров</h2>
…
<button class="button">
Купить курс
</button>
</section>
👉🏼 Правило для определения <div>:
Если перед вами раздел, которому сложно найти определение, получается что-то наподобие «новости и фотогалерея» или «правая колонка» — можно разметить как <div>.
Семантические теги <header>, <main>, <footer> предназначены для выделения основных структурных блоков на странице сайта, а теги <nav>, <section>, <article>, <aside> — для разметки крупных смысловых разделов. Все теги должны быть использованы в соответствии со своим назначением.
- Что такое семантическая вёрстка и зачем она нужна
- Как сделать кнопку в HTML
Отсутствие атрибута alt для изображений img
<img src="image/logo.png" width="200" height="100">
Атрибут alt задаёт альтернативный текст, описывающий картинку для пользователей, у которых изображение очень долго загружается или вообще недоступно. Также alt помогает сайтам оставаться доступными, например, для категории пользователей, которая не имеет возможности видеть картинки.
<img src="image/logo.png" alt="Логотип" width="200" height="100">
6 простых правил хорошего alt-текста
Определение уровня заголовка по размеру текста на макете
<main>
<h1>Мы — молодая креативная компания</h1>
<section class="products">
<h2>Обувь и аксессуары</h2>
…
</section>
<section class="about">
<h2>Мы надёжные партнёры и поставщики</h2>
…
</section>
<section class="companies">
<h2>Уже много лет мы сотрудничаем с самыми крупными производителями</h2>
…
</section>
</main>
Не весь крупный текст — заголовки. Основная роль заголовка — резюмирующая, он сжато передаёт содержание последующего текста. Прочитав заголовок, пользователь должен легко понять, чему посвящён раздел. Также не все заголовки видимые на странице сайта, они могут быть прописаны в разметке и скрыты, так как их задача — помогать структурировать страницу.
<main>
<h1>Интернет магазин «Фактура»</h1>
<section class="products">
<h2>Товары</h2>
…
</section>
<section class="about">
<h2>О нас</h2>
…
</section>
<section class="companies">
<h2>Производители</h2>
…
</section>
</main>
Также неверно обозначать заголовок не специальными тегами h1-h6, а использовать выделение текста тегами <b> или <strong>.
Включать в main то, что повторяется на других страницах
Это может быть навигация, копирайты и так далее.
<body>
<h1>Интернет магазин «Фактура»</h1>
<main>
<nav class="user-nav">
<ul class="user-menu">
<li>
<a href="https://htmlacademy.ru/blog">Меню</a>
</li>
<li>
<a href="https://htmlacademy.ru/blog">Корзина</a>
</li>
<li>
<a href="https://htmlacademy.ru/blog">Оформить заказ</a>
</li>
</ul>
</nav>
<section class="about">
<h2>О нас</h2>
…
</section>
</main>
<footer class="main-footer">
<!-- Подвал сайта -->
</footer>
</body>
Тег <main> выделяет основное содержание страницы, которое не повторяется на других страницах. И на странице используется один тег <main>. Если навигация одинаковая на всех страницах сайта, то лучше размещать её в <header>.
Неверное обозначение комментариев
Если комментарий неправильно разметить, то он будет виден на странице.
<-- Это комментарий -->
Комментарии начинаются последовательностью <!--, например:
<!-- Это комментарий -->
Не использовать <li> для элементов списка
<ul class="user-menu">
<div>
<a href="https://htmlacademy.ru">Закладки</a>
</div>
<div>
<a href="https://htmlacademy.ru">Корзина</a>
</div>
<div>
<a href="https://htmlacademy.ru">Оформить заказ</a>
</div>
</ul>
Непосредственно в теге <ul> могут находиться только теги <li>, которые обозначают элементы или пункты списка. Пунктов может быть неограниченное количество, но не менее одного.
<ul class="user-menu">
<li>
<a href="https://htmlacademy.ru">Закладки</a>
</li>
<li>
<a href="https://htmlacademy.ru">Корзина</a>
</li>
<li>
<a href="https://htmlacademy.ru">Оформить заказ</a>
</li>
</ul>
Материалы по теме
- Как проверить валидность HTML-разметки
- Как сделать картинку ссылкой
- Флексы для начинающих
- Шаблон HTML-формы
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.
ТелеграмПодкастБесплатные учебники
Дизайнеры тратят часы на оттачивание мастерства для тщательной подгонки мельчайших деталей в дизайне веб сайтов, которые выходят из-под их пера. Однако качество кода очень часто остается весьма низким. Вам нужны доказательства? Посмотрите галереи бесплатных шаблонов CSS. 90% шаблонов не пройдут проверку. Причем, основная часть ошибок является весьма примитивными и их очень легко исправить. В данном уроке рассмотрим типовые ошибки в коде HTML, которые мешают успешному завершению проверки.
Зачем проверять код?
Если сайт выглядит отлично в браузере, то зачем проверять код? Типичный вопрос, который задается перед проверкой кода. Но ведь сайт не ограничивается только тем, что видно пользователю. Страницы HTML предназначены для представления данных, а не графических эффектов. Данные должны быть доступными для чтения для всего огромного сообщества людей, которое использует интернет. И читатели могут использовать совсем другие технологии для получения информации, представленной на вашем сайте — например, они могут использовать программу для воспроизведения данных голосом и просто слушать, что написано на вашей странице.
Страница HTML, которая не содержит ошибок, в основном будет корректно отображаться в большинстве браузеров, а также будет соответствовать требованиям будущих технологий. Здесь стоит упомянуть поисковые механизмы, действие которых очень важно для целей SEO. Никто не хочет создавать для них препятствий, а чистый и правильный код гораздо легче воспринимается поисковыми ботами.
Это также вопрос профессионализма. Неправильный код HTML очень похож на грамматические ошибки в надписях на сайте. И хотя клиент может и не заметить ошибок в коде — это не изменяет сущности вопроса. Никто не любит грамматические ошибки в дизайне, но оставлять код HTML с ошибками почему-то не считается таким же постыдным деянием.
Общие ошибки
Ниже представлены ошибки, которые выловлены в шаблонах с первой страницы известной галереи CSS шаблонов. Множество сайтов выглядят отлично и даже великолепно, но очень часто качество кода не соответствует качеству дизайна. Хотя большинство таких ошибок может быть исправлено очень быстро и просто.
Не указан тип документа
Самая плохая ошибка — не использовать Doctype! Отсутствие тега Doctype означает, что браузер будет «догадываться», какой язык использовался для создания документа. Для исправления ошибки нужно указать тип документа вашей страницы.
Не закрыт элемент
Если вы открыли тег где-то в вашем документе HTML, его нужно закрыть в соответствующем месте. Забывчивость в данном вопросе не только приводит к ошибкам при проверке кода, но и может вызвать серьезные проблемы с шаблоном. На рисунке представлена ситуация, когда автор забыл закрыть тег <p>.
Опускается символ / в самозакрывающихся элементах
Большинство элементов HTML имеет отдельные закрывающие теги, например: </div>. Но есть элементы, такие как input, img и meta , которые являются самозакрывающимися, это означает, что они должны иметь символ / перед закрывающейся скобкой.
Не произведена конвертация специальных символов
Амперсанд, а также двойные кавычки, которые копируются из Word, являются самыми распространенными причинами данной ошибки. Нужно всегда проверять код на наличие таких символов и конвертировать & в соответствующий код HTML &, Также надо поступать и с другими специальными символами.
Неконвертированные символы в URL
В соответствии с предыдущим пунктом, специальные символы, особенно амперсанд, должны быть кодированы в строках URL. Ссылки на сайты, построенные с использованием PHP, часто содержат переменные с использованием символа &, их нужно писать с использованием кода HTML &.
Блочные элементы внутри строчных
Одно из основных правил HTML заключается в том, что блочные элементы НИКОГДА не должны находиться внутри строчных элементов.
Популярный пример ошибки — использование ссылки в заголовке: <a href="#"><h3>bananas</h3></a>
<h3> — блочный элемент, поэтому он должен оборачиваться вокруг ссылки (строчный элемент): <h3><a href="#">bananas</a></h3>.
Отсутствует атрибут alt у изображения
Каждое изображение в документе HTML должно иметь атрибут alt с описанием содержания картинки. Даже если картинка служит для дизайнерских целей, она должна иметь атрибут alt, но в данном случае его надо оставить пустым, например, alt="". В другом случае нужно представить описание содержание изображения.
Использование атрибутов подобных width и height
Вероятно, такое положение является обратной стороной широкого использования редакторов WYSIWYG, которые имеют тенденцию вставлять излишний код HTML. Атрибуты width и height определяются в переходных стандартах типах документа, но если вы задаетесь целью четко следовать стандартам, то наверняка знаете, что все атрибуты, отвечающие за представление элементов на страницах, должны быть перенесены в таблицу стилей CSS, для разделения содержания и дизайна.
Имя класса или ID начинается с цифры

Имя класса, ID или имя атрибута не может начинаться с цифры. Они могут включать цифры, но не в начале слова.
А какова ситуация с проверкой CSS кода?
В отличие от HTML, CSS используется для визуального представления страницы. Таким образом, вопрос “Если страница выглядит хорошо, то зачем проверять код?” в данном случае звучит более убедительно. Неправильный код CSS не оказывает такого влияния на веб страницы, как неправильный код HTML. Однако проверку стоит проводить на предмет обнаружения опечаток и ошибок в коде. Если вы используете новые свойства CSS3, они сделают ваш документ не прошедшим проверку, так как еще не включены в спецификацию, но если вы уверенны, что все правильно, то на такие ошибки можно не обращать внимание.
Время на прочтение
4 мин
Количество просмотров 42K
Ошибки и советы я написал по-своему опыту. Если найдутся ошибки типа «вредных советов», то буду рад услышать конструктивную критику. Пост предназначен для начинающих изучать HTML и CSS, но, возможно, специалистам тоже будет интересно ознакомиться с данным материалом.
1. W3C Validator
Рекомендуется проверять HTML и CSS сайта через сервис validator.w3.org. Данный сервис просканирует код и отобразит ошибки, например:
- не закрыт тег;
- не рекомендованные символы в ссылках;
- используется не рекомендованный тег;
- не указан обязательный атрибут;
- и другое.
2. Вёрстка в формате UTF-8
При вёрстке страницы, надо убедиться, что кодировка файла установлена в UTF-8 (без BOM). Каждый текстовый редактор устанавливает кодировку по-своему.
Файл в формате UTF-8 позволяет использовать нестандартные символы (например, символы различных языков, знак валюты и другие).
Также надо сообщить браузерам, что страница открывается в кодировке UTF-8. Это делается через тег ниже:
<meta charset="utf-8">
3. Одинаковые id у нескольких элементов
Значение атрибута id в HTML-коде не должно повторяться.
<!-- не правильно -->
<div id="block"></div>
<div id="block"></div>
<!-- правильно -->
<div id="block-1"></div>
<div id="block-2"></div>
4. Спрайты
Несколько маленьких картинок рекомендуется соединять в один файл (такой файл называется спрайт). Это уменьшит количество запросов на сайт и улучшит скорость загрузки страницы.
Пример спрайта
Пример на JSFiddle
Сейчас также популярно вместо спрайтов использовать шрифты с иконками. Т.е. вместо букв выводятся иконки шестерёнки, смайлика и других иконок. В качестве примера можно привести иконки glyphicons, которые используются в Twitter Bootstrap.
Преимущества шрифтов к спрайтам, это сохранение качества при изменении размера иконок и меньший размер. Но недостаток, нельзя использовать больше одного цвета в иконке.
5. Много селекторов
Не рекомендуется использовать больше трёх селекторов, т.к. это влияет на производительность сайта.
/* не рекомендуется, большая вложенность */
.page .item .title a {}
/* можно сократить */
.page .item a {}
Браузеры читают CSS справа налево. Т.е. в коде выше, сначала будут выбраны все ссылки, что есть на странице, а потом будут выбраны те ссылки, которые находятся внутри элемента .item.
Если есть возможность, то выборку рекомендуется сокращать до одного селектора:
/* рекомендуется */
.form-submit a {}
/* предпочтительнее примера выше, если есть возможность */
.form-submit-link {}
6. Стили в HTML
HTML предназначен для вывода информации (текст, картинки). Оформления контента (изменить размер, цвет, шрифт) происходит в CSS.
<!-- не правильно -->
<p style="color: red">Ошибка в коде</p>
<!-- правильно -->
<p class="error">Ошибка в коде</p>
7. Неправильное названия классов
Многие верстальщики, когда надо сделать текст зелёным цветом, прикрепляют к нему класс .green.
<p class="message green">Текст сообщения</p>
Это неправильно, т.к. при смене дизайна, многие цвета могут измениться, например, текст сообщения может выводиться синим цветом вместо зелёного. Тогда придётся искать все теги, у которых есть класс .green и заменять его на .blue.
Чтобы избегать подобных ситуаций, не рекомендуется применять классы для смены цвета, выравнивания текста, изменения регистра. Надо называть сами элементы (шапка, подвал, сообщение), и применять к нему свои стили.
<!-- неправильно -->
<p class="message green">Текст сообщения</p>
<!-- правильно -->
<p class="message message-success">Текст сообщения</p>
8. Пиксели в дробных значениях
Некоторые браузеры позволяют указывать пиксели в дробных значениях, например «1.5px». Но это неправильно, т.к. пиксель это неделимая единица. Вместо «1.5px» лучше использовать «1.5em».
p {
/* не правильно */
letter-spacing: 1.5px;
/* правильно */
letter-spacing: .005em;
}
9. Использование классов вместо id
Рекомендуется делать выборку по классам вместо id, т.к. селекторы с id имеют больший вес, чем у классов, и их сложно будет переопределить.
#modal a {
color: blue;
}
/* цвет ниже не получится переопределить,
т.к. #modal имеет больший вес, чем у классов */
.modal-header a {
color: #333;
}
/* в этом случае придётся добавить #modal */
#modal .modal-header a {
color: #333;
}
Также не рекомендуется использовать !important, т.к. его вес выше, чем у атрибута id, и его также будет сложно переопределить.
10. Меню
Меню должно быть оформлено как список.
<!-- неправильно -->
<p><a href="#">Главная</a> <a href="#">Новости</a> <a href="#">О компании</a></p>
<!-- правильно -->
<ul>
<li><a href="#">Главная</a></li>
<li><a href="#">Новости</a></li>
<li><a href="#">О компании</a></li>
</ul>
11. Пропущенный alt у картинок
В тегах надо указывать атрибут alt (можно пустой).
<!-- неправильно -->
<img src="pic.jpg">
<!-- правильно -->
<img src="pic.jpg" alt="Картинка">
<img src="pic.jpg" alt="">
12. Теги <h1>
На странице должен быть только один заголовок в теге <h1>. В основном, в этом теге находится название страницы.
13. Транскрипция
Названия всех элементов надо писать в английском переводе. Даже если не известно, как слово пишется по-английски, есть много бесплатных сервисов, которые могут перевести. Когда встречаются названия элементов транскрипцией, это выгладит непрофессионально.
/* неправильно */
.tovar {}
.stranica {}
.zapros {}
/* правильно */
.product {}
.page {}
.query {}
14. Clearfix
Про clearfix сложно написать в двух словах, но укажу момент, которые многие верстальщики, по моему мнению, делают ошибку.
Класс .clearfix надо указывать в родительском теге, а не ставить рядом.
<!-- неправильно -->
<div>
<div class="float-left"></div>
<div class="float-right"></div>
<div class="clearfix"></div>
</div>
<!-- правильно -->
<div class="clearfix">
<div class="float-left"></div>
<div class="float-right"></div>
</div>
15. HTML — язык программирования
Некоторые новички в HTML думают, что HTML это язык программирования. На самом деле HTML не является языком программирования, его можно сравнить с Microsoft Word. Например, чтобы текст сделать жирным, в Word надо нажать на кнопку, а в HTML надо прописать код. Т.е. HTML это просто инструмент, который добавляет текст, картинки, таблицы и другие элементы.
Глеб Летушов, редактор-фрилансер, написал статью специально для блога Нетологии о том, какие ошибки совершает начинающий верстальщик и как их избежать. Статья для конкурса блога.
Когда пытаешься сверстать первый сайт, то не обращаешь внимание на какие-то мелкие ошибки и недочеты. К сожалению, если их вовремя не заметить и не убрать, то они перейдут от одного сверстанного сайта к другому.
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ‘Helvetica Neue’; color: #454545}
Программа обучения: «HTML-верстка: с нуля до первого макета»
Чтобы не переучиваться в дальнейшем, обратите внимание на распространенные ошибки.
1. Неправильные имена классов
Начинающие верстальщики дают классам сокращенные или ничего незначащие названия и даже пишут их кириллицей.
Как избежать: называйте классы английскими словами, отражающими их суть. Слова не сокращайте. Нельзя использовать имена, начинающиеся с цифры или дефиса, после которого стоит цифра.
Правильно:
.shopping-cart-block
.social-icon
Неправильно:
.korzina-block
.социальные-кнопки
.-3-block
.2-review
.shp-crt
2. Использование идентификатора #id для описания стилей блока
Стиль блока можно задать с помощью класса .class-name или идентификатора #id. Атрибут класса позволяет выбрать группу элементов, а #id — один элемент. Если на странице сайта будет задан один и тот же #id для нескольких элементов, то браузер проигнорирует оформление элемента или вообще не откроет CSS-файл.
Идентификатор #id также используется, чтобы передавать информацию в JavaScript. Поэтому можно запутаться среди разных #id, потому что некоторые используются для скриптов, а другие — для оформления.
Как избежать: использовать имена классов .class-name для описания стилей блока, а #id оставить для JavaScript.
3. Описание стилей для элементов внутри атрибута style
Когда только сталкиваетесь с html-разметкой, то непонятно, как связаны html и CSS и как задать нужные стили в CSS. Чтобы упростить задачу, начинающие верстальщики не трогают CSS-файл, а задают оформление элемента внутри атрибута style в html.
Возможно, для одного элемента такой способ подойдет. Но проблемы начнутся на больших сайтах, где одним классом задается оформления нескольких элементов.
Как избежать: задавать стили для каждого элемента в СSS-файле.
4. Использование тега абзаца <p> для разметки
Браузер по умолчанию добавляет к <p> некоторые внешние отступы, чтобы параграф текста выглядел отдельным блоком. Чтобы облегчить работу и не добавлять отступы к изображению с помощью стилей, некоторые верстальщики оборачивают его тегом <p>…</p>.
Как избежать: для разметки страницы использовать специальные теги <div> и <span>, прописать нужные стили для этих тегов.
5. Много изображений в высоком разрешении на странице
Страница, которая перегружена изображениями с большим весом, долго загружается. Пользователям надоедает ждать полной загрузки и они просто закрывают страницу сайта или пытаются ее перезагрузить. Если открыть такую страницу с телефона, то, помимо долгого времени загрузки, она потребует большого трафика.
Как избежать: оптимизировать изображения, сжать их, уменьшив вес файла с помощью графических редакторов. Можно проработать структуру страницы, и, если изображение не несет смысловой нагрузки, удалить его.
6. Не сброшены изначальные настройки
Каждый браузер по умолчанию использует свой стиль в основных HTML-элементах. Если не сбросить настройки, то для этих элементов браузеры выставят разные отступы. Из-за чего одна и та же страница в нескольких браузерах будет выглядеть по-разному.
Как избежать: сбросить отступы для всех элементов можно с помощью СSS-кода:
*{
margin:0;
padding:0;
}
Либо подключить специальный CSS-файл, внутри которого отступы уже изменены. Например, Normalize.css или CSSreset.css.
7. Использование блочного элемента внутри строчного
В HTML существует два типа элементов: блоки и строки.
С помощью блоковых элементов выстраивается структура страницы. Это <div>, <ul>, <h1>, <h3> и другие элементы. Их свойство по умолчанию — display:block.
Строчные элементы, к которым относятся <span>, <li>, <a>, <label>, используются внутри блоковых. По умолчанию их свойство задается как display:inline.
Неправильно:
<span>
<h1> Заголовок </h1>
<ul>
<li> Пункт 1</li>
<li> Пункт 2</li>
</ul>
</span>
Правильно:
<div>
<h1> Заголовок </h1>
<ul>
<li> Пункт 1</li>
<li> Пункт 2</li>
</ul>
</div>
Если все же нужно использовать блок внутри строчного элемента, то можно поменять свойство у строчного на display:block
8. Отступы между элементами сделаны с помощью тега переноса строки <br/>
Часто с помощью одного или нескольких тегов <br/> создают отступы между элементами, картинками, словами. Этого делать не стоит, потому что тег <br/> должен использоваться внутри тега с текстом <p>…</p>.
Чтобы не вставлять в разметку лишних тегов, просто пропишите нужные отступы в CSS.
9. Страница не проверялась валидатором
На сайте w3.org есть специальный валидатор html-файлов. Он проверяет код страницы и выдает незамеченные ошибки: незакрытый тег, пропущенную строку или свойство. Чем меньше ошибок нашел валидатор, тем лучше отобразится страница в браузере и быстрее будет работать сайт.
Чтобы сообщить браузеру, какая версия HTML-разметки используется на странице, нужно использовать тег DOCTYPE.
Иногда начинающий верстальщик забывает добавить его в начале страницы или указывает неправильную версию HTML. Если браузер не смог определить версию html, то он покажет страницу с ошибками. Например, может сбиться оформление.
Как избежать: всегда вставлять тег в первую строку страницы. Например, если вы верстаете на HTML пятой версии, объявить тип документа можно так: < !DOCTYPE html >
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ‘Helvetica Neue’; color: #454545}
Читать ещё: «Подборка англоязычных ресурсов для начинающих верстальщиков»
Чтобы научиться грамотно верстать страницы и совершать меньше ошибок, нужно следить за каждым шагом и уделять внимание мелочам. Чем тщательные вы следите за кодом, тем лучше страницы будет отображаться в браузерах.
Итак, ошибки, которые нужно избегать:
- Неправильные имена классов;
- Использование идентификатора #id для описания стилей блока;
- Описание стилей для элементов внутри атрибута style;
- Использование тега абзаца <p> для разметки;
- Много изображений в высоком разрешении на странице;
- Не сброшены начальные настройки;
- Использование блочного элемента внутри строчного;
- Отступы между элементами сделаны с помощью тега переноса строки <br/>;
- Страница не проверялась валидатором;
- Не указан тип страницы.
Мнение автора и редакции может не совпадать. Хотите написать колонку для «Нетологии»? Читайте наши условия публикации.
Верстка – процесс весьма кропотливый. Пусть HTML/CSS и не являются языками программирования, освоить CSS – в разы сложнее, чем освоить тот же Python. Причина – в том, что если Питон развивался логично и постепенно, то CSS развивался в условиях непримиримой войны между браузерами, каждый из которых пытался пропихнуть свои стандарты. Добавьте сюда кодировки, изменения HTML от W3C и позднее «накручивание» DOM для высокоуровневых языков – получите ад, бардак и хаос. Из него растут типичные ошибки начинающего верстальщика, не успевшего в этом хаосе сориентироваться – неправильное использование id, использование style, попытка решения проблем через !important, invisible text для отступов и так далее.
1. Неправильные имена классов
2. Описание стилей внутри < style >
3. Символы, не предназначенные для верстки
4. Использование ID для идентификации
5. Очень большие картинки
6. Использование HTML для верстки в целом
7. Неправильное использование заголовков
8. Использование !important
9. Не прописаны альты в < img >
Ниже мы все эти ошибки рассмотрим и расскажем, почему не стоит так делать.
1. Неправильные имена классов
Правильная верстка в CSS организуется через классы – вы указываете классы для элементов, и когда вы меняете что-то в классе, изменения применяются ко всем элементам этого класса. Идея пришла из объектно-ориентированного подхода к программированию, и самое прекрасное, что классы дают – это принцип DRY, Don’t Repeat Yourself, «Не повторяй себя». Если у вас на сайте 50 одинаковых кнопок, без классов вам пришлось бы менять цвет кнопки 50 раз, когда заказчик захочет кислотно-зеленую кнопку «КУПИТЬ» вместо красной. С классами вам нужно поменять всего одно значение.
С классами связано множество ошибок начинающих верстальщиков, но самая распространенная – это бессмысленные (и беспощадные) имена классов: .knopka, .vtoraya-knopka-sleva, .vyrovnyat, .ne-trogat – вы и сами можете придумать/найти множество таких примеров. Конкретно эти плохи по двум причинам:
- Ничего не понятно (но очень интересно).
- Транслит.
Транслит – это всегда плохо, потому что он вырвиглазный и его невозможно читать. Но если мы подберем адекватные имена на английском (.button, .second-button-on-the-left, .align, .do-not-touch), то хорошо все еще не станет, потому что назначение классов не прояснилось. В основном эта проблема бьет по программистам, которые затем будут писать js-код, но если вы расплодите кучу бессмысленных названий, то вам потом самим будет сложно понять, что вам нужно подправить: .button3, .button12 или .button-on-top-final-red-v2.
Давайте понятные имена: .shopping-cart-buy-button, .header-logo, .search-page-backgr. И по возможности группируйте классы в .css-файле, чтобы их было проще искать.
2. Описание стилей внутри < style >
Забудьте про прописывание стиля в этом тэге. Функция была добавлена еще до появления CSS и оставлена в HTML для обратной совместимости – чтобы очень старые сайты не сломались. Описывать разметку в < style > нельзя, потому что ломаются приоритеты и при отладке сложно найти ошибку – особенно если искать ее будете не вы. Вся верстка должна быть исключительно в .css-файле – этот принцип в программировании называется инкапсуляцией, и за его применение другие верстальщики (которые будут разбираться с вашей разметкой) скажут вам огромное спасибо.
3. Символы, не предназначенные для верстки
Unicode/UTF обладает множеством интересных символов для отображения, сюда входят пиктограммы, смайлики и invisible text. Будьте с ними очень аккуратны – разные шрифты могут по-разному «относиться» к отображению этих символов, некоторые браузеры тоже воспринимают их некорректно. Если прямо совсем хочется их использовать – хотя бы сбросьте стандартную верстку браузера через * {} и протестируйте верстку на нескольких устройствах.
Кстати, для пиктограмм и смайликов можно создать отдельный шрифт, в этом случае вы получите безболезненное масштабирование и гарантию отображения.
4. Использование ID для идентификации
Использование ID для «точечного» задания стиля – это удобно, но делать так тоже не стоит. JS активно взаимодействует с ID и может менять идентификаторы элементов для своих внутренних целей. Если js-код поменяет ID, которому вы прописали стиль – верстка слетит. Лучше напишите пару лишних строчек кода для класса.
5. Очень большие картинки
Несмотря на улучшение качества интернета в мире, эта проблема все еще остается. Большие картинки долго грузятся, а чем дольше висит загрузка страницы, тем больше шансов, что человек уйдет к конкурентам, у которых сайт не тормозит.
Пережимайте картинки в jpg, а если прямо необходимо выкладывать большие картинки на странице – ищите специальные js-скрипты, которые позволяют догружать картинки отдельно от остального контента на странице.
6. Использование HTML для верстки в целом
Самая частая проблема – использование /br для верстки, сюда же относится прописывание стиля в < class > и < p > для создания отступов или пустого пространства. HTML – язык разметки, он показывает браузеру, где и какие элементы должны находиться. Как эти элементы выглядят и как делят между собой пространство – вопрос к языку стилей CSS. Вот им вы и должны пользоваться для решения этих проблем. А если у вас половина разметки будет в CSS, а половина в HTML, то при достижении определенного порога сложности проекта вы вдруг обнаружите, что при любом внесенном изменении все ломается.
7. Неправильное использование заголовков
Заголовки показывают и браузеру, и поисковым роботам, где находится основной контент. H1 должен быть в единичном экземпляре, h2 должны быть вложены в h1, h3 должны быть вложены в h2 и так далее.
Если вы не придерживаетесь этих правил – не удивляйтесь потом, почему поисковые роботы игнорируют вашу страницу.
8. Использование !important
!important – вселенское зло. !important переопределяет естественные приоритеты CSS, и это выстрелит вам в ногу, когда вы будете искать ошибку в верстке. Хуже того, поведение нескольких !important при их пересечении не очень хорошо задекларировано, и ошибка может стать плавающей – в одном браузере она есть, в другом его нет. Плавающие ошибки – самое плохое, что может случиться в коде, потому что при наличии такой ошибки бывает проще все снести и переписать заново, чем отлавливать такую ошибку.
Еще один важный момент – если вам нужно использовать более одного !important в разметке, это почти всегда означает, что вы плохо эту самую разметку продумали. Сядьте и задайте себе вопрос: «Почему мне приходится использовать !important здесь?» Ответом на вопрос почти всегда будет плохо продуманная система классов, то есть плохая архитектура. С самых первых шагов в верстке приучайте себя продумывать архитектуру классов и селекторов – это сэкономит вам кучу времени в дальнейшем.
9. Не прописаны альты в < img >
Вам alt в <img> может быть и не нужен, но он очень нужен SEO-специалистам и js-программистам.
Пропишите хотя бы пустой alt.
10. Злоупотребление div
Если вам нужно создать контейнер – используйте div, который для этого и предназначен. Если вам нужно вывести текст – используйте span, который для этого предназначен. Не нужно мудрить и использовать div для текста и span для блоков – когда верстка станет более сложной, будет больше шансов, что что-то сломается. Если вам прямо очень сильно нужно использовать span для блока – пропишите для него display:block.
Правильное ревью верстки
Провести самостоятельное ревью верстки довольно сложно – глаз «замыливается», и вы можете пропустить очевидную ошибку. Есть один инструмент, который может вам помочь – валидатор от W3-консорциума, расположен тут: https://validator.w3.org/. Он показывает основные ошибки в HTML, хотя для CSS code-review подходит так себе. Лучший способ сделать ревью – найти другого верстальщика и отдать страницу на ревью ему.
Если такого верстальщика нет – возьмите 10 советов выше и 10 раз пройдитесь по коду, с каждой итерацией проверяйте, выполнили ли вы все рекомендации.
FAQ
- Что такое DOM? Document Object Model – это модель, описывающая взаимодействие элементов на странице. На основе всех элементов строится дерево, с помощью которого js-программист может быстро получить доступ к нужному элементу. DOM строится на ID, классах и тэгах, и чем более логично они будут прописаны на странице, тем проще будет писать код для скриптов.
- Можно ли взломать сайт через ошибки в HTML/CSS? Как ни странно, можно – через cross-site scripting. О том, как от этого защититься, можно почитать здесь: https://www.w3.org/TR/CSP2/.
Подведем итоги
Тезисно:
- выбирайте содержательные имена классов;
- не описывайте стили внутри < style >;
- с осторожностью используйте invisible text и другие редкие символы Unicode;
- старайтесь избегать использования id для идентификации;
- сжимайте картинки;
- не используйте HTML для верстки;
- расставляйте заголовки логично, более низкие вложены в более высокие;
- избегайте !important, продумывайте структуру верстки заранее;
- прописывайте альты в < img >, даже пустые;
- используйте < div > для блоков и < span > для текста.












