<br />를 사용하지 않고 CSS에서 줄 바꿈하는 방법은 무엇입니까?


398

산출:

여보세요
어떻게 지내

암호:

<p>hello <br> How are you </p>

없이 동일한 출력을 얻는 방법 <br>?

답변:


385

같은 HTML 구조 불가능, 당신은 구별 할 뭔가가 있어야합니다 HelloHow are you.

내가 사용하는 것이 좋습니다 span당신이 다음 (단지처럼 블록으로 표시됩니다 것을들 <div>실제로).

p span {
  display: block;
}
<p><span>hello</span><span>How are you</span></p>


37
추가 마크 업의 양도 주목하십시오. <br />요소는 매우 좋은 이유로 존재합니다. 별도의 단락이기 때문에 줄 바꿈을 원하면 단락을 별도의 단락으로 표시하십시오.
Rowland Shaw

8
실제로 단락을 사용하지 않고 구조화 된 줄이 필요할 수 있습니다. 시, 노래 또는 주소를 표시하려면
Vincent Robert

2
@VincentRobert 맞습니다. 그러나 시가 <br>올바른 마크 업인 경우의 대표적인 예입니다 . 시의 스팸은 "잘못되었습니다".
Alan H.

8
display : 블록을 요소에 할당하면 줄 바꿈 전후에 줄 바꿈이 적용되므로 줄 바꿈이 한 번도 같지 않습니다.
jerseyboy

17
<p> 요소를 확실히 사용하십시오. <span> 요소는 display : block으로 만들어서는 안됩니다. <span>의 요점은 인라인이라는 것입니다. <div> <p> hello </ p> <p> 안녕하세요 </ p> </ div>와 같이하면됩니다. CSS가 필요하지 않습니다.
Miles

353

개행을 유지하는 white-space: pre;요소를처럼 작동하게하는 데 사용할 수 있습니다 <pre>. 예:

p {
  white-space: pre;
}
<p>hello 
How are you</p>

IE의 경우 IE8 이상에서만 작동합니다.


133
종종 더 이상 pre이다 pre-line, 이는 포장을 할 수 있습니다.
Alan H.


1
텍스트 오버플로를 사용할 수도 있기 때문에 필자의 경우 pre를 선호했습니다.
Greg

텍스트가 번들로 묶여 동일한 줄에 배치되므로 white-spaceCSS 규칙을 트리거하지 않기 때문에 반응이 작동하지 않습니다 .
Vadorequest

119

<br/>정상적으로 사용 하되 display: none원하지 않을 때는 숨 깁니다 .

이 질문을 찾는 대부분의 사람들은 CSS / 반응 형 디자인을 사용하여 특정 장소에 줄 바꿈이 나타날지 여부를 결정하기를 기대합니다. (그리고 개인에 대한 것이 없습니다 <br/>)

즉시 명확하지는 않지만 실제로 태그에 적용 display:none하여 <br/>태그를 숨길 수 있으므로 시맨틱 BR 태그와 함께 미디어 쿼리를 사용할 수 있습니다.

 <div>
   The quick brown fox<br />
   jumps over the lazy dog
 </div>

 @media screen and (min-width: 20em) 
 {
    br 
    { 
       display: none;   // hide the BR tag for wider screens (i.e. disable the line break)
    }
 }

이 기능은 텍스트를 정확히 두 줄로 나눠야하는 반응 형 디자인에 유용합니다.

http://jsfiddle.net/nNbD3/1/


5
Simon, 당신은 그 자리에 있습니다 – 당신이 지목 한 예는 제가이 질문을 연구 한 정확한 이유이며 그 display: none해결책은 가장 적절하고 유용합니다.
abbottjam 2016 년

8
단어가 함께 실행되는 경우 display: inline-block; width: 1em;대신 대신 사용할 수 있습니다 none.
Beejor

2
<br class='foo'>더 많은 제어가 필요하지만 너무 미쳐 가지 않으면 클래스를 적용 할 수도 있습니다 !
Simon_Weaver

또 다른 "왜 이것을 생각하지 않았습니까?!" 대답. <br/>그것이하는 일을 잘한다. 바퀴를 재발 명할 필요가 없습니다. 감사!
rinogo

유사 개념은 플렉스 박스 레이아웃에 적용 할 수 있습니다 stackoverflow.com/questions/29732575/...
Simon_Weaver을

106

공백 및 줄 바꿈 처리를 정의하기위한 몇 가지 옵션이 있습니다. 예를 들어 <p>태그에 내용을 넣을 수 있다면 원하는 것을 쉽게 얻을 수 있습니다.

들어 줄 바꿈이 아닌 공백의 보존 사용 pre-line(하지 pre의 등) :

<style>
 p {
     white-space: pre-line; /* collapse WS, preserve LB */
   }
</style>

<p>hello
How are you</p>

다른 동작이 필요한 경우 다음 중 하나를 선택하십시오 (WS = WhiteSpace, LB = LineBreak).

     white-space: normal;   /* collapse WS, wrap as necessary, collapse LB */
     white-space: nowrap;   /* collapse WS, no wrapping,       collapse LB */
     white-space: pre;      /* preserve WS, no wrapping,       preserve LB */
     white-space: pre-wrap; /* preserve WS, wrap as necessary, preserve LB */
     white-space: inherit;  /* all as parent element */

출처 : W3 Schools


4
완전한. 선택한 답변이어야합니다.
벤 린

1
나는 이것이 OP가 찾고있는 것이라고 생각합니다.
John Sardinha

64

CSS 의 "\ a" 명령은 캐리지 리턴을 생성합니다. 이것은 HTML이 아닌 CSS이므로 추가 마크 업없이 원하는 것에 더 가깝습니다 .

인용 부호에서, 아래 예는 제목과 소스 링크를 모두 표시하고 둘을 캐리지 리턴 ( "\a")으로 구분합니다 .

blockquote[title][cite]:after {
    content:attr(title)"\a"attr(cite)
}

팬시이지만 질문이 무엇인지 전혀 필요하지 않았습니다.
YePhIcK

15
CSS에만 있고 pre, br 태그 사용을 권장하지 않거나 표시 모드를 차단으로 변경하지 않기 때문에 +1 (다른 동작을 추가하면 부모가 display:flex 있으므로이 컨텍스트에서 해킹 됨). 환상적이지 않고 실제로 현대 기술입니다. 정확히 동일한 마크 업을 원하지만 실제로 다르게 반응하는 것이 좋습니다.
renoirb

훌륭한 아이디어. 참고" - 간단한 따옴표를 사용하지 않는 '당신이이 허용 할 때문에 \a특수 문자로 구문 분석 얻을 수 있습니다.
Hafenkranich

2
내가 일을주고 싶어하지만 크롬 55에서 나를 위해하지 작업
pery의 미몬

4
HTML과 Fiddle이 있으면 작업을 시각화하는 데 도움이 될 수 있습니다.
John

29

CSS에서 코드를 사용하십시오.

p {
    white-space: pre-line;
}

이 코드를 사용하면 P 태그 안에 들어가는 모든 CSS가 HTML에서 줄 바꿈이됩니다.


1
이것이 바로 내가 찾던 것입니다! JS에서 생성 된 요소 컨텐츠 (예 : AJAX 쿼리의 JSON 결과, 각도 스키마 형식 등)에 완벽하게 작동합니다 (예 : ngBindHtml을 사용하지 않는 경우 일반적인 AngularJS 탈출 동작)
Stefan Dragnev

28

이전에 말한 것을 바탕으로 이것은 순수한 CSS 솔루션입니다.

<style>
  span {
    display: inline;
  }
  span:before {
    content: "\a ";
    white-space: pre;
  }
</style>
<p>
  First line of text. <span>Next line.</span>
</p>

방금 아래 버튼을 클릭 할 수 있도록 여러 줄 input type='text', wrapping the input, and then laying the text over it with a wrapper div . That also requires 포인터 이벤트에 도움이되는이 접근법의 변형을 발견했습니다 :before.
Eric Lease

10
<pre> <---------------------------------------
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
</pre> <--------------------------------------

또는

<div style="white-space:pre">  <-----------------------------------
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
</div>                         <-----------------------------------

출처 : https://stackoverflow.com/a/36191199/2377343


9

요소에 줄 바꿈이 생기도록하려면 다음을 지정하십시오.

display:block;

블록 레벨 요소 다음에 부동되지 않은 요소가 다음 줄에 나타납니다. <p> 및 <div>와 같은 많은 요소는 이미 블록 레벨 요소이므로 사용할 수 있습니다.

그러나 이것이 알면 좋지만 실제로는 콘텐츠의 맥락에 더 의존합니다. 예를 들어, CSS를 사용하여 줄 바꿈을 강요하지 않을 것입니다. 의미 적으로 p 태그가 표시하는 텍스트에 가장 적합하기 때문에 <br />가 적합합니다. CSS를 중단하기 위해 더 많은 마크 업이 필요하지 않습니다. 기술적 그렇지 않아 정확히 그래서 당신은 무엇을 사용, 단락,하지만 <인사> 태그가 없습니다. HTMl을 사용하여 콘텐츠를 잘 설명하는 것이 훨씬 중요합니다. 후 콘텐츠를 예쁘게 만드는 방법을 알아보십시오.


1
그러나 이것은 컨테이너의 전체 너비로 만들어져 원하지 않는 부작용 일 수 있습니다 (특히 항목이 앵커 / 링크 인 경우).
NickG

예, 기본적으로 블록 레벨 요소는 너비를 설정하지 않는 한 전체 너비를 차지합니다. 컨텍스트에 대한 내 단락을 읽으십시오-디자인을 기반으로 HTML을 선택하는 대신 의미 적 컨텍스트로 생각하면 일반적으로 그러한 문제가 발생하지 않도록 도와줍니다.
구문 오류

1
<br> 태그를 피해야하는 이유는 시맨틱보다 기술적 인 경우가 많습니다. <br> 태그는 독립형이므로 페이지를 렌더링 할 때 앞에있는 요소가 존재하는지 알 수 없으므로 반드시 사용할 수는 없으므로 빈 줄을 원하지 않을 수 있습니다. 수직선 메뉴에서 <a> 링크 목록을 고려하여 모두 자신의 회선에 연결하고 서버 측 규칙으로 인해 어떤 링크가 숨겨 질지 알 수 없으므로 <br>을 사용할 수 없습니다. <br>이 (가) 사용 된 경우 링크를 숨기면 빈 줄이 생길 수 있습니다.
NickG

1
.. 그런 이유로 사람들은 종종 <ul> 목록을 사용한 다음 글 머리 기호를 숨기지 만 매우 해킹 적입니다. 방금 "항상 자신의 라인으로 렌더링"이라고 말하는 CSS 규칙이 있다면 더 좋습니다.
NickG

1
그러나 첫 번째 의견에서 말했듯이 요소의 전체 너비가 바람직하지 않은 부작용이 있습니다. :) 전체 너비가 아닌 새 줄에 항목이 필요합니다. 항목이 페이지의 가장 왼쪽에있는 링크 인 경우 화면의 가장 오른쪽에있는 클릭도 링크를 따라갑니다.
NickG

8

다음은 나쁜 질문에 대한 나쁜 해결책이지만 문자 그대로 요약을 충족시키는 것입니다.

p {
    width : 12ex;
}

p:before {
    content: ".";
    float: right;
    padding-left: 6ex;
    visibility: hidden;
}

1
오타 또는 무엇이어야 ex합니까? p그리고 e키보드에 가까운, 즉 내가 부탁 해요 이유되지 않습니다
MMachinegun


1
나쁜지 아닌지, 이것은 실제로 매우 영리합니다.
Jonathan Dumaine

5

링크 목록

다른 답변은 상황에 따라 줄 바꿈을 추가하는 좋은 방법을 제공합니다. 그러나 :after선택기는 링크 목록에 대한 CSS 제어 를 위해 이것을 수행하는 더 좋은 방법 중 하나입니다. 아래에 언급 된 이유로 (및 유사한 것)에 .

다음은 목차를 가정 한 예입니다.

<style type="text/css">
    .toc a:after{ content: "\a"; white-space: pre; }
</style>

<span class="toc">
    <a href="#a1">Item A1</a> <a href="#a2">Item A2</a>
    <a href="#b1">Item B1</a> <a href="#b2">Item B2</a>
</span>

그리고 여기 간단하고 호환되는 Simon_Weaver의 기술이 있습니다. 스타일과 내용을 많이 분리하지 않고 더 많은 코드가 필요하며 사실 이후에 나누기를 추가하려는 경우가 있습니다. 그래도 여전히 오래된 IE의 경우 훌륭한 솔루션입니다.

<style type="text/css">
    .toc br{ display: none; } /* comment out for horizontal links */
</style>

<span class="toc">
    <a href="#a1">Item A1</a><br/> <a href="#a2">Item A2</a><br/>
    <a href="#b1">Item B1</a><br/> <a href="#b2">Item B2</a><br/>
</span>

위 솔루션의 장점에 유의하십시오.

  • HTML의 공백에 관계없이 출력은 동일합니다 (vs. pre )
  • 요소에 추가 패딩이 추가되지 않습니다 (NickG 참조). display:block 의견 )
  • 스타일 변경을 위해 모든 HTML 파일로 이동하지 않고도 일부 공유 CSS를 사용하여 가로 및 세로 링크 목록을 쉽게 전환 할 수 있습니다.
  • 아니요 float또는clear 주위의 내용에 영향을주는 스타일
  • 스타일은 내용과 별개입니다 (vs. <br/>또는pre 하드 코딩 된 나누기)
  • 이것은 다음을 사용하여 느슨한 링크에도 사용할 수 있습니다. a.toc:after and를<a class="toc">
  • 여러 나누기를 추가하고 접두사 / 접미사 텍스트를 추가 할 수 있습니다

4

어쩌면 누군가 나와 같은 문제가있을 수 있습니다.

나는 요소에 display: flex있었으므로 사용해야했습니다 flex-direction: column.


4

br태그를로 설정display: none 도움이되지만 WordsRunTogether로 끝날 수 있습니다. 대신 공백 문자로 바꾸는 것이 더 유용하다는 것을 알았습니다.

HTML :

<h1>
    Breaking<br />News:<br />BR<br />Considered<br />Harmful!
</h1>

CSS :

@media (min-device-width: 1281px){
    h1 br {content: ' ';}
    h1 br:after {content: ' ';}
}

2
가로로 갈 때 단어가 함께 실행되지 않도록 설정 br을 고려할 수도 있습니다 display: inline-block; width: 1em;.
Beejor

1
나는 당신의 제안을 더 좋아합니다. 다음에이 문제가 발생하면 다시 시도하겠습니다.
Bryan

3

방법에 대한 <pre>태그?

출처 : http://www.w3schools.com/tags/tag_pre.asp


오! 무슨 말인지 알 겠어 그런 다음 공백을 사용 <pre>하여 줄을 바꿉니다. 규칙적인 공백을 원한다면 어떻게해야합니까?
Micha Mazaheri

프리 태그는 내에서 이루어진 캐리지 리턴을 해석합니다. 사전 태그에서 'hello'와 'how are you'사이의 경계선을 어기면 중단이 렌더링됩니다.
Godineau Félicie

2

예를 들어 많은 패딩을 추가하고 텍스트를 새 줄로 나눌 수 있습니다.

p{
    padding-right: 50%;
}

반응 형 디자인의 상황에서 특정 너비 범위 내에서만 텍스트를 분할 해야하는 상황에서 잘 작동했습니다.


1
좋은 생각이지만 패딩을 늘리면 객체의 전체 너비가 증가합니다. 특히 반응 형 페이지의 경우 부정적인 영향을 줄 수 있습니다.
itsols

1

나는 매우 간단한 해결책을 좋아합니다. 여기에 하나 더 있습니다.

<p>hello <span>How are you</span></p>

그리고 CSS

p {
 display: flex;
 flex-direction: column;
}

1

오버 플로우 랩 사용 : break-word; 처럼 :

.yourelement{
overflow-wrap: break-word;
}

1

당신은 내용을 선언해야합니다 <span class="class_name"></span> . 그런 다음 줄이 끊어집니다.

\A 줄 바꿈 문자를 의미합니다.

.class_name::after {
  content: "\A";
  white-space: pre;
}

0

Vincent Robert와 Joey Adams의 답변이 모두 유효합니다. 그러나 마크 업을 변경하지 않으려면<br /> Javascript를 사용하여 됩니다.

마크 업을 변경하지 않고 CSS에서이를 수행 할 방법이 없습니다.


정확하지 않습니다. 사용 :after하거나 할 수 있습니다 :before.
Artur Bodera 2016 년

0

제 경우에는 줄 바꿈을하기 위해 입력 버튼이 필요했습니다.
버튼에 다음 스타일을 적용하고 작동했습니다.

clear:both;

0

누군가에게 도움이되는 경우 ...

당신은 이것을 할 수 있습니다 :

<p>This is an <a class="on-new-line">inline link</a>?</p>

이 CSS로 :

a.on-new-line:before { 
  content: '&nbsp;'; 
  font-size:0; 
  display:block;
  line-height:0;
}

또는.on-new-line:before {content: ""; display: block;}
meuwka

0

&nbsp;공백 대신 사용 하면 중단이 방지됩니다.

<span>I&nbsp;DONT&nbsp;WANT&nbsp;TO&nbsp;BREAK&nbsp;THIS&nbsp;LINE&nbsp;UP, but this text can be on any line.</span>

0

이것은 Chrome에서 작동합니다.

p::after {
    content: "-";
    color: transparent;
    display: block;
}

0

항상 줄을 끊을 것이기 때문에 중단 점을 사용하고 싶지 않은 것 같습니다. 그 맞습니까? 그렇다면 <br />텍스트에 중단 점 을 추가하는 방법에 대해서는 다음과 같이 클래스를 제공하십시오 <br class="hidebreak"/>.<br /> 있으므로 특정 너비에서 끊어 지지만 해당 너비 이상으로 인라인으로 유지됩니다.

HTML :

<p>
The below line breaks at 766px.
</p>

<p>
 This is the line of text<br class="hidebreak"> I want to break.
</p>

CSS :

@media (min-width: 767px) {
  br.hidebreak {display:none;}
}

https://jsfiddle.net/517Design/o71yw5vd/


방금 Simon_Weaver가 내 것과 비슷한 답변을 게시했습니다. 죄송합니다, Simon 님은 귀하의 답변을 표절하지 않으 셨습니다. 내가 게시하기 전에 모든 답변을 읽지 않았으므로 귀하의 답변을 보지 못했습니다. 나의 나쁜 ... 교훈은 배웠다. 나는 나중에 내 것을 게시하기 전에 다른 답변을 읽을 것이다.
크 랜킷

걱정 마! 그러나 당신은 나에게시를 써야합니다. 에서 w3schools.com/tags/tag_br.asp "Tip: The <br> tag is useful for writing addresses or poems."
Simon_Weaver

0

코드는

<div class="text-class"><span>hello</span><span>How are you</span></div>

CSS는

.text-class {
     display: flex;
     justify-content: flex-start;
     flex-direction: column;
     align-items: center;
 }

-1

하지마 줄 바꿈을 원하면 하나를 사용하십시오.


3
+1 예, 그러나 새 줄이 순전히 프리젠 테이션 용인 경우 display: block;.
Web_Designer

21
이 답변이 왜 투표를했는지 이해가되지 않습니다. 하드 줄 바꿈을 사용할 수 있다면이 질문을 보지 않을 것입니다.
trliner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.