Списки, кнопки и ссылки встречаются на каждой странице, и новички часто путают их роли: делают кнопку из ссылки, ссылку из div, а меню — из набора абзацев. Между тем у каждого из этих элементов своё назначение, и правильный выбор влияет на доступность, поведение с клавиатуры и корректную работу страницы. Разобраться в этом — значит перестать «имитировать» интерфейс и начать строить его правильно.
После этого урока вы будете уверенно выбирать между ссылкой, кнопкой и списком, понимая, какой элемент за что отвечает.
Что уже умеем / что добавим
Вы освоили структурные семантические теги. Теперь наведём порядок на уровне отдельных интерактивных элементов. В сквозном проекте мы правильно оформим меню как список ссылок и добавим настоящую кнопку призыва к действию.
Что вы узнаете в рамках статьи
- Когда использовать ссылку
a, а когда кнопкуbutton. - Почему меню правильно верстать списком.
- Как оформить навигацию как список ссылок.
- Чем плохи «фальшивые» кнопки и ссылки из
div. - Как выбор элемента влияет на доступность.
Ключевые термины
- Ссылка (
a) — переход на другой адрес или страницу. - Кнопка (
button) — запуск действия на текущей странице. - Список (
ul/ol) — перечень однотипных элементов. - Интерактивный элемент — элемент, с которым пользователь взаимодействует.
- Фокус с клавиатуры — возможность выбрать элемент клавишей Tab.
Ссылка или кнопка
Это главный вопрос, в котором путаются чаще всего. Правило простое и надёжное. Ссылка a нужна, когда пользователь куда-то переходит — на другую страницу, на внешний сайт, к разделу страницы. У неё обязателен атрибут href. Кнопка button нужна, когда происходит действие на текущей странице — отправка формы, открытие модального окна, добавление в корзину.
<a href="/contacts">Наши контакты</a>
<button>Добавить в корзину</button>
Ориентир такой: если после нажатия меняется адрес в строке браузера — это ссылка; если что-то происходит прямо здесь — это кнопка. Выбор не косметический: браузер и скринридеры по-разному их объявляют и обрабатывают, а ссылка ещё и работает по-особому (открытие в новой вкладке, копирование адреса).
Почему меню — это список
Пункты меню — это перечень однотипных элементов, поэтому семантически правильно верстать навигацию как список ul со ссылками внутри. Так скринридер объявит «список из 4 пунктов» и поможет пользователю сориентироваться.
<nav>
<ul>
<li><a href="#">Главная</a></li>
<li><a href="#">Услуги</a></li>
<li><a href="#">Контакты</a></li>
</ul>
</nav>
Может показаться, что маркеры-точки и отступы списка тут лишние, — но их легко убрать стилями (list-style: none), а семантическую пользу списка мы сохраним. Такая разметка навигации — общепринятый стандарт, вы встретите её почти на каждом сайте.
Убираем стили списка
Чтобы список-меню выглядел как ряд ссылок, а не как маркированный перечень, применим уже знакомый Flexbox и уберём стандартное оформление списка:
nav ul {
list-style: none;
display: flex;
gap: 1.5rem;
margin: 0;
padding: 0;
}
Свойство list-style: none убирает точки-маркеры, а обнуление margin и padding — стандартные отступы списка. display: flex с gap выстраивает пункты в ряд с промежутками. В браузере вы увидите аккуратное горизонтальное меню — но под капотом это по-прежнему семантически корректный список ссылок. Так совмещают правильную разметку и нужный внешний вид.
Опасность фальшивых элементов
Соблазнительно сделать кнопку из div и повесить на неё вид кнопки — но это плохая практика. Настоящие a и button бесплатно получают важные возможности: их можно выбрать клавишей Tab, нажать с клавиатуры, их правильно объявляет скринридер. div же по умолчанию «мёртв» для клавиатуры и вспомогательных технологий.
<!-- Плохо: фальшивая кнопка -->
<div class="button">Отправить</div>
<!-- Хорошо: настоящая кнопка -->
<button class="button">Отправить</button>
Внешне оба варианта можно сделать одинаковыми, но первый недоступен для тех, кто не пользуется мышью, и непонятен скринридеру. Правило: для действий берите button, для переходов — a, а div оставляйте для группировки и оформления. Это избавит вас от множества скрытых проблем.
Применяем в проекте
Наведём порядок в интерактивных элементах сайта. Оформим навигацию как семантический список ссылок и добавим в шапку настоящую кнопку призыва к действию.
<header class="header">
<div class="logo">Моя компания</div>
<nav>
<ul class="nav">
<li><a href="#">Главная</a></li>
<li><a href="#">Услуги</a></li>
<li><a href="#">Контакты</a></li>
</ul>
</nav>
<button class="button">Оставить заявку</button>
</header>
.nav {
list-style: none;
display: flex;
gap: 1.5rem;
margin: 0;
padding: 0;
}
Обновите страницу: меню выглядит как ровный ряд ссылок, но теперь это правильный список, понятный скринридеру. А рядом появилась настоящая кнопка button — она реагирует на клавиатуру и объявляется как кнопка. Ваша шапка стала не только красивой, но и доступной.
Частые ошибки
- Кнопка вместо ссылки и наоборот.
Переход — этоaсhref, действие — этоbutton. - Меню не списком.
Навигацию правильно верстать спискомulсо ссылками, даже если маркеры убраны. - Фальшивые элементы из
div.
Они недоступны с клавиатуры и непонятны скринридеру; берите настоящиеaиbutton. - Забыли обнулить стили списка.
Чтобы меню не выглядело перечнем, уберитеlist-style,marginиpadding.
Итоги
Отлично — теперь вы не путаете ключевые интерактивные элементы! Вы знаете, что ссылка ведёт к переходу, кнопка запускает действие, а меню правильно строится как список ссылок. И, что важно, вы поняли, почему нельзя подменять их безликими div: настоящие элементы бесплатно дают доступность и работу с клавиатурой. Ваша шапка теперь и выглядит хорошо, и устроена правильно.
Прекрасная работа! В следующем уроке завершим тему семантики важными атрибутами — alt, title и базовыми aria-*, — которые делают страницу ещё доступнее.