По мере развития веб-технологий появляются новые теги и CSS-свойства. Но некоторые теги устаревают, и их использование уже не является хорошей практикой. Есть и такие, которые уже не поддерживаются браузером или никогда не были частью спецификации W3C.
Что делать, если в вашем проекте встретится один из таких тегов? Есть ли современная замена или альтернатива?
Попробуем разобраться.
Список всех устаревших тегов и свойств в спецификации HTML.
Разметка текста
Скопировано<acronym> — акронимы и аббревиатуры
СкопированоАкро́ним — вид аббревиатуры. Акронимы образуются начальными звуками. Фактически, акроним представляет собой слово, являющееся сокращением, которое можно произнести слитно, в отличие от других видов аббревиатур, которые произносят «по буквам», например: СНГ — [эс-эн-гэ], МВД — [эм-вэ-дэ].
Когда использовалось
СкопированоДля опциональной расшифровки аббревиатуры или целого текста пояснение отображается во всплывающей подсказке при наведении курсора.
Пример
Скопировано
<acronym title="Graphics Interchange Format"> GIF</acronym> — устаревший формат графики
<acronym title="Graphics Interchange Format">
GIF
</acronym> — устаревший формат графики
Несмотря на то, что слово GIF очень похоже на аббревиатуру, произносят его одним словом «гиф», а не «джи-ай-эф» — даже в английском языке.
Чем заменить
СкопированоДля <acronym> есть современная альтернатива — <abbr>.
<blink> — мигающий текст
СкопированоКогда использовалось
СкопированоДля визуального выделения текста, который в результате буквально будет мигать.
Пример
Скопировано
<blink>Зачем кому-либо так делать? Выглядит не гуманно.</blink>
<blink>Зачем кому-либо так делать? Выглядит не гуманно.</blink>
Чем заменить
СкопированоСложно придумать реальный случай, когда подобное визуальное поведение не будет иметь явно отвлекающий эффект, но если очень хочется, можно повторить подобное с помощью CSS:
blink { animation: 2s linear infinite condemned_blink_effect;}@keyframes condemned_blink_effect { 0% { visibility: hidden; } 50% { visibility: hidden; } 100% { visibility: visible; }}
blink {
animation: 2s linear infinite condemned_blink_effect;
}
@keyframes condemned_blink_effect {
0% {
visibility: hidden;
}
50% {
visibility: hidden;
}
100% {
visibility: visible;
}
}
<font> — стилизация текста
СкопированоКогда использовалось
СкопированоДо полноценной поддержки браузерами стилизации текста с помощью CSS это был единственный способ изменить цвет, шрифт или размер. К сожалению, для вёрстки писем под клиентов, не поддерживающих CSS, это остаётся единственной возможностью изменить внешний вид текста.
Пример
Скопировано
Летели два <font size="+1">крокодила</font>.Один — <font color="green">зелёный</font>, а другой — в Африку.
Летели два <font size="+1">крокодила</font>.
Один — <font color="green">зелёный</font>, а другой — в Африку.
Чем заменить
СкопированоСовременные возможности CSS предоставляют гораздо больше возможностей для стилизации текста:
h1 { font-family: Arial, Helvetica, Verdana, sans-serif; /* Гарнитура шрифта */ font-size: 150%; /* Размер текста */ font-weight: lighter; /* Светлое начертание */}.text_color_green { color: green; /* Цвет текста */}.text_style_italic { font-style: oblique; /* Наклонный шрифт */}.text_transform_uppercase { text-transform: uppercase; /* Все буквы — заглавные */}.text_emphasis { letter-spacing: .5em; /* Межбуквенный интервал (трекинг) */ word-spacing: 2em; /* Расстояние между словами (ширина пробела) */ text-shadow: 3px 5px 6px #6C9; /* Тень */}
h1 {
font-family: Arial, Helvetica, Verdana, sans-serif; /* Гарнитура шрифта */
font-size: 150%; /* Размер текста */
font-weight: lighter; /* Светлое начертание */
}
.text_color_green {
color: green; /* Цвет текста */
}
.text_style_italic {
font-style: oblique; /* Наклонный шрифт */
}
.text_transform_uppercase {
text-transform: uppercase; /* Все буквы — заглавные */
}
.text_emphasis {
letter-spacing: .5em; /* Межбуквенный интервал (трекинг) */
word-spacing: 2em; /* Расстояние между словами (ширина пробела) */
text-shadow: 3px 5px 6px #6C9; /* Тень */
}
<nobr> — неразрывный текст
СкопированоТег <nobr> использовался для запрета переноса текста на новую строку. По умолчанию, если текст не помещается по ширине, он автоматически разбивается на ближайшем пробельном символе и переносится на новую строку. Текст, помещённый в тег <nobr> будет сохранять свою однострочность и может привести к появлению полосы прокрутки.
Тег никогда не был частью спецификации W3C, его поддержка — личная инициатива каждого браузера.
Когда использовалось
СкопированоХорошим тоном считается использование склеивания союзов и предлогов с последующим словом, единиц измерения.
Пример
Скопировано
Современные технологии достигли<nobr>такого уровня…</nobr>кластеризации усилий.
Современные технологии достигли
<nobr>такого уровня…</nobr>
кластеризации усилий.
Чем заменить
СкопированоДля коротких текстов, когда нужно соединить пару слов или символов, можно использовать неразрывный пробел ( ,   и другие):
В вашей корзине товаров на 1 200 ₽
В вашей корзине товаров на 1 200 ₽
Для остальных случаев есть соответствующее CSS-свойство:
Современные технологии достигли<span style="white-space: nowrap">такого уровня…</span>кластеризации усилий.
Современные технологии достигли
<span style="white-space: nowrap">такого уровня…</span>
кластеризации усилий.
Для больших объёмов текста проще воспользоваться программами-типографами, которые могут автоматически расставить символы неразрывного пробела, например типограф Артемия Лебедева или типограф Евгения Лепёшкина.
<strike> — зачёркнутый текст
СкопированоКогда использовалось
СкопированоДля обозначения текста, который потерял свою актуальность, например, изменения цены: «Распродажа: 1200 990 ₽»
Пример
Скопировано
Распродажа: <strike>1200</strike> 990 ₽
Распродажа: <strike>1200</strike> 990 ₽
Чем заменить
СкопированоВ HTML5 добавили семантический тег: <del>, который отлично дополняется тегом <ins>, содержащим обновлённую информацию:
Распродажа: <del>1200 ₽</del> <ins>990 ₽</ins>
Распродажа: <del>1200 ₽</del> <ins>990 ₽</ins>
А для ситуации, когда нужно просто зачеркнуть текст, добавили более сокращённую запись: <s>:
Список покупок:<ol> <li><s>Молоко</s></li> <li><s>Хлеб</s></li> <li><s>Яйца</s></li> <li>Сыр</li></ol>
Список покупок:
<ol>
<li><s>Молоко</s></li>
<li><s>Хлеб</s></li>
<li><s>Яйца</s></li>
<li>Сыр</li>
</ol>
Список покупок:
МолокоХлебЯйца- Сыр
Блочные элементы
Скопировано<applet> — встраиваемый Java-апплет
СкопированоПоддержка этого тега сохранилась только в Internet Explorer и Safari.
Когда использовалось
СкопированоДо заката эпохи Adobe Flash возможности динамического контента в браузере были весьма ограничены. Тег <applet> позволял встроить в страницу целую программу со своим интерфейсом, написанную на Java.
Пример
Скопировано
<applet code="game.class" archive="game.zip" height="250" width="350"> <param name="difficulty" value="easy"> <p>Извините, у вас не установлена Java, или ваш браузер не поддерживает встраиваемые Java-апплеты.</p></applet>
<applet code="game.class" archive="game.zip" height="250" width="350">
<param name="difficulty" value="easy">
<p>Извините, у вас не установлена Java,
или ваш браузер не поддерживает встраиваемые Java-апплеты.</p>
</applet>
Чем заменить
СкопированоСовременные браузеры поддерживают «встраиваемое содержимое» с помощью тега <object>:
<object type="application/pdf" data="/media/examples/In-CC0.pdf" width="250" height="200"></object>
<object type="application/pdf"
data="/media/examples/In-CC0.pdf"
width="250"
height="200">
</object>
<bgsound> — фоновая музыка
СкопированоКогда использовалось
СкопированоДля автоматического воспроизведения музыкального файла. В отличие от современного использования встраивания аудиоконтента с помощью <embed> или <audio>, не отображает на странице кнопок управления (стоп, пауза, громкость). Такая бесконтрольность допускала злоупотребление этим эффектом. Поддержка тега была реализована только в Internet Explorer.
Пример
Скопировано
<bgsound src="sound2.mid" loop="infinite">
<bgsound src="sound2.mid" loop="infinite">
Чем заменить
СкопированоДля контролируемого воспроизведения аудиофайлов — <embed> или <audio>.
<center> — центрирование контента
СкопированоДостаточно популярный тег даже в наши дни, например, при вёрстке писем — почтовые клиенты могут не поддерживать или просто вырезать стили и порой это единственный способ центрирования.
Когда использовалось
СкопированоДля выравнивания содержимого по центру родительского блока.
Пример
Скопировано
<center>Мама, смотри — я в центре!</center>
<center>Мама, смотри — я в центре!</center>
Чем заменить
Скопировано
<div class="title-center">Мама, смотри — я в центре!</div><div class="parent"> <div class="child"> Этот вложенный блок отцентрирован по горизонтали. </div></div>
<div class="title-center">Мама, смотри — я в центре!</div>
<div class="parent">
<div class="child">
Этот вложенный блок отцентрирован по горизонтали.
</div>
</div>
.title-center { text-align: center;}.parent { width: 500px; border: solid;}.child { margin: 0 auto; width: 400px; height: 400px; border: solid;}
.title-center {
text-align: center;
}
.parent {
width: 500px;
border: solid;
}
.child {
margin: 0 auto;
width: 400px;
height: 400px;
border: solid;
}
<marquee> — бегущая строка
СкопированоТег <marquee> позволяет задать область, в которой содержимое будет зациклено двигаться по заданной траектории (горизонтально, вертикально или отражаясь от краёв).
Когда использовалось
СкопированоЧётких рекомендаций, когда был бы полезен этот приём, нет. Скорее всего, именно поэтому <marquee> был впоследствии удалён из спецификации. Была идея перенести эффект в CSS, но от неё отказались.
Пример
Скопировано
<marquee>Этот текст будет двигаться справа налево</marquee><marquee direction="up">Этот текст будет двигаться снизу вверх</marquee><marquee direction="down" width="250" height="200" behavior="alternate" style="border:solid"> <marquee behavior="alternate"> Этот текст будет отражаться от стенок </marquee></marquee>
<marquee>Этот текст будет двигаться справа налево</marquee>
<marquee direction="up">Этот текст будет двигаться снизу вверх</marquee>
<marquee direction="down" width="250" height="200" behavior="alternate" style="border:solid">
<marquee behavior="alternate">
Этот текст будет отражаться от стенок
</marquee>
</marquee>
Чем заменить
СкопированоСовременных аналогов нет, можно сымитировать анимацию с помощью JavaScript или CSS.
<div class="marquee"> <div class="marquee__inner" aria-hidden="true"> <span class="marquee__content">Showreel</span> <span class="marquee__content">Showreel</span> <span class="marquee__content">Showreel</span> <span class="marquee__content">Showreel</span> </div></div>
<div class="marquee">
<div class="marquee__inner" aria-hidden="true">
<span class="marquee__content">Showreel</span>
<span class="marquee__content">Showreel</span>
<span class="marquee__content">Showreel</span>
<span class="marquee__content">Showreel</span>
</div>
</div>
.marquee { position: relative; overflow: hidden; --offset: 20vw; --move-initial: calc(-25% + var(--offset)); --move-final: calc(-50% + var(--offset));}.marquee__inner { width: fit-content; display: flex; position: relative; transform: translate3d(var(--move-initial), 0, 0); animation: marquee 5s linear infinite; animation-play-state: paused;}.marquee__content { font-size: 10vw; padding: 0 2vw;}.marquee:hover .marquee__inner { animation-play-state: running;}@keyframes marquee { 0% { transform: translate3d(var(--move-initial), 0, 0); } 100% { transform: translate3d(var(--move-final), 0, 0); }}
.marquee {
position: relative;
overflow: hidden;
--offset: 20vw;
--move-initial: calc(-25% + var(--offset));
--move-final: calc(-50% + var(--offset));
}
.marquee__inner {
width: fit-content;
display: flex;
position: relative;
transform: translate3d(var(--move-initial), 0, 0);
animation: marquee 5s linear infinite;
animation-play-state: paused;
}
.marquee__content {
font-size: 10vw;
padding: 0 2vw;
}
.marquee:hover .marquee__inner {
animation-play-state: running;
}
@keyframes marquee {
0% {
transform: translate3d(var(--move-initial), 0, 0);
}
100% {
transform: translate3d(var(--move-final), 0, 0);
}
}
Анимация воспроизводится при наведении курсора или при тапе:
<param> — параметры для вложенных объектов
СкопированоТег <param> позволял передавать параметры в объекты, встроенные на страницу с помощью тега <object>. Использовался для указания значений, с которыми должен запускаться мультимедийный плагин или другой внешний ресурс.
Когда использовалось
СкопированоТег активно применялся во времена популярности плагинов вроде Flash, Java-апплетов или ActiveX-компонентов. Через <param> задавали, например, имя файла для проигрывания, автозапуск или цвет фона.
Сейчас <object> и <param> считаются устаревшими: плагины практически не используются, а <param> удалён из HTML Living Standard.
Пример
Скопировано
<object data="video.mp4" type="application/x-shockwave-flash" width="400" height="300"> <param name="autoplay" value="true"> <param name="loop" value="false"> <param name="quality" value="high"></object>
<object
data="video.mp4"
type="application/x-shockwave-flash"
width="400"
height="300"
>
<param name="autoplay" value="true">
<param name="loop" value="false">
<param name="quality" value="high">
</object>
Чем заменить
СкопированоНа практике — ничем. <param> работал только в связке с <object>, который сам по себе практически не применяется.
Современные альтернативы зависят от контекста:
- Для видео —
<video>с атрибутамиautoplay,loop,controlsи т. д. - Для встраивания другого HTML —
<iframe>. - Для сложных плееров — решения на JavaScript. Например, Plyr или Video.js.
На практике
СкопированоЕсли вы не встраиваете музейный Flash или Java-апплет в архивной версии IE6 — <param> вам не нужен. Современные браузеры игнорируют его, и поддержка окончательно прекращена.
Вывод
СкопированоАвторы спецификаций постоянно ведут работу над улучшением пользовательского и разработческого опыта (UX и DX), потенциально вредные теги (<blink>, <marquee>, <bgsound>) удаляются из спецификации, заменяются на семантические (<del> вместо <strike>) или переносят управление на уровень CSS (<nobr>, <center>). Некоторые из таких тегов можно встретить в коде и сейчас, но разработчики браузеров не гарантируют, что в скором времени сохранится их поддержка. Эти теги лучше заменить на современный аналог или пересмотреть, насколько целесообразно его использование в принципе.