모든 브라우저에서 하이픈에서 줄 바꿈을 방지하는 방법


104

CMS에 ckeditor가 있습니다. 최종 사용자는 해당 ckeditor를 통해 긴 기사를 입력합니다. 해당 기사의 하이픈에서 줄 바꿈을 방지하는 방법이 필요합니다.

어쨌든 모든 브라우저에서 하이픈에서 줄 바꿈을 방지 할 수 있습니까?

또는 ckeditor에이를 방지 할 수있는 옵션이 있습니까?


현재 수락 된 답변에 더 이상 사용되지 않는 솔루션이 있으므로 수락 된 답변을 변경하는 것을 고려할 수 있습니다
inorganik

답변:


51

텍스트를 "단어"(공백으로 구분 된 비 공백 문자의 시퀀스)로 분할하고 nobr마크 업 내부에 하이픈이 포함 된 각 "단어"를 래핑하는 것보다 안정적으로 수행하는 더 간단한 방법은 없습니다 . 따라서 입력 데이터 bla bla foo-bar bla blabla bla <nobr>foo-bar</nobr> bla bla.

nobr"단어"에 문자와 숫자 만 포함되어있을 때마다 마크 업 삽입을 고려할 수도 있습니다 . 그 이유는 일부 브라우저가“2/3”또는“f (0)”과 같은 문자열을 깨뜨릴 수도 있기 때문입니다 ( 브라우저에서 줄 바꿈의 이상한 점에 대해서는 내 페이지 참조 ).


35
nobr태그는 표준, 강하게 W3C 낙담하지 않습니다. w3.org/TR/html5/obsolete.html#non-conforming-features
derekerdmann

18
다른 접근 방식과 달리 nobr마크 업은 모든 브라우저에서 작동하고 스타일 시트가 비활성화 된 경우에도 작동하며 특수 문자에 대한 지원과 독립적으로 작동합니다. 거기에 실제 그것으로 문제는?
Jukka K. Korpela

18
<span style = "white-space : nowrap"> </ span>는 어떻습니까?
Brendan Byrd 2014

6
@ JukkaK.Korpela 문제는 최신 브라우저가 지원을 중단하기로 결정할 수 있으며 HTML 사양을 위반하지 않고 그렇게 할 수 있다는 것입니다. 이것은 단지 구현을 제안하는 "should"기능입니다. 스타일 시트와 관련하여 사용자가 스타일 시트를 비활성화 한 경우 스타일이 없을 것으로 예상합니다
mirhagk dec.

3
저는 10 년 동안 사이트를 개발해 왔으며 브라우저에서 스타일 시트를 비활성화 할 수 있다는 사실조차 몰랐습니다. 실제로 누가 수행합니까 (현재 시대에 기본적으로 JavaScript를 비활성화하는 자체 플래 젤 레이션을 선택하는 사람들을 제외하고)? 너무 현명해야한다면 대체 솔루션은 어디에 있습니까?
John Rix

274

Unicode NON-BreakING HYPHEN (U + 2011)을 사용할 수 있습니다 .

HTML : &#x2011;또는&#8209;

참조 : http://en.wikipedia.org/wiki/Hyphen#In_computing


4
답장을 보내 주셔서 감사합니다. 그러나 우리가해야 할 일은 최종 사용자가 모든 콘텐츠를 입력 할 ckeditor에서 줄 바꿈을 방지하는 것입니다. 모든 사람에게 유니 코드 비 분리 하이픈을 입력하라고 말할 수는 없습니다. 줄 바꿈을 방지하는 다른 방법이 있습니까? 또는 ckeditor에 하이픈을 자동으로 변환하는 옵션이 있습니까? 다시 한 번 감사드립니다
앨런

9
간단한 문자열 교체를 수행 -하여 .
속임수

14
U + 2011 제한 글꼴 지원에주의를 참조 fileformat.info/info/unicode/char/2011/fontsupport.htm
유카 K. 펠라

7
이것은 이론적으로는 확실히 더 우아하지만 nobr모든 곳에서 태그 를 칠하는 것보다 더 우아하지만 실제로는 잘 작동하지 않습니다. IE는 엔 대시로 표시하고 Safari는 일반 대시보다 주위에 더 많은 공간을 추가하며 대부분의 텍스트 편집기는 물음표 나 상자 또는 기타 의미없는 문자로 표시합니다.
Tgr 2012-08-20

4
@jakev 나는 derekerdmann이 white-space: nowrap제안한대로 갈 것입니다 . FF / Win7의 Btw에서는 대상 응용 프로그램이 유니 코드를 인식하더라도 Firefox 외부에서 복사하여 붙여 넣을 때 수줍은 대시가 일반 대시로 변환되는 것처럼 보입니다.
Tgr

86

한 가지 해결책은 추가 span태그와 white-spaceCSS 속성 을 사용하는 것 입니다. 다음과 같이 클래스를 정의하십시오.

.nowrap {
    white-space: nowrap;
}

그런 다음 하이픈으로 연결된 텍스트 주위에 해당 클래스와 함께 범위를 추가합니다.

<p>This is the <span class="nowrap">anti-inflammable</span> model</p>

이 접근 방식은 모든 브라우저에서 잘 작동합니다. 여기에 나열된 버그가있는 구현은 white-space속성의 다른 값에 대한 것입니다 . http://reference.sitepoint.com/css/white-space#compatibilitysection


1
답장을 보내 주셔서 감사합니다. 그러나 우리의 텍스트 내용은 최종 사용자가 ckeditor를 통해 입력 할 것입니다. 모든 사람에게 단어 주위에 <span>을 추가하라고 말할 수는 없습니다. 그것을 달성하는 다른 방법이 있습니까? 감사 어쨌든
앨런

1
@Alan-hypens에서 깨지지 않는 어떤 종류의 콘텐츠를 추가하고 있습니까? 항상 한 줄에있는 제목 또는 기타 요소 인 white-space: nowrap경우 전체 컨테이너에 적용 하십시오. 그렇지 않으면 그냥 놓아주세요. 첫째, 일반 콘텐츠에 대해 하이픈으로 줄 바꿈을 방지 할 이유가 없습니다. 둘째, CKEditor를 해킹하지 않는 한 자동으로 원하는 내용을 얻을 수있는 방법이 없습니다.
derekerdmann

10
"F-1"에서와 같이 하이픈 뒤의 줄 바꿈이 나쁘거나 아주 잘못된 경우가 많거나 하이픈이 "-42 °"에서처럼 단항 마이너스로 사용되는 경우가 많습니다 (사람들은 그런 식으로 사용합니다. 마이너스 기호에 대해 모르기 때문에).
Jukka K. Korpela

이것은 작동하지만 하이픈이 공백이 아니기 때문에 작동한다는 사실은 직관적이지 않습니다. <nobr>훨씬 더 명확합니다.
Dave Burton

2

모든 HTML 인스턴스를 편집하지 않고는 할 수 없습니다. 결과적으로 나는 그들을 대체하기 위해 몇 가지 JS를 작성했습니다.

jQuery :

//replace hypens with no-breaking ones
$txt = $("#block-views-video-block h2");
$txt.text( $txt.text().replace(/-/g, '‑') );

바닐라 JS :

function nonBrHypens(id) {
    var str = document.getElementById(id).innerHTML; 
    var txt = str.replace(/-/g, '‑');
    document.getElementById(id).innerHTML = txt;
}

1
하이픈을 포함 할 수있는 HTML의 모든 부분을 편집하지 않기 때문에 여기에서 아이디어가 마음에 듭니다. 그러나 특히 많은 요소가있는 경우 이와 같이 전체 페이지의 모든 텍스트를 처리하는 성능 문제가 발생할 수 있다고 생각합니다.
Sean the Bean

0

하이픈 주위에 결합 자 문자 ( &#8288;) 라는 단어를 사용합니다 . IE에서도 작동합니다.

https://en.wikipedia.org/wiki/Word_joiner

특정 하이픈 수정 ...

function fixicecream(text) {
    return text.replace(/ice-cream/g,'ice&#8288;-&#8288;cream'));
}

또는 모든 것 ...

function fixhyphens(text) {
    return text.replace(/(\S+)-(\S+)/g,'$1&#8288;-&#8288;$2'));
}

-1

이 CSS를 사용해보십시오 :

word-break: break-all; 
-webkit-hyphens:none;
-moz-hyphens: none; 
hyphens: none;

7
이 코드 스 니펫은 질문을 해결할 수 있지만 설명을 포함하면 게시물의 품질을 개선하는 데 실제로 도움이됩니다. 앞으로 독자를위한 질문에 답하고 있으며, 해당 사용자는 코드 제안 이유를 모를 수 있습니다. 또한 설명 주석으로 코드를 복잡하게 만들지 마십시오. 이렇게하면 코드와 설명의 가독성이 감소합니다!
Ashish Ahuja
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.