- Home »

Свойство white-space в CSS: объяснение
В этой статье разберёмся, что такое свойство white-space
в CSS, почему оно важно даже для тех, кто привык больше к bash-скриптам, nginx-конфигам и автоматизации, чем к фронтенду. Поговорим о том, как быстро и без боли настроить его для своих нужд, чтобы не тратить время на бессмысленную возню с версткой. Будет много практики, примеры из жизни, схемы, сравнения и даже немного гиковских лайфхаков. Если ты когда-нибудь сталкивался с тем, что твой вывод логов, консольных команд или просто текст на сайте выглядит не так, как задумано — эта статья для тебя.
Как работает свойство white-space
в CSS?
По сути, white-space
— это способ управлять тем, как браузер обрабатывает пробелы, табы и переносы строк в тексте. В отличие от большинства других CSS-свойств, оно не про цвет, размер или отступы, а про то, как твой текст будет выглядеть на экране: будет ли он “схлопываться” в одну строку, переноситься, сохранять ли форматирование, как в консоли, или превращаться в сплошную кашу.
Вот основные значения white-space
и их поведение:
Значение | Пробелы | Переносы строк | Перенос по ширине | Где применяют |
---|---|---|---|---|
normal |
Схлопываются | Игнорируются | Да | Текстовые блоки по умолчанию |
nowrap |
Схлопываются | Игнорируются | Нет | Меню, заголовки, лейблы |
pre |
Сохраняются | Сохраняются | Нет | Код, логи, ASCII-арт |
pre-wrap |
Сохраняются | Сохраняются | Да | Форматированный текст, но с адаптацией под ширину |
pre-line |
Схлопываются | Сохраняются | Да | Редкие кейсы, когда нужны переносы, но не лишние пробелы |
break-spaces |
Сохраняются | Сохраняются | Да (даже длинные пробелы могут переноситься) | Экзотика, но бывает полезно для вывода логов |
Если коротко: white-space
— это твой способ сказать браузеру: “Эй, не трогай мои пробелы и переносы, я сам знаю, как надо!” или наоборот — “Сделай красиво, как обычно”.
Как быстро и просто всё настроить?
Всё просто: добавляешь нужное свойство в CSS — и готово. Но есть нюансы, которые могут сэкономить тебе кучу времени (и нервов).
-
Для вывода логов, кода, конфигов: Используй
white-space: pre;
илиpre-wrap;
. Первый вариант полностью сохраняет форматирование, второй — ещё и переносит длинные строки по ширине блока. -
Для меню, кнопок, лейблов:
white-space: nowrap;
— чтобы текст не разваливался на две строки, даже если места мало. -
Для обычного текста: Оставь
white-space: normal;
— это дефолт, и он работает как надо. -
Для экзотики:
break-spaces
— если нужно, чтобы даже длинные цепочки пробелов не схлопывались, а переносились.
Вот базовые команды для настройки (CSS-фрагменты):
/* Сохраняем форматирование, как в консоли */
pre, .log-output {
white-space: pre;
font-family: monospace;
}
/* Сохраняем форматирование, но переносим длинные строки */
pre.wrap, .log-output.wrap {
white-space: pre-wrap;
word-break: break-all;
}
/* Не даём тексту переноситься */
.menu-label, .nowrap {
white-space: nowrap;
}
/* Экзотика: переносим даже длинные пробелы */
.exotic {
white-space: break-spaces;
}
Если используешь SASS/LESS — всё то же самое, только можно вынести в миксины.
Примеры, схемы, практические советы
Давай разберём реальные кейсы, с которыми сталкивался лично или видел на StackOverflow/Habr.
Кейс 1: Вывод логов на веб-странице
Ты хочешь, чтобы логи выглядели так же, как в консоли. Но если просто вставить их в <div>
, всё форматирование слетает: табы схлопываются, переносы игнорируются.
/* Плохо */
.log-output {
font-family: monospace;
/* white-space не задан */
}
Результат: всё в одну строку, читать невозможно.
/* Хорошо */
.log-output {
font-family: monospace;
white-space: pre;
}
Результат: всё как в консоли, даже ASCII-арт не разваливается.
Кейс 2: Длинные строки в логах
Если строка слишком длинная, она может вылезти за пределы блока и поломать верстку.
/* Решение */
.log-output {
font-family: monospace;
white-space: pre-wrap;
word-break: break-all;
}
Теперь длинные строки аккуратно переносятся, но форматирование сохраняется.
Кейс 3: Кнопки и меню
В меню или на кнопках иногда появляются длинные слова (например, имена серверов или команд), которые не должны переноситься.
.menu-label {
white-space: nowrap;
}
Теперь даже если места мало, текст не развалится на две строки.
Кейс 4: Форматирование конфигов
Если нужно показать пример конфига nginx или bash-скрипта, используем <pre>
и white-space: pre;
:
server { listen 80; server_name example.com; location / { proxy_pass http://localhost:8080; } }
Выглядит ровно так, как в редакторе.
Кейс 5: Неожиданные проблемы
Иногда кто-то случайно применяет white-space: nowrap;
к родительскому блоку, и весь сайт перестаёт переносить строки. В результате — горизонтальный скролл, сломанная верстка, куча негодования.
Рекомендация: Используй white-space: nowrap;
только точечно, для конкретных элементов.
Сравнение: когда что использовать?
Кейс | Рекомендуемое значение | Почему |
---|---|---|
Логи, код, конфиги | pre или pre-wrap |
Сохраняет форматирование, переносы, пробелы |
Меню, кнопки | nowrap |
Не даёт тексту разваливаться |
Обычный текст | normal |
Дефолт, работает как надо |
Экзотика (ASCII-арт, специальные логи) | break-spaces |
Сохраняет даже длинные пробелы, переносит их |
Похожие решения, утилиты и инструменты
-
Markdown: В Markdown для форматирования кода используют тройные кавычки или отступы, но при рендере всё равно важно, как настроен CSS для
<pre>
и<code>
. -
JS-библиотеки для подсветки синтаксиса: highlight.js, Prism.js — используют
white-space: pre
для корректного отображения кода. -
Терминальные эмуляторы в браузере: xterm.js, ttyd — обязательно используют
white-space: pre
илиpre-wrap
. -
Плагины для WordPress, MediaWiki: Все используют
white-space
для корректного отображения кода и логов.
Официальная документация:
Интересные факты и нестандартные применения
-
ASCII-арт и схемы: Если хочешь вставить ASCII-схему сервера или сетевой топологии — без
white-space: pre
всё развалится. -
Генерация отчётов: Если твой скрипт генерирует HTML-отчёты (например, по бэкапам или мониторингу), можно выводить их в
<pre>
сwhite-space: pre-wrap
— и всё будет читабельно. -
Визуализация логов в реальном времени: Для веб-интерфейсов мониторинга (например, для tail -f через веб) — только
pre-wrap
спасает от хаоса. -
Скрытые баги: Иногда баги в отображении появляются из-за наследования
white-space
от родителя. Всегда проверяй, что свойство не переопределяется где-то выше. -
Автоматизация: Можно генерировать HTML-страницы с логами прямо из bash-скриптов, просто оборачивая вывод в
<pre>
и добавляя нужный стиль.
Новые возможности и автоматизация
С появлением значения break-spaces
(поддерживается в современных браузерах) можно делать ещё более гибкие отчёты, где даже длинные цепочки пробелов не теряются. Это важно, если ты, например, визуализируешь diff-файлы, где пробелы критичны.
В автоматизации (например, при генерации HTML-отчётов скриптами) теперь не нужно париться с заменой пробелов на
— достаточно правильно выставить white-space
.
Для DevOps и админов это значит: меньше ручной работы, меньше багов в отображении, больше времени на автоматизацию и настройку серверов.
Выводы и рекомендации
Свойство white-space
— это не просто “ещё одна фича CSS”, а реальный инструмент для тех, кто работает с логами, кодом, конфигами и автоматизацией. Оно позволяет:
- Быстро и просто выводить форматированный текст на веб-страницах
- Избежать багов с переносами строк и пробелами
- Делать красивые и удобные отчёты прямо из скриптов
- Экономить время на верстке и отладке
Используй white-space: pre
или pre-wrap
для логов, кода и конфигов. nowrap
— для меню и кнопок. break-spaces
— для экзотики и сложных кейсов. Не забывай про word-break: break-all
для длинных строк.
Если ты хочешь быстро развернуть свой сервер для тестов, логов или автоматизации — зацени VPS или выделенный сервер — всё просто, быстро и без лишней головной боли.
Прокачивай свои навыки не только в bash и ansible, но и в CSS — это реально экономит время и делает жизнь проще!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.