Тег code в HTML: фрагмент кода внутри предложения

Тег code отмечает в тексте короткий фрагмент компьютерного кода: название функции, команду, файл, свойство CSS. Браузер показывает его моноширинным шрифтом, но главное здесь смысл: этот кусок читают и переписывают буква в букву. Тег парный, закрывающий обязателен, собственных атрибутов у него нет, работают только глобальные. Для нескольких строк кода его помещают внутрь pre: code отвечает за смысл, а pre за пробелы и переносы строк.

HTML
<p>Метод <code>querySelector</code> ищет первый подходящий элемент.</p>

Что считать кодом

Кодом считают то, что читатель может ввести или скопировать в файл, редактор или командную строку без правок: querySelector(), git status, index.html, margin: 0 auto, <section>. Название программы, слово «код» в обычном смысле и просто «техническое» слово кодом не считаются.

Соседние теги делят работу по смыслу: kbd отмечает то, что пользователь нажимает или вводит, samp - то, что программа выводит, var - переменную в формуле или описании. Всё остальное, что читается как код, относится к code.

HTML
<p>Откройте <code>index.html</code> и добавьте <code>&lt;section&gt;</code>.</p>

Обратите внимание на <section> в примере: угловые скобки записаны особым образом. Зачем, объясняет следующий раздел.

Угловые скобки и амперсанд: почему тег пропадает

Браузер читает всё, что похоже на тег, как тег, в том числе внутри code. Если записать в код <b>текст</b> как есть, страница не покажет угловых скобок: слово станет жирным, а скобки и название тега исчезнут. Чтобы браузер вывел знак как обычный символ, его записывают через сущность - короткий код, который начинается с & и заканчивается точкой с запятой.

Достаточно запомнить три знака: < записывают как &lt;, > как &gt;, а сам амперсанд & как &amp;. Последний нужен, потому что иначе записанный в коде &copy; браузер превратит в значок ©.

HTML
<p>Тег <code>&lt;b&gt;</code> делает текст жирным, а запись <code>&amp;copy;</code> даёт значок.</p>

Пример: проверьте свой фрагмент

Результат

В поле уже есть пример, его можно менять. Первое окошко показывает, что получит читатель, если записать текст в код без замены, второе - с заменой знаков. Нижнее поле - готовая разметка для страницы.

Заменяйте все три знака сразу: так правило проще, чем помнить, где браузер простит пропуск.

Размер шрифта: откуда 13 px

По умолчанию у code шрифт monospace, и Chrome делает для него поправку: пока размер текста определяет сам браузер (его не задали вообще, указали 100% или 1em), код получается мельче остального текста, 13 px против 16. Если размер записан в пикселях, поправки нет, и код такой же, как текст вокруг.

Пример: четыре условия, четыре размера

Результат

Четыре одинаковые строки. В каждой подписано, как и что заданы, а внизу - размер текста и размер кода, которые определил браузер.

Чтобы размер не зависел от таких мелочей, укажите шрифт списком: как только в нём есть не только слово monospace, поправка исчезает. Запись monospace, monospace из двух одинаковых слов тоже работает.

CSS
code {
  font-family: Consolas, "Courier New", monospace;
}

Если код нужен мельче текста, задайте это явно: при тексте 16 px запись font-size: 0.9em даёт 14,4 px, и результат не меняется от того, как браузер выбирает размер сам.

Длинная строка: перенос или прокрутка

Внутри code пробелы работают как в обычном тексте: несколько подряд схлопываются в один, а строка разрывается там, где есть пробел. Поэтому команда с параметрами переносится сама, а длинное название без пробелов нет: document.querySelectorAll в узкой колонке выступает за её край. На телефоне колонка около двухсот пикселей, так что с такими названиями это случается часто.

Пример: как уместить длинное название

Результат

Колонка шириной 200 px. Кнопки переключают способ, под колонкой подписан результат. Число пикселей измерено в кадре.

Есть два способа. Первый - разрешить разрывать строку где угодно свойством overflow-wrap: anywhere. Второй - оставить строку целой и дать колонке полосу прокрутки: overflow-x: auto. Разрыв меняет только вид: скопированный текст остаётся целым.

CSS
code {
  overflow-wrap: anywhere;
}

Многострочный код с отступами в code не уместить: пробелы схлопнутся. Для него нужен pre.

Подсветка: тег сам не раскрашивает

Тег code не знает, на каком языке написан код, и ничего не раскрашивает. Цвета появляются, когда части кода оборачивают в span и задают им цвет через CSS. Библиотеки подсветки, например Prism и highlight.js, делают это сами: разбирают код и оборачивают каждую часть в span с нужным классом.

HTML
<code>margin: <span class="num">0</span> auto;</code>
CSS
.num {
  color: #b4452d;
}

Язык принято указывать классом на самом code, например class="language-css". Атрибута для языка в стандарте нет, это соглашение: на него опираются библиотеки подсветки, в том числе Prism. Для одной короткой строки в тексте подсветка обычно лишняя, её применяют к длинным листингам.

Фон и отступы: как выделить код в тексте

Браузер оформляет code только шрифтом: ни фона, ни полей у него нет. Читателю проще заметить код, если добавить лёгкий фон, небольшие поля и скругление.

CSS
code {
  background: #eef1f6;
  padding: 2px 6px;
  border-radius: 4px;
}

pre code {
  background: none;
  padding: 0;
}

Второе правило нужно для кода внутри pre: без него у code появится собственный фон поверх фона блока, и получится плашка на плашке. Поля сверху и снизу у строчного элемента не раздвигают строки, поэтому абзац не разъезжается.

Остальное code берёт у окружения: в ссылке он сохраняет цвет ссылки, а в заголовке остаётся жирным и такого же размера, как сам заголовок.

Частые ошибки

Ошибки с этим тегом почти всегда сводятся к одному из двух: смысл тега путают со шрифтом или забывают про угловые скобки.

ОшибкаЧто происходитКак исправить
Тег внутри code записан как есть: <b>Браузер принимает его за разметку, скобки и название тега исчезаютЗаписать &lt; и &gt;, амперсанд как &amp;
code ради моноширинного шрифта: в заголовке, в названии брендаТег обещает «это код», а там просто оформлениеspan с классом и font-family
Многострочный код в одном codeПробелы и переносы схлопываются, строки сливаютсяОбернуть в pre: <pre><code>...</code></pre>
Клавиша или ответ программы отмечены как codeСмысл теряется: это ввод или вывод, а не кодkbd для ввода, samp для вывода
Ожидают, что цвета появятся самиcode не раскрашивает кодspan с классами или библиотека подсветки
Фон задан на всех code и не снят внутри preПлашка на плашке в блоке кодаПравило pre code { background: none; padding: 0; }
Длинное название без пробелов в узкой колонкеВыступает за край, у страницы появляется лишняя ширинаoverflow-wrap: anywhere или overflow-x: auto
Категория
Поделиться в социальных сетях

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

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

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

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

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