У вас есть два конкурирующих требования. Вы либо хотите, чтобы содержимое вписывалось в определенную область (то есть: width: 300px), либо хотите сохранить пробелы и символы новой строки по мере их ввода пользователем. Вы не можете делать и то и другое, поскольку одно по определению мешает другому.
Поскольку HTML не распознает пробелы, ваши единственные опции меняют несколько пробелов на "& nbsp;" и изменение новой строки на
, используя тег
или указав стиль css "white-space: pre".