Home » Свойство white-space в CSS: объяснение
Свойство white-space в CSS: объяснение

Свойство 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-отчётов скриптами) теперь не нужно париться с заменой пробелов на &nbsp; — достаточно правильно выставить white-space.

Для DevOps и админов это значит: меньше ручной работы, меньше багов в отображении, больше времени на автоматизацию и настройку серверов.

Выводы и рекомендации

Свойство white-space — это не просто “ещё одна фича CSS”, а реальный инструмент для тех, кто работает с логами, кодом, конфигами и автоматизацией. Оно позволяет:

  • Быстро и просто выводить форматированный текст на веб-страницах
  • Избежать багов с переносами строк и пробелами
  • Делать красивые и удобные отчёты прямо из скриптов
  • Экономить время на верстке и отладке

Используй white-space: pre или pre-wrap для логов, кода и конфигов. nowrap — для меню и кнопок. break-spaces — для экзотики и сложных кейсов. Не забывай про word-break: break-all для длинных строк.

Если ты хочешь быстро развернуть свой сервер для тестов, логов или автоматизации — зацени VPS или выделенный сервер — всё просто, быстро и без лишней головной боли.

Прокачивай свои навыки не только в bash и ansible, но и в CSS — это реально экономит время и делает жизнь проще!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked