https://www.w3schools.com/charsets/ref_html_ascii.asp
Control characters (except horizontal tab, line feed, and carriage return) have nothing to do inside an HTML document.
以下のように\nがあるStringを考える。 abc\n123\nxyz
pre内では\nは以下のように改行として表示される。 abc 123 xyz
次に以下のように\rがあるStringを考える。 abc\r123\rxyz
pre内では\rは以下のように改行として表示される。\nと全く同じであり、HTML内で\rを捨てるということはできない。 abc 123 xyz
次に以下のように\r\nがあるStringを考える。 abc\r\n123\r\nxyz
pre内では\r\nは以下のように改行として表示される。つまり\r\nと\nと\rは全く同じように振る舞う。 abc 123 xyz
最後に、この \r と \n を一つ一つ別々に CSS の content で入れ替えた場合、同じように振る舞うか試してみる。 abc\r\n123\r\nxyz
pre内ではcontent版\r\nは以下のように普通に改行として表示される。 abc123xyz
【結論】 \r, \n, \r\n の組み合わせによる改行は、そのままCSSのcontentに入れ替えられる。 ストリングは一文字一文字ごとに分解してcharCodeAt()で番号に入れ替えたあと contentに設定できる。