프리 태그로 텍스트를 줄 바꿈하려면 어떻게합니까?


720

pre 태그는 HTML의 코드 블록과 스크립트를 작성하는 동안 출력을 디버깅하는 데 매우 유용하지만 한 줄을 인쇄하는 대신 텍스트 줄 바꿈을 어떻게 수행합니까?

답변:


1008

이 페이지 의 CSS 답변은 다음 과 같습니다.

pre {
    white-space: pre-wrap;       /* Since CSS 2.1 */
    white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
    white-space: -pre-wrap;      /* Opera 4-6 */
    white-space: -o-pre-wrap;    /* Opera 7 */
    word-wrap: break-word;       /* Internet Explorer 5.5+ */
}

7
white-space:pre-line;(그리고 모든 브라우저 호환 버전) 줄의 시작 부분에서 공간을 빼앗기 때문에 (예를 들어 탭없이) 어떤 경우에는 더 적합 해 보입니다
MediaVince

5
@MediaVince, pre-line줄의 시작 부분뿐만 아니라 모든 공백을 축소합니다. developer.mozilla.org/en-US/docs/Web/CSS/white-space 에는 white-space값 의 동작을 요약 한 표가 있습니다.
Paul

1
word-wrap: break-word질문이 요구하는 것을하지 않으면 단어 사이에서도 줄 바꿈이 발생합니다. 해당 줄을 삭제할 수 있습니다. 최신 브라우저에서는 -moz접두사 가 필요하지 않습니다 .
Flimm

140

이것은 텍스트를 감싸고 pre-tag 내에서 공백을 유지하는 데 효과적입니다 .

pre {
    white-space: pre-wrap;
}

3
CSS 3 전용이기 때문 입니다. 호환성에 대한 자세한 내용은 adambox 의 답변 을 참조하십시오 .
lorem monkey

60

프리 태그를 건너 뛰고 공백을 사용하는 경우 div의 프리 랩이 더 나은 솔루션이라는 것을 알았습니다.

 <div style="white-space: pre-wrap;">content</div>

3
인기있는 답변보다 쉽습니다. 감사!
Ricky

4
내 경우에는 일부 테이블을 구성하기 위해 탭이 포함 된 사전 형식의 텍스트를 표시하고 싶었습니다. 나는 당신의 솔루션을 사용했습니다 플러스 모든 열이 정렬되도록 monspace 글꼴을 추가했습니다.style="white-space: pre-wrap; font-family:monospace;"
Jan

1
이것이 더 쉬울 수 있지만 <pre>코드 블록 에 사용하면 의미가 더 클 수 있습니다 .
Angelos Chalaris

2
나는 이것이이 게임에 늦었다는 것을 알고 있지만 왜이 솔루션이 스타일 시트에서 한 번 설정하는 것보다 낫습니까? 하나의 HTML 출력 화면에 여러 div가 있어야합니다. 스타일 시트의 요소를 한 번만 수정하면 모든 문제가 해결되는 것처럼 보입니다.
webfrogs

1
@webfrogs 예. .prewrap 클래스를 만드는 것이 가장 좋습니다.
Mason240


20

이것이 내가 필요한 것입니다. 그것은 단어가 깨지지 않도록하지만 사전 영역에서 동적 너비를 허용했습니다.

word-break: keep-all;

17

나는 사전을 잊어 버리고 텍스트 영역에 넣는 것이 좋습니다.

들여 쓰기가 유지되고 경로 중간에 단어가 줄 바꿈되지 않습니다.

클립 보드에 복사하려는 경우 텍스트 영역에서도 텍스트 범위를 쉽게 선택할 수 있습니다.

다음은 PHP 발췌 부분이므로 PHP가 아닌 경우 HTML 특수 문자를 포장하는 방법은 다양합니다.

<textarea style="font-family:monospace;" onfocus="copyClipboard(this);"><?=htmlspecialchars($codeBlock);?></textarea>

js에서 클립 보드에 텍스트를 복사하는 방법에 대한 자세한 내용 은 JavaScript로 클립 보드에 복사하는 방법을 참조하십시오. .

하나...

방금 stackoverflow 코드 블록을 검사하고 CSS로 <pre> 태그로 싸인 <code> 태그로 래핑합니다 ...

code {
  background-color: #EEEEEE;
  font-family: Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;
}
pre {
  background-color: #EEEEEE;
  font-family: Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;
  margin-bottom: 10px;
  max-height: 600px;
  overflow: auto;
  padding: 5px;
  width: auto;
}

또한 stackoverflow 코드 블록의 내용은 http://code.google.com/p/google-code-prettify/ 사용하여 구문 강조 표시됩니다 .

좋은 설정이지만 지금은 텍스트 영역을 사용하고 있습니다.


13
입력 이외의 텍스트 영역을 의미 적으로 잘못 사용하지 않습니까? 나에게 이상한 해결책 인 것 같습니다.
Josh M.

2
"pre"가 포함 된 텍스트가 사전 형식화되어 추가 형식화가 필요하지 않고 그대로있는 것으로 간주 될 때 "pre"태그에 여러 가지 형식 지정 스타일을 추가하는 것만 큼 의미 상 올바르지 않습니다. "기능"보다 "의미"에 우선 순위를 부여하십시오.
ekerner

1
나는 <pre>의미 론적 의미 가 없다고 생각 합니다 ()와 달리 <code>단순히 개행과 여러 공백이 보존되어야 함을 의미합니다.
Flimm

1
"사전 포맷 된"의 줄임말입니다. 실제로 미리 포맷 된 줄 바꿈 및 여러 공백 전용으로 짧다는 것을 제안하고 있습니까?
ekerner

콘텐츠 형식은 미리 형식이 지정된 텍스트의 형식에 따라 내부 태그로 지정됩니다. 나는 친구를 w3c 프리 태그 위키 페이지 ( w3.org/wiki/HTML/Elements/pre)
joshperry

14

@richelectron과 @ user1433454 답변을 결합했습니다.
잘 작동하고 텍스트 서식을 유지합니다.

<pre  style="white-space: pre-wrap; word-break: keep-all;">

</pre>

13

다음 중 하나를 수행 할 수 있습니다.

pre { white-space: normal; }

모노 스페이스 글꼴을 유지하면서 자동 줄 바꿈을 추가하려면 다음을 수행하십시오.

pre { overflow: auto; }

긴 줄을 가로로 스크롤하여 고정 크기를 허용합니다.


오버플로 알림에 감사합니다! 모바일 디스플레이에 적합합니다.
XTL

6

사용해보십시오

<pre style="white-space:normal;">. 

또는 CSS를 더 잘 던지십시오.


이것은 IE 7에서는 작동하지만 6에서는 작동하지 않는 것 같습니다. 이것은 IE에 유망한 것처럼 보이는 유일한 제안입니다 ... 다른 모든 제안은 다른 브라우저에 좋았습니다 ...
topwik

nevermind는 브라우저 캐싱 기능이어야합니다. IE 6을 다시 시작하면 모든 것이 정상입니다. 건배.
topwik

2
이 솔루션의 문제점은 개행 문자도 해결한다는 것입니다. 예를 들어 텍스트를 단락으로 분리하면 손실됩니다.
Chris W.

4

s white-space: pre-wrap내부 pre의 자동 줄 바꿈에 일부 접두사를 사용하십시오 .

word-wrap: break-word물론 이것은 당신이 원하지 않는 것 인 단어를 반으로 나누기 때문에 사용하지 마십시오 .


3

Best Cross Browser Way는 줄 바꿈을 얻고 정확한 코드 또는 텍스트를 표시하기 위해 일했습니다 (chrome, internet explorer, Firefox)

CSS :

xmp{ white-space:pre-wrap; word-wrap:break-word; }

HTML :

<xmp> your text or code </xmp>

나를 위해 일했습니다 :-)
Wesley Tuzza

7
xmp는 HTML 3.2부터 사용되지 않으며 HTML5에서 완전히 제거되었으며 제대로 작동하지 않습니다. 다양한 브라우저에서 일관되게 구현되지 않았습니다.
PeterToTheThird

공백 사용 : 프리 랩; 및 단어 랩 : 브레이크 단어; 내 CSS에서 (json) 스 니펫의 들여 쓰기를 유지하고 미리 줄은 이것을 제거합니다. (Chrome)
Peter Visser

1

다음이 도움이되었습니다.

pre {
    white-space: normal;
    word-wrap: break-word;
}

감사


3
나는 white-space: pre-wrap;공백을 존중하기 때문에 사용하는 것이 더 좋다고 생각 한다
Ivan Ferrer Villa

-1

<pre>- 요소는 "사전 형식의 텍스트"를 의미하고, 그 태그 사이에있는 텍스트 (또는 무엇이든)의 형식을 유지하기위한 것입니다. 따라서 실제로 <pre>-Tag 내에 자동 단어 줄 바꿈 또는 줄 바꿈이있는 것은 아닙니다.

요소의 텍스트는 고정 폭 글꼴 (일반적으로 Courier)로 표시되며 공백 과 줄 바꿈을 모두 유지합니다 .

출처 : w3schools.com 은 본인이 강조합니다.


프리 태그가 자동 줄 바꿈하려는 의도는 아니지만 프리 태그 내에서 텍스트를 자동 줄 바꿈하는 것이 가능하다는 사실 만 알려줍니다.
rob_st

이것은 저자의 질문에 대한 유일한 정답입니다. 다른 답변이나 가능한 "솔루션"은 <pre> 요소의 오용을 권장합니다. 기본적으로 <pre> 요소 안에 type을 넣고 랩핑하려면 <p> 태그를 대신 사용하고 CSS 클래스에서 원하는 방식으로 스타일을 지정하십시오.
Markus

왜 사람들이 이런 종류의 "나는 너보다 똑똑하다"고 조언하는 것이 도움이되는지 잘 모르겠다. 아니요, <p> 태그는 적합한 대체품이 아닙니다. 공백이나 줄 바꿈을 유지하지 않습니다. <pre> 태그는 줄 바꿈을 유지하는 데 유용하지만 코드 편집기가 줄 바꿈을 유지하고 줄 바꿈을 추가하는 것과 같은 방식으로 줄 바꿈을 추가해야하는 경우가 있습니다.
dwk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.