CSS로 <br />을 타겟팅 할 수 있습니까?


160

<br/>CSS로 줄 바꿈 태그 를 타겟팅 할 수 있습니까?

줄 바꿈이있을 때마다 1px 점선을 원합니다. 내 CSS로 사이트를 사용자 정의하고 설정된 HTML을 변경할 수 없습니다. 그렇지 않으면 다른 방법을 사용합니다.

나는 그것이 가능하다고 생각하지 않지만 누군가가 알고있는 방법이있을 수 있습니다.


답변:


169

BR줄 바꿈을 생성하며 줄 바꿈 일뿐입니다. 이 요소에는 내용이 없으므로 clear또는 과 같이 적용 할 수있는 스타일은 거의 없습니다 position. 님 BR의 테두리를 설정할 수는 있지만 시각적 치수가 없으므로 표시되지 않습니다.

두 문장을 시각적으로 분리하려면 이 목표를위한 수평 눈금자 를 사용하는 것이 좋습니다. 마크 업을 변경할 수 없으므로 CSS 만 사용하면이 작업을 수행 할 수 없습니다.

이미 다른 포럼에서 논의 된 것 같습니다. Re 에서 추출 : CSS를 사용하여 BR 요소의 높이 설정 :

[T] 그는 BR에 대해 다소 이상한 상태가되지만 한편으로는 일반 요소로 취급되지 않고 대신 생성 된 컨텐츠에서 \ A의 인스턴스로 취급되지만 다른 한편으로는 CSS 속성의 제한된 하위 집합에 대한 일반적인 요소가 허용되고 있습니다.

또한 CSS 1 사양 에서 설명을 찾았습니다 (상위 사양에서는 언급하지 않음).

현재 CSS1 특성 및 값은 'BR'요소의 동작을 설명 할 수 없습니다. HTML에서 'BR'요소는 단어 사이의 줄 바꿈을 지정합니다. 실제로 요소는 줄 바꿈으로 바뀝니다. 이후 버전의 CSS는 추가 및 교체 된 내용을 처리 할 수 ​​있지만 CSS1 기반 포맷터는 'BR'을 특별히 처리해야합니다.

Grant Wagner의 테스트에 따르면 BR다른 요소를 사용 하여 스타일 을 지정할 수있는 방법이 없습니다 . 브라우저에서 결과를 테스트 할 수있는 온라인 사이트도 있습니다 .

최신 정보

pelms는 몇 가지 추가 조사 통해 IE8 (Win7)과 Chrome 2 / Safari 4b를 사용하면 스타일을 BR다소 조정할 수 있다고 지적했습니다 . 실제로 IE Net Renderer의 IE8 엔진을 사용 하여 IE 데모 페이지 를 확인한 결과 작동했습니다.

업데이트 2 c69는 몇 가지 추가 조사를 수행했으며 , 브라우저 간을 많이 사용하지는 않지만 마커 를 상당히 무겁게 스타일링 할 있지만 부모 컨테이너에 속하는 것으로 보이므로 줄 바꿈 자체에는 영향을 미치지 않습니다.br


좋은 대답입니다. 브라우저 간이 아닌 경우 하나의 브라우저 만 타겟팅하지 않는 한 (예 : 휴대 기기 만 해당) 스타일을 지정하지 않아도됩니다. 그렇지 않으면, 스타일링 허용하도록 HTML을 수정하는 의미를 보인다 (<p> 태그, 누구?)
razzed

49

다음을 시도해보십시오. 높은 투표로 다른 답변의 업데이트 2를 사용하여 함께 작성했으며 완벽하게 작동했습니다.

br
{   content: "A" !important;
    display: block !important;
    margin-bottom: 1.5em !important;
}

Edge 및 IE에서 작동하지 않는 것 같지만 실제 브라우저는 아닙니다.
Jester

31

<br>태그의 스타일을 지정 해야하는 한 가지 이유가 있습니다 .

코드의 일부인 경우 변경하고 싶지 않거나 변경할 수 없으며이 특정 사항 <br>을 표시하지 않으려 고합니다 .

.xxx br {display:none}

많은 시간과 때로는 하루를 절약 할 수 있습니다.


20

내 의견을 놓친 미래의 방문자를 위해 :

br {
    border-bottom:1px dashed black;
}

작동하지 않습니다.

IE 6, 7 & 8, Firefox 2, 3 & 3.5B4, Windows 용 Safari 3 & 4, Opera 9.6 & 10 (알파) 및 Google Chrome (버전 2)에서 테스트되었으며 작동하지 않습니다. 그들. 미래에 누군가가 <br>요소 의 테두리를 지원하는 브라우저를 찾으면 이 목록을 자유롭게 업데이트하십시오.

또한 여러 가지 다른 것들을 시도했습니다.

br {
    border-bottom:1px dashed black;
    display:block;
}

br:before { /* and :after */
    border-bottom:1px dashed black;
    /* content and display added as per porneL's comment */
    content: "";
    display: block;
}

br { /* and :before and :after */
    content: url(a_dashed_line_image);
}

그 중 다음은 Opera 9.6 및 10 (알파)에서 작동합니다 (porneL 감사합니다).

br:after {
    border-bottom:1px dashed black;
    content: "";
    display: block;
}

하나의 브라우저에서만 지원되는 경우별로 유용하지는 않지만 다른 브라우저가 사양을 구현하는 방법을 보는 것이 항상 흥미 롭습니다.


3
: 이전에 콘텐츠가 없으면 존재하지 않습니다. content:""; display:block두 번째 규칙에 추가하십시오 .
Kornel

10

HTML을 편집 할 수 없지만 CSS를 수정할 수 있다면 자바 스크립트를 추가 할 수 있습니까?

그렇다면 jquery를 포함시킬 수 있습니다.

<script language="javascript">
$(document).ready(function() {
    $('br').append('<span class="myclass"></span>');
});
</script>

1
$ ( 'br'). before ( '<span class = "myclass"> </ span>');
molokoloco

10
br { padding: 1px 8px; border-bottom: 1px dashed #000 }

IE8에서 아래와 같이 렌더링됩니다 ... 단 하나의 브라우저에서만 많이 사용되지는 않습니다.

IE 8 스크린 샷

(NB는 IE 8.0.7100 (Win7 RC에서)을 사용하고 있습니다.)

또한,

br:after { content: "..." }  
br { content: "" }`

또는,

br:after {
    border: 1px none black;
    border-bottom-style: dashed;
    content: "";
    padding: 0 6px 0;
}

br { content: "" }

Chrome 2 / Safari 4b에서 점선을 표시하지만 줄 바꿈을 잃어 버립니다 (누군가 다시 소개 할 수있는 방법이 없다면) 쓸모없는 것입니다.

예 :
IE8 테스트 , Chrome / Safari 테스트기타


그 흥미 롭군요. IE8에서는이를 재현 할 수 없습니다. IE8에 내장 된 이미지처럼 보이는 온라인 예제를 작성할 수 있습니까?
viam0Zah

링크 추가-Win7은 약간의 차이가있을 경우 약간 다른 버전의 IE8을 사용합니다.
펠름 16:25에서

1
@pelms 감사합니다. IENetRenderer를 사용하여 IE 테스트 페이지를 확인했으며 실제로 아래에 테두리가 표시됩니다 BR. 감사합니다. 테스트 결과로 답변을 업데이트했습니다.
viam0Zah

2

내 자신의 테스트에 따르면 br태그가 CSS를 타겟팅하지 않는 것으로 나타났습니다 .

그러나 스타일을 추가 할 수 있다면 페이지 머리글에 스크립 태그를 추가 할 수도 있습니까? .js다음과 같은 작업을 수행 하는 외부 링크 :

function replaceLineBreaksWithHorizontalRulesInElement( element )
{
    elems = element.getElementsByTagName( 'br' );
    for ( var i = 0; i < elems.length; i ++ )
    {
        br = elems.item( i );
        hr = document.createElement( 'hr' );
        br.parentNode.replaceChild( hr, br );
    }
}

요컨대, 그것은 최적이 아니지만 여기에 내 해결책이 있습니다.


dc3는 '안타깝게도 HTML을 바꿀 수 없다'고 썼다.
viam0Zah

2
@ Török : 내가 게시 한 답변은 순전히 OP가 아니라 비슷한 질문으로이 페이지를 찾는 모든 사람을위한 것입니다.
Kris

2

이것은 문제를 해결하는 것으로 보입니다.

<!DOCTYPE html>

<style type="text/css">
#someContainer br { display:none }
#someContainer br + a:before { content:"|"; color: transparent; letter-spacing:-100px; border-left: 1px dashed black; margin:0 5px; }
</style>

<div id="someContainer"><a>link</a><br /><a>link</a><br /><a>link</a></div>

1

BR은 블록 요소가 아닌 인라인 요소입니다.

따라서 다음이 필요합니다.

 br.Underline{
    border-bottom:1px dashed black;
    display: block;
  }

그렇지 않으면 인라인 요소에는 테두리, 패딩 또는 여백이 없기 때문에 그러한 것들에 대해 조금 까다로운 브라우저는 BR 요소에 테두리 적용을 거부합니다.


인라인 요소는 않는 테두리, 패딩과 마진이 - 단지 다른 방식으로 작동합니다.
viam0Zah

Fx에서 Firebug로 일을 시도하고 있습니다. 나는 그것을 시도했지만 그것은 나를 위해 작동하지 않았다. 줄 바꿈 태그의 슬래시가 부동하지 않습니다 (정확한 용어 인 경우). 즉 br과 / 사이에 공백이 없습니다. 이것이 요인입니다. 나는 공간이 있어야한다고 생각했다. 어쨌든 firebug에서 HTML을 편집 하여이 문제를 해결했습니다. 어쨌든 모든 도움을 주셔서 감사합니다-전에이 사이트를 사용한 적이 없으며 응답을 얼마나 빨리 받았는지 매우 놀랐습니다. 당신이 여기에 큰 커뮤니티.
dc3

2
@ richard : 실제로 어떤 브라우저를 테스트 했습니까? IE 6, 7 & 8, Firefox 2, 3 & 3.5B4, Windows 용 Safari 3 & 4, Opera 9.6 & 10 (beta) 및 Chrome (버전 1)에서 시도했지만 그중 하나에서 작동하지 않았습니다. .
Grant Wagner가

1

2019 년 9 월 13 일 업데이트 :

스타일링의 목적 <br>이와 같이 태그 "더 큰"줄 바꿈을 만드는 것입니다 (즉, 줄 사이에 약간의 추가 공간이 있음).

"oldbig"클래스 (아래)는 Chrome 66.0.3359.181, Firefox Quantum 60.0.2, Edge 42.17134.1.0 및 IE 11.48.17134.0에서 스타일 테스트되었습니다. 불행히도 Chrome 버전 76과 그 파생 상품 (2019 년 8 월경)에서 고장났습니다. 증상은 선 사이의 추가 공간이 더 이상 표시되지 않는 것입니다.

"newbig"클래스는 현재 버전의 Chrome (76.0.3809.132), Opera, Firefox, Edge, IE, Brave 및 Palemoon에서 테스트되어 올바르게 작동합니다.

br.oldbig {line-height:190%;vertical-align:top;}
br.newbig {display:block;content:"";margin-top:0.5em;line-height:190%;vertical-align:top;}

데모는 다음과 같습니다.

br.oldbig {line-height:175%;vertical-align:top;}
br.newbig {display:block;content:"";margin-top:0.5em;line-height:190%;vertical-align:top;}
<p style="max-width:20em">This is a paragraph which demonstrates the difference 
 between a line-break which occurs when the text exceeds the max-width, and a 
 line-break forced by a &lt;br&gt; tag here:<br>
 and a line break forced by a &lt;br class=oldbig&gt; tag here:<br class=oldbig>
 and a line break forced by a &lt;br class=newbig&gt; tag here:<br class=newbig>
 This is the next line after the &lt;br class=newbig&gt; tag (but still 
 part of the same paragraph).</p>
<p style="max-width:20em">And this is another paragraph, entirely.</p>

결과는 Chrome v.76에 표시됩니다.

스크린 샷


0

이것은 작동하지만 IE에서만 작동합니다. IE8에서 테스트했습니다.

br {

  border-bottom: 1px dashed #000000;
  background-color: #ffffff;
  display: block;
  }

0

나는 배치 <br>에 태그를 <span>태그하고 사용 할 수 있었다 display:none;<span>을 사용하지 않을 때 컨트롤에 <br>미디어 쿼리를 사용하여 태그를.


<br>스팬으로 포장하는 대신 직접 타겟팅하는 것이 어떻습니까?
Gavin

0

오래된 질문이지만 이것은 매우 깔끔하고 깨끗한 수정이며 여전히 가능한지 궁금한 사람들에게 사용될 수 있습니다. :)

br{
    content: '.';
    display: inline-block;
    width: 100%;
    border-bottom: 1px dashed black;
}

이 수정으로 웹 사이트에서 BR을 제거 할 수도 있습니다 (너비를 0px로 설정하십시오)


-2

왜 HR 태그를 사용하지 않습니까? 원하는대로 정확하게 만들어졌습니다. 식탁 위에 숟가락이 있으면 수프를 먹을 때 포크를 만드는 것을 좋아합니다.


모든 사용 사례에 적용되는 것은 아닙니다. hr이 블록 요소이기 때문에-스타일링이 제한됩니다.
Thariama

1
분명히 그는 clear : all을 사용하기를 원합니다. Gabor의 훌륭한 답변을 참조하십시오. 그래서 당신의 포크 비유는 전혀 의미가 없습니다.
eddy147
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.