2012-01-06 3 views
65

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

모든 브라우저의 하이픈에서 줄 바꿈을 방지 할 여지가 있습니까?

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

답변

33

내가 분할보다 안정적으로 그것을 할 간단한 방법은 없습니다 두려워 텍스트를 "words"(공백 문자로 구분 된 공백이 아닌 문자 시퀀스)로 묶고 하이픈을 포함하는 각 "단어"를 nobr 마크 업으로 묶습니다. bla bla foo-bar bla bla과 같은 입력 데이터는 bla bla <nobr>foo-bar</nobr> bla bla으로 바뀝니다.

"단어"에 문자와 숫자 이외의 문자가 포함되어있을 때마다 nobr 마크 업을 삽입하는 것이 좋습니다. 그 이유는 일부 브라우저는 "2/3"또는 "f (0)"과 같은 문자열을 깨뜨릴 수도 있기 때문입니다 (내 페이지 oddities of line breaking in browsers 참조).

+27

'nobr' 태그는 표준이 아니므로 W3C는 강력히 권장하지 않습니다. http://www.w3.org/TR/html5/obsolete.html#non-conforming-features – derekerdmann

+17

다른 접근 방식과 달리 'nobr'마크 업은 모든 브라우저에서 작동하며 스타일 시트가 비활성화되어 있어도 독립적으로 작동합니다 특수 문자에 대한 지원. 거기에 진짜 * 문제가 있습니까? –

+10

? –

184

You can use 유니 코드 NON-BREAKING HYPHEN (U + 2011)입니다.

HTML : &#x2011; 또는

&#8209;이 항목은 : http://en.wikipedia.org/wiki/Hyphen#In_computing

+3

정말 감사합니다. 하지만 우리가해야 할 일은 ckeditor에서 모든 내용이 최종 사용자에 의해 입력되는 줄 바꿈을 방지하는 것입니다. 우리는 유니 코드 non-breaking 하이픈에 모두 들어가라고 말할 수는 없습니다. 줄 바꿈을 방지하는 다른 방법이 있습니까? 또는 ckeditor는 자동으로 하이픈을 변환 할 수 있습니까? 감사합니다. – Alan

+6

'-'를'-'로 대체하여 간단한 문자열 교체를 할 수 있습니다. – deceze

+12

U + 2011에 대한 제한된 글꼴 지원에주의하십시오. http://www.fileformat.info/info/unicode/char/2011/fontsupport.htm –

58

하나의 솔루션은 추가 span 태그와 white-space CSS 속성을 사용할 수 있습니다. 다음과 같이 클래스를 정의하면됩니다.

.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를 통해 입력합니다. 우리는 모든 사람에게 단어 주위에 을 추가한다고 말할 수는 없습니다. 그것을 성취 할 다른 방법이 있습니까? 고마워 어쨌든 – Alan

+1

@ Alan - 하이픈에서 깨질 수없는 콘텐츠는 어떤 내용으로 추가됩니까? 제목이나 항상 한 줄에있는 다른 요소라면 전체 컨테이너에'white-space : nowrap'을 적용하십시오. 그렇지 않으면, 그냥 가자. 첫째, 일반 내용에 대한 하이픈을 사용하여 줄 바꿈을 방지 할 이유가 없습니다. 둘째, CKEditor를 해킹하지 않으려는 경우를 제외하고는 자동으로 수행 할 대상을 얻을 수있는 방법이 없습니다. – derekerdmann

+8

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

1

는이

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

이 코드 단편은 질문을 해결할 수 있지만 [설명 포함] (https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)은 게시물의 품질을 향상시키는 데 정말로 도움이됩니다. 앞으로 독자의 질문에 답하고 있으며 코드 제안의 이유를 알지 못할 수도 있습니다. 또한 주석을 설명하기 위해 코드를 군중시키지 마십시오. 그러면 코드와 설명 모두 가독성이 떨어집니다! –

+2

이것은 전혀 작동하지 않습니다. – sbichenko

1

당신은 할 수없는 모든 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; 
} 
+0

하이픈을 포함 할 수있는 모든 HTML 비트를 편집하는 작업이 필요 없기 때문에 저는 여기에있는 아이디어를 좋아합니다.그러나, 당신이 성능 문제를이 같은 전체 페이지에서 텍스트의 모든 비트를 처리, 특히 많은 요소가있을 경우 실행될 수 있습니다 용의자. –

관련 문제