Блок кода
Блок кода показывает исходный код для чтения: с подсветкой синтаксиса, кнопкой копирования и номерами строк по желанию.
interface User {
id: number;
name: string;
}
<tk-code-block language="ts"><pre>
interface User {
id: number;
name: string;
}
</pre></tk-code-block>Анатомия
| Часть | Что это |
|---|---|
tk-code-block |
сам элемент |
| слот по умолчанию | код, лучше внутри <pre> |
part block |
панель с рамкой |
part header |
строка с названием языка и кнопкой копирования |
part scroll |
область, которая прокручивается по горизонтали |
Кладите код в <pre>. Пока скрипт не загрузился, браузер показывает этот <pre> как
есть, и код остаётся читаемым. Общий отступ компонент убирает, так что код можно
выравнивать вместе с HTML.
Языки
npm install thykes
{ "theme": "dark", "primary": "blue" }<tk-code-block language="bash"><pre>npm install thykes</pre></tk-code-block>
<tk-code-block language="json"><pre>{ "theme": "dark", "primary": "blue" }</pre></tk-code-block>Задайте language, чтобы появились цвета и название языка в шапке. Без него или с
неизвестным значением код показывается обычным моноширинным текстом. Язык никогда не
угадывается.
language |
Принимает также |
|---|---|
javascript |
js |
typescript |
ts |
jsx, tsx |
|
html |
markup, xml, svg |
css |
|
json |
|
bash |
shell, sh |
python |
py |
yaml |
yml |
Номера строк
const total = items.reduce((sum, item) => sum + item.price, 0); console.log(total);
<tk-code-block language="js" line-numbers><pre> const total = items.reduce((sum, item) => sum + item.price, 0); console.log(total); </pre></tk-code-block>
line-numbers добавляет слева колонку номеров. При горизонтальной прокрутке она стоит на
месте. Скринридеры её пропускают, она не выделяется и не копируется.
Копирование и прокрутка
- Кнопка копирования копирует код без номеров строк. Иконка меняется на галочку, а скринридер сообщает «Copied to clipboard» (или «Copy failed»). Примерно через 2 секунды всё возвращается.
- Длинные строки не переносятся, код прокручивается по горизонтали. Если он не помещается, область прокрутки становится именованной областью: до неё доходит Tab, а стрелки её прокручивают. Если код помещается, лишней остановки Tab нет.
Когда использовать
- Блок кода — для фрагмента, который читают или копируют: примера, конфигурации, команды.
- Для кода внутри предложения — строчный код:
<code>вProse илиText с вариантомcode-*. - Он для чтения, а не для правки. Это не редактор, не консоль и не просмотр изменений.
Можно / нельзя
| ✅ Можно | ❌ Нельзя |
|---|---|
Задать language |
Ждать, что язык определится сам |
Класть код в <pre> |
Рассчитывать, что код прочитают только со скриптом |
| Показывать код | Использовать как редактор или просмотр изменений |
| Строчный код для слова в предложении | Одно слово в блоке кода |
Связанные
Prose : простой<pre>с минимальным оформлением для markdown.Text : вариантыcode-*для кода внутри строки.Kbd : клавиши и сочетания клавиш.Icon button : кнопка копирования.
API
Атрибуты
| Атрибут | Тип | По умолчанию | Что делает |
|---|---|---|---|
language |
string | нет | язык для цветов и названия в шапке; см. |
line-numbers |
boolean | false |
показывает номера строк |
label |
string | нет | имя области прокрутки; по умолчанию по языку, например «TypeScript code», или «Code» |
Слоты
| Слот | Содержимое |
|---|---|
| по умолчанию | код текстом, лучше внутри <pre> |
События
Своих событий нет.
CSS
::part(block): панель. Если поменять ей радиус углов, углы области прокрутки за ним не последуют.::part(header): строка шапки.::part(scroll): область прокрутки. Её рамку фокуса рисует отдельный слой, поэтому стили этой части рамку не двигают.
Токены
| Элемент | Токен |
|---|---|
| фон панели | syntax/surface |
| рамка панели и колонки номеров | border/subtle; угол radius-12 |
| обычный код | text/default |
| название языка | text/secondary |
| ключевые слова | syntax/keyword |
| строки | syntax/string |
| комментарии (курсив) и номера строк | syntax/comment |
| числа | syntax/number |
| функции | syntax/function |
| классы | syntax/class |
| переменные | syntax/variable |
| знаки препинания | syntax/punctuation |
Код набран стилем Code Small (14/20, моноширинный). Цвета syntax/* — отдельная
палитра, не цвета статусов. Значения по темам:
Доступность
Встроено:
- Код — настоящий текст, его можно выделить; подсветка не меняет символы.
- Каждый цвет синтаксиса, включая комментарии, даёт не меньше 4.5:1 на панели в любой теме.
- Номера строк скрыты от скринридеров и не копируются.
- Кнопка копирования —
Icon button с именем, а результат объявляется. - Если код не помещается, область прокрутки доступна с клавиатуры и названа.
На вашей стороне:
- Задайте
language: автоопределения нет. - Кладите код в
<pre>, чтобы он читался до загрузки скрипта. - Задайте
label, если на странице несколько блоков на одном языке.
| Клавиша | Действие |
|---|---|
Tab |
переводит фокус на кнопку копирования, затем на область прокрутки, если код не помещается |
Space / Enter |
копирует код |
← / → |
прокручивают код по горизонтали, когда область прокрутки в фокусе |