Тег marquee в HTML: бегущая строка, атрибуты и чем заменить

Тег <marquee> (от английского marquee, «афишная вывеска») превращает содержимое в бегущую строку: текст едет внутри своей области сам, без скриптов. Он парный, закрывающий тег </marquee> обязателен, а движением управляют атрибуты behavior, direction, scrollamount и другие. Тег появился в ранних версиях Internet Explorer, но его отображают и остальные браузеры, хотя стандарт HTML запрещает его использовать.

HTML
<marquee>Скидки до 50% только сегодня</marquee>

Что делает тег marquee в HTML

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

Тег работает без единого атрибута: скорость по умолчанию около 70px в секунду, то есть 6px каждые 85 миллисекунд. Как и тег font или тег center, он описывает внешний вид, а не смысл, поэтому для вспомогательных технологий это просто текст.

Пример: чем marquee отличается от обычного текста

Результат

Кнопки переключают тег marquee и обычный абзац с тем же текстом. Под рамкой написано, на сколько пикселей сместился текст за последнюю секунду: измерение идёт прямо в кадре.

У абзаца смещение равно нулю, у marquee оно близко к 70px. Это и есть вся суть тега: движение без CSS и без JavaScript.

Атрибут behavior: scroll, slide и alternate

Атрибут behavior выбирает, как двигается текст. Допустимы три значения: scroll (по умолчанию), slide и alternate. Пропущенное или неверное значение работает как scroll.

В режиме scroll текст появляется у правого края, целиком уходит за левый и начинает круг заново. В режиме slide он доезжает до левого края и остаётся там. В режиме alternate текст ходит между краями туда и обратно: у каждого края он упирается в границу области, а не уходит за неё.

Пример: куда приезжает текст в каждом режиме

Результат

Кнопки подставляют значение в behavior. Для наглядности шаг увеличен до scrollamount="10". Под рамкой написано, что сделал текст: сколько кругов прошёл, где остановился или сколько раз отскочил.

Режим slide срабатывает один раз: после остановки у левого края текст больше не двигается. Режим alternate подходит для коротких надписей, которые должны оставаться в области целиком, а scroll лучше подходит для длинных.

Атрибут direction: куда движется текст

Атрибут direction задаёт направление: left (по умолчанию), right, up и down. Регистр не важен, а неверное значение работает как left.

Вертикальные up и down требуют высоты. Без атрибута height область остаётся высотой в одну строку, и текст быстро пролетает через узкую полосу. Чтобы вертикальная прокрутка выглядела как прокрутка, задайте height, например 100.

Пример: четыре направления и роль высоты

Результат

Кнопки подставляют direction и height. Под рамкой написаны высота области и направление, которое кадр определил по движению текста.

Горизонтальные направления высоту не требуют: область и так подходит по высоте для одной строки.

Скорость: scrollamount, scrolldelay и truespeed

Скорость задают два атрибута. Атрибут scrollamount задаёт шаг в пикселях, а scrolldelay задаёт паузу между шагами в миллисекундах. Скорость в пикселях в секунду равна шагу, делённому на паузу в миллисекундах и умноженному на 1000. Значения по умолчанию 6 и 85 дают около 70,6px в секунду.

Нулевой scrollamount останавливает строку. Дробное значение 2.5 браузер округляет до 2, а отрицательное и нечисловое возвращают шаг по умолчанию, 6.

У паузы есть минимум. Без атрибута truespeed значение меньше 60 не принимается. Спецификация предписывает брать в этом случае 60, но браузеры на движке Chromium берут паузу по умолчанию, 85: при scrollamount="1" и scrolldelay="59" строка идёт со скоростью 11,7px в секунду, как при 85. С truespeed значение принимается как есть.

Пример: расчёт скорости и скорость в кадре

Результат

Три ряда кнопок подставляют scrollamount, scrolldelay и truespeed. Под рамкой записан расчёт по формуле и скорость, которую кадр измерил по движению текста.

Расчёт и измерение совпадают, пока пауза не меньше 60. Выберите scrolldelay="30" без truespeed, и расчёт покажет, что браузер подставил 85.

Число кругов loop, методы start и stop

Атрибут loop задаёт число кругов. По умолчанию это -1, то есть бесконечно. Положительное число останавливает строку после указанного числа кругов, причём текст остаётся за краем, и область выглядит пустой. Ноль, нечисловое значение и -1 дают бесконечную прокрутку, а дробное 3.7 округляется до 3.

Остановить и снова запустить строку можно из скрипта методами stop() и start(). Наведение мыши строку не останавливает. Документация MDN описывает события onstart, onbounce и onfinish, но в стандарте их нет, и в браузерах на движке Chromium они не срабатывают: у элемента нет и самих свойств onstart, onbounce и onfinish.

Пример: сколько кругов проходит строка и срабатывает ли finish

Результат

Кнопки loop задают число кругов, кнопки stop() и start() вызывают методы элемента. Под рамкой написано, сколько кругов пройдено, идёт ли строка и сколько раз сработало событие finish в вашем браузере.

Не стройте логику на событии finish: если в вашем браузере счётчик остаётся нулевым, код, который ждёт это событие, не выполнится.

Размеры и оформление: width, height, bgcolor, hspace, vspace

Размер и внешний вид области задают атрибуты width, height, bgcolor, hspace и vspace. Они работают как у других устаревших тегов: значение записывается в разметке, а CSS его перекрывает.

Пример: как атрибуты меняют область marquee

Результат

Кнопки подставляют атрибуты в тег. Под рамкой записаны размер области, цвет фона и отступы, которые вернул браузер.

Ширину можно задать в пикселях или в процентах от контейнера, а hspace и vspace добавляют отступы слева и справа или сверху и снизу. Сводка всех одиннадцати атрибутов:

АтрибутСтатусЧто делаетПример записи
behaviorУстарелРежим движения: scroll, slide или alternatebehavior="alternate"
directionУстарелНаправление: left, right, up или downdirection="up"
scrollamountУстарелШаг прокрутки в пикселях, по умолчанию 6scrollamount="3"
scrolldelayУстарелПауза между шагами в миллисекундах, по умолчанию 85scrolldelay="100"
truespeedУстарелРазрешает паузу меньше 60 миллисекундtruespeed
loopУстарелЧисло кругов, по умолчанию -1 (бесконечно)loop="3"
widthУстарелШирина области в пикселях или процентахwidth="300"
heightУстарелВысота области, нужна для up и downheight="100"
bgcolorУстарелЦвет фона областиbgcolor="#ffcc00"
hspaceУстарелОтступы слева и справаhspace="20"
vspaceУстарелОтступы сверху и снизуvspace="10"

Чем заменить тег marquee: CSS-анимация

Бегущую строку заменяет CSS-анимация: текст сдвигается свойством transform на свою ширину, а всё лишнее скрывает overflow. Правило @keyframes описывает путь, свойство animation запускает его без конца.

HTML
<div class="ticker">
  <span>Скидки до 50% только сегодня</span>
</div>
CSS
.ticker {
  overflow: hidden;
  white-space: nowrap;
}

.ticker span {
  display: inline-block;
  padding-left: 100%;
  animation: run 10s linear infinite;
}

@keyframes run {
  to { transform: translateX(-100%); }
}

Отступ слева в 100% сдвигает текст за правый край области, а сдвиг на минус 100% уводит его за левый: получается тот же путь, что у режима scroll. Длительность подбирают по длине пути: ширину области плюс ширину текста делят на нужную скорость.

ВозможностьТег marqueeCSS-замена
Скоростьscrollamount и scrolldelayanimation-duration, урок про длительность и повтор
Число круговloopanimation-iteration-count
Ход туда и обратноbehavior="alternate"animation-direction: alternate, урок про направление
ПаузаТолько методы stop() и start() из скриптаanimation-play-state: paused, урок про паузу
Пауза при наведении мышиНетПравило :hover и animation-play-state

Пример: marquee и CSS-лента рядом

Результат

Сверху тег marquee, снизу CSS-лента с тем же путём и той же скоростью. Кнопка «Над строками» включает у ленты правило с наведением. Под рамкой записана скорость каждой строки, измеренная в кадре.

В обычном ходе скорости совпадают, а при наведении лента встаёт, тогда как marquee продолжает ехать. Это главное практическое преимущество замены: поведением управляет CSS.

Доступность: пауза и настройка уменьшения движения

Движущийся текст мешает читать и может вызывать дискомфорт, поэтому доступность требует контроля над движением. Критерий WCAG 2.2.2 (уровень A) требует, чтобы движение, которое запускается само и длится дольше 5 секунд, можно было приостановить, остановить или скрыть.

У marquee встроенной кнопки нет, наведение мыши строку не останавливает, а системную настройку уменьшения движения тег не учитывает: при включённой настройке строка движется как обычно. У CSS-ленты это одно правило с условием по настройке:

CSS
@media (prefers-reduced-motion: reduce) {
  .ticker span {
    animation: none;
  }
}

Пример: пауза и настройка уменьшения движения

Результат

Кнопки «Включена» и «Выключена» имитируют системную настройку: у ленты включается то же правило, что в коде выше. Кнопки «Пауза» и «Продолжить» вызывают stop() и start() у marquee и останавливают анимацию у ленты.

Настоящую настройку браузер берёт из системы, а в примере она имитируется классом. Подробнее о настройке в уроке курса «prefers-reduced-motion: уважение к выбору пользователя».

Категория
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×