프로젝트/크루트

textarea에 엔터를 입력했는데 렌더링해보니 줄 바꿈이 안 된다?

발전생 2022. 3. 10. 00:31

보다시피 서버에서 받은 question.content에는 개행이 담겨있다. 문자열에 \n가 textarea에서 엔터를 쳤음을 의미한다. 

하지만 렌더링 해보니 줄 바꿈이 되어 있지 않았다.

 

 

구글링해보니 css를 이용해서 해결할 수 있는 문제였다.

문제 해결의 실마리는 언제나 stackoverflow에 있을지니..

https://stackoverflow.com/questions/36729634/rendering-newline-character-in-vuejs

 

Rendering newline character in VueJS

I'm creating a note app where users can add a note by entering multiline text in a textarea. When I save the note in Firebase it is being saved with newline (\n) characters which I want to visualiz...

stackoverflow.com

 

https://developer.mozilla.org/ko/docs/Web/CSS/white-space

 

white-space - CSS: Cascading Style Sheets | MDN

CSS white-space 속성은 요소가 공백 문자를 처리하는 법을 지정합니다.

developer.mozilla.org

그래서 mdn에서 white-space에 대해 찾아봤다. 

개행 문자를 공백으로 처리하는 white-space: normal이 기본 css 속성이라 저렇게 줄바꿈 없이 렌더링 된 것이었다.

 

p 태그에 white-space: pre-line을 적용해줬더니 줄바꿈이 잘 적용되었다.

모든 태그에 이 css를 적용하면 간혹 button 태그 안에 바로 텍스트를 넣었을 경우 코드 상에서의 개행이 버튼 모양을 망가뜨릴 것이다.  (버튼이 위로 길어진다)

그러므로 컨텐츠를 p 태그로 잘 감싸고 p 태그에만 white-space: pre-line 를 적용해줄 필요가 있다.