Вы можете иметь отдельные <p>
теги для каждой строки вместо использования<br>
теги, и получить большую совместимость с браузером прямо из коробки.
Для этого нужно поставить <p>
тег с некоторым текстом по умолчанию внутри contenteditable div.
Например, вместо:
<div contenteditable></div>
Использование:
<div contenteditable>
<p>Replace this text with something awesome!</p>
</div>
jsfiddle
Протестировано в Chrome, Firefox и Edge, второй работает одинаково в каждом.
Первый, однако, создает div в Chrome, создает разрывы строк в Firefox, а в Edge создает div, и курсор возвращается в начало текущего div, а не перемещается в следующий.
Протестировано в Chrome, Firefox и Edge.