<MyRusakov.ru />

Разработчик игр на Unreal Engine

Разработчик игр на Unreal Engine

Этот комплект с нуля всего за 7 месяцев сделает Вас Unreal-разработчиком. И при этом учиться достаточно 1 час в день.

Начнёте Вы с основ программирования, постепенно перейдя к C++. Затем очень подробно изучите Unreal Engine, и после научитесь программировать на C++ в Unreal Engine. В конце создадите крупный проект на C++ в Unreal Engine для своего портфолио.

Комплект содержит:

- 416 видеоуроков

- 95 часов видео

- 1024 задания для закрепления материала из уроков

- 3 финальных тестирования

- 4 сертификата

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

HTML5 data-атрибуты (data-*): практическое руководство с примерами

HTML5 data-атрибуты (data-*): практическое руководство с примерами

Data-атрибуты (data-*) в HTML5 позволяют хранить небольшие фрагменты данных непосредственно в разметке и удобно использовать их в JavaScript и CSS. Это отличный инструмент для верстальщиков и фронтендеров, когда нужен лёгкий способ передать конфигурацию, состояние или идентификаторы без лишних запросов к серверу и глобальных переменных.

Что такое data-атрибуты и зачем они нужны

Любой атрибут вида data-имя является валидным и доступен в JS через свойство dataset. Пример:

<button class="btn" data-action="buy" data-product-id="42" data-tooltip="Купить сейчас">Купить</button>

const btn = document.querySelector('.btn');
console.log(btn.dataset.action);     // "buy"
console.log(btn.dataset.productId);  // "42" (строка)

Здесь мы храним тип действия, ID товара и подсказку, а затем читаем эти данные на стороне JavaScript.

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

  • Атрибуты должны начинаться с data-: например, data-user-id.
  • Используйте нижний регистр и дефисы: data-user-id, а не data-userId.
  • В JS дефисы преобразуются в camelCase: data-user-id → element.dataset.userId.
  • Значения всегда строки. Для чисел/булевых/объектов — парсите явно.
  • Удалить атрибут можно через delete element.dataset.key.
const el = document.querySelector('[data-user-id]');

// Чтение
console.log(el.dataset.userId); // "123"

// Запись
el.dataset.state = 'active';     // => data-state="active"

// Удаление
delete el.dataset.userId;        // убирает атрибут data-user-id

Data-атрибуты в CSS: состояния и подсказки

Data-атрибуты удобно использовать для стилизации состояний и небольших подсказок.

<div class="tab" data-state="active">Профиль</div>
<div class="tab" data-state="inactive">Настройки</div>

.tab[data-state="active"] { color: #0a7; border-bottom: 2px solid #0a7; }
.tab[data-state="inactive"] { color: #777; }

/* Подсказка через attr() */
.tooltip {
  position: relative;
}
.tooltip:hover::after {
  content: attr(data-tooltip);
  position: absolute; left: 0; top: 100%;
  background: #000; color: #fff; padding: 6px 8px; border-radius: 4px;
  white-space: nowrap; transform: translateY(6px);
}

Передача конфигурации компоненту через JSON в data-*

Компактный способ передать настройки компоненту — хранить JSON в атрибуте. Рекомендуется использовать один атрибут data-options и парсить его в JS.

<div class="carousel" 
     data-options='{"autoplay": true, "delay": 3000, "easing": "ease-out"}'></div>

const root = document.querySelector('.carousel');
let options = {};
try {
  options = JSON.parse(root.dataset.options || '{}');
} catch (e) {
  console.warn('Некорректный JSON в data-options', e);
}

console.log(options.autoplay, options.delay, options.easing);

Важно: экранируйте кавычки в HTML, как в примере выше, или используйте одиночные кавычки для атрибута и двойные — внутри JSON.

Делегирование событий по data-action

Удобный паттерн: вешаем один обработчик на контейнер и по data-action понимаем, что делать.

<div id="products">
  <button data-action="buy" data-product-id="42">Купить</button>
  <button data-action="favorite" data-product-id="42">В избранное</button>
</div>

const box = document.getElementById('products');
box.addEventListener('click', (e) => {
  const btn = e.target.closest('[data-action]');
  if (!btn || !box.contains(btn)) return;

  const { action, productId } = btn.dataset;
  switch (action) {
    case 'buy':
      buyProduct(productId);
      break;
    case 'favorite':
      toggleFavorite(productId);
      break;
  }
});

Переключение темы через data-theme

Паттерн для тёмной темы: храним состояние в data-theme на корневом элементе и меняем палитру через CSS-переменные.

<button id="themeToggle">Тема</button>

:root[data-theme="light"] {
  --bg: #ffffff; --fg: #151515;
}
:root[data-theme="dark"] {
  --bg: #151515; --fg: #f5f5f5;
}
body { background: var(--bg); color: var(--fg); }

const root = document.documentElement;
root.dataset.theme = root.dataset.theme || 'light';

document.getElementById('themeToggle').addEventListener('click', () => {
  root.dataset.theme = root.dataset.theme === 'light' ? 'dark' : 'light';
});

Лучшие практики и ограничения

  • Храните только небольшие данные: ID, флаги, короткие строки, лёгкие конфиги. Большие JSON и секреты — не сюда.
  • Всегда парсьте типы: числа через Number(), булевы – через проверку value === 'true', объекты – через JSON.parse (с try/catch).
  • Не полагайтесь на data-* для безопасности: это легко читаемо и изменяемо пользователем через DevTools.
  • Следите за неймингом: data-user-id → dataset.userId. Подчёркивания в именах не конвертируются в camelCase, используйте дефисы.
  • Избегайте дублирования: лучше один data-options с JSON, чем десятки разрозненных атрибутов.
  • Для доступности используйте ARIA-атрибуты по назначению (aria-*), а не подменяйте их data-атрибутами.

Частые ошибки новичков

  1. «Число не работает как число». Помните: dataset возвращает строки.
  2. «Почему не читается свойство?»: неправильный нейминг (например, data-userId в HTML и попытка прочитать dataset.userId). Делайте data-user-id в HTML.
  3. «Сломался JSON в атрибуте» — проверьте экранирование кавычек и валидность JSON.
  4. «Стили не применяются» — проверьте селектор [data-state="..."] и что атрибут реально есть на элементе.

Где потренироваться и прокачать вёрстку

Хотите уверенно использовать HTML5-приёмы (включая data-*), собирать аккуратные интерфейсы и понимать, где хранить данные и как их связывать со стилями и JS? Рекомендую посмотреть программу интенсивного практического курса: Прокачать вёрстку на курсе «Вёрстка сайта с нуля 2.0» — от основ HTML/CSS до адаптивов, сборки и типичных паттернов на реальных макетах.

Итог

Data-атрибуты — мощный, но простой механизм HTML5. Они отлично подходят для передачи малых данных между разметкой, CSS и JS: состояния, идентификаторы, конфиги. Соблюдайте нейминг, явно приводите типы, не храните чувствительные данные и используйте их как «клей» между слоями интерфейса — тогда верстка останется чистой, а логика — понятной и предсказуемой.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.