HTML의 소프트 하이픈 (<wbr> vs. & shy;)


154

웹 페이지에서 소프트 하이픈 문제를 어떻게 해결합니까? 텍스트에는 하이픈으로 줄 바꿈하려는 긴 단어가있을 수 있습니다. 그러나 전체 단어가 같은 줄에 있으면 하이픈을 표시하지 않으려 고합니다.

이 페이지의 의견에 따르면 <wbr>비표준 "Netscape가 발명 한 태그 수프"입니다. &shy; 표준 준수에도 문제가있는 것 같습니다 . 모든 브라우저에서 작동하는 솔루션을 얻을 수있는 방법 이 없는 것 같습니다 .

소프트 하이픈을 처리하는 방법은 무엇이며 왜 선택 했습니까? 선호하는 솔루션이나 모범 사례가 있습니까?


여기에서 관련 SO 토론을 참조 하십시오 .


일찍 닫아서 미안합니다. 이것은 가깝지만 다른 것과는 다릅니다. 그래도 링크를 떠나려고합니다.
— Chris Marasti-Georg

2
통지하시기 바랍니다 <wbr>안되어 모두에서 하이픈합니다.
— Andreas Rejbrand

브라우저 테스트 : jsfiddle.net/k2hbrjz8/2 또는 & # 173; 또는 & shy; 표시 및 복사 / 붙여 넣기에 원하는대로 작동하는 것 같습니다. <wbr>은 두 번 클릭 할 때 단어의 절반 만 선택합니다. 검색은 현재 의견에서 현재 Firefox에서 모두 찾습니다. & # 173; 더 나은 색인을 사용하십시오.
— karmakaze

답변:


132

불행히도 &shy의 지원은 브라우저간에 매우 일관성이 없어서 실제로 사용할 수 없습니다.

QuirksMode가 옳습니다. HTML에서 소프트 하이픈을 사용하는 좋은 방법은 없습니다. 그들없이 갈 수있는 일을보십시오.

2013 편집 : 쿼크 모드에 따르면 , &shy;현재 / 모든 주요 브라우저에서 지원됩니다 작동합니다.


11
불행히도 그렇지 않습니다. 브라우저에서 부드러운 하이픈이 포함 된 단어를 검색하십시오. 대부분의 브라우저는 소프트 하이픈을 무시하고 대신 두 개의 개별 단어로 취급합니다.
— gclj5

3
@ gclj5 &shy;Chrome v21에서 단어를 찾은 것을 테스트 했으며 소프트 하이픈을 올바르게 무시합니다. IE, FF 및 기타 브라우저에 대해서는 확실하지 않습니다.
— evanrmurphy

6
최근 FF, Chrome 및 Safari에서 정상적으로 작동합니다 (예 : 단어 검색 가능).
— MMM

10
그러나 & shy; Chrome에서 대시가있는 텍스트를 반환합니다. 예 : "일부 수줍음" "단일 나중에"로 복사
— Enyby

2
오늘 우리는 드롭했다 &shy;인해 (무료 및 상용 모두) 사용자 정의 글꼴 상당수의 렌더링 이상한 문자의 원인 (사파리, 사파리 iOS 및 크롬 최신 버전에 영향을 미치는) 웹킷의 특정 버그에 사용
— 니코 퍼니스

58

2015 년 2 월 요약 (2017 년 11 월 부분 업데이트)

&#173;구글은 여전히 ​​그것을 포함하는 단어를 색인 할 수 있기 때문에 모두 잘 수행 합니다.

  • 브라우저에서 : &shy; 그리고 &#173;둘 다 주요 브라우저에서 예상대로 표시됩니다 (이전 IE!). <wbr>최신 버전의 IE (10 또는 11)에서는 지원되지 않으며 Edge에서 제대로 작동하지 않습니다.
  • 복사하여 브라우저에서 붙여 넣을 때 : (2015 년 시험)에 대한 예상대로 &shy;및 &#173;윈도우 (10)에, Mac에서 크롬과 파이어 폭스를 들어, 문자를 유지하고 그들을 지원하는 응용 프로그램에 메모장 보이지 않는 소프트 하이픈으로 하드 하이픈을 붙여 넣습니다. IE (win7)는 일부 응용 프로그램 (예 : MS Word)에서는 하이픈으로 붙여 넣는 방식으로 IE10에서도 항상 하이픈으로 붙여넣고 Safari (Mac) 사본은 붙여 넣습니다.
  • 페이지에서 찾기 를위한 작품 &shy;과 &#173;(심지어 IE11까지)에만 정확히 일치하는 복사 및 붙여 넣은 일치 IE를 제외한 모든 브라우저에서
  • 검색 엔진 : Google은 &#173;정상적으로 입력 된 단어가 포함 된 단어를 찾습니다. 2017 년 현재 더 이상 포함 된 단어와 일치하지 않는 것 같습니다 &shy;. Yandex는 동일합니다. 빙과 바이두도 일치하지 않는 것 같습니다.

그것을 테스트

최신 실시간 테스트를 위해 부드러운 하이픈이있는 고유 한 단어의 예가 있습니다.

  • &shy;- confumbabbl&shy;ication&shy;ism공자주의
    • .................................................. .................................................. .......... 혼란주의
    • .................................................. .................................................. .............. 혼란주의

<wbr>- donfounbabbl<wbr>ication<wbr>ism. 이 사이트는 <wbr/>출력에서 제거 됩니다. 다음 은 테스트를위한 jsbin.com 스 니펫입니다 .

  • &#173;- eonfulbabbl&#173;ication&#173;ism비영리 풍자주의
    • .................................................. .................................................. ............. 불완전한 바베큐 법
    • .................................................. .................................................. ..................... 불완전한 바베큐 법

여기에는 부끄러운 하이픈이 없습니다 (페이지에서 찾기 테스트에 복사하여 붙여 넣기위한 것이며 검색 엔진 테스트를 중단하지 않는 방식으로 작성 됨).

ZZZconfumbabblicationismZZZdonfounbabblicationismZZZeonfulbabblicationismZZZ

여러 브라우저에 표시

성공 : 지정된 위치에서 끊어지고 하이픈을 넣을 때 끊어야하는 위치를 제외하고 일반 단어로 표시됩니다.

고장 : 비정상적으로 표시되거나 의도 한 장소에서 파손되지 않습니다.

  • Chrome (40.0.2214.115, Mac) : &shy;성공, <wbr>성공, &#173;성공
  • Firefox (35.0.1, Mac) : &shy;성공, <wbr>성공, &#173;성공
  • Safari (6.1.2, Mac) : &shy;성공, <wbr> 아직 테스트되지 않음 , &#173;성공
  • Edge (Windows 10) : &shy;성공, <wbr> 실패 (중단하지만 하이픈 없음), &#173;성공
  • IE11 (Windows 10) : &shy;성공, <wbr> 실패 (휴식 없음), &#173;성공
  • IE10 (Windows 10) : &shy;성공, <wbr> 실패 (휴식 없음), &#173;성공
  • IE8 (Windows 7) : 불규칙한 경우도 있지만 전혀 작동하지 않으며 모두 CSS를 따릅니다 word-wrap. 때때로 그들은 모든 일을하는 것처럼 보입니다. 이유에 대한 명확한 패턴을 아직 찾지 못했습니다.
  • IE7 (Windows 7) : &shy;성공, <wbr>성공, &#173;성공

여러 브라우저에서 복사하여 붙여 넣기

성공 : 단어 전체를 복사하지 않고 붙여 넣습니다. (브라우저 검색, MS Word 2011 및 Sublime Text에 붙여 넣은 Mac에서 테스트)

실패 : 하이픈, 공백, 줄 바꿈 또는 정크 문자로 붙여 넣기

  • Chrome (40.0.2214.115, Mac) : &shy;성공, <wbr>성공, &#173;성공
  • Firefox (35.0.1, Mac) : &shy;성공, <wbr>성공, &#173;성공
  • Safari (6.1.2, Mac) : MS Word에 &shy; 실패 (모두 하이픈으로 붙여 넣기), 다른 응용 프로그램에서의 성공 <wbr> 실패 , MS Word에 &#173; 실패 (모두 하이픈으로 붙여 넣기), 다른 응용 프로그램에서의 성공
  • IE10 (Win7에가) &shy; 실패 , 모든 하이픈으로 페이스트를 <wbr> 실패 , &#173; 실패 하이픈 모든 페이스트를
  • IE8 (Win7에가) &shy; 실패 , 모든 하이픈으로 페이스트를 <wbr> 실패 , &#173; 실패 하이픈 모든 페이스트를
  • IE7 (Win7에가) &shy; 실패 , 모든 하이픈으로 페이스트를 <wbr> 실패 , &#173; 실패 하이픈 모든 페이스트를

검색 엔진 일치

2017 년 11 월에 업데이트되었습니다. <wbr>StackOverflow의 CMS가이를 제거했기 때문에 테스트되지 않았습니다.

성공 : 하이픈이없는 단어 전체를 검색하면이 페이지가 나타납니다.

실패 : 검색 엔진은 단어의 깨진 세그먼트 나 하이픈이있는 단어를 검색 할 때만이 페이지를 찾습니다.

  • 구글 : &shy;실패, &#173;성공
  • Bing : &shy;실패, &#173;실패
  • 바이두는 : &shy;, 실패 &#173;(긴 문자열 내에서 조각을 일치 할 수 있지만, 자신의 단어를 포함하지 않는 실패 &#173;또는 &shy;)
  • Yandex : &shy;실패, &#173;성공 (100 % 확실하지 않은 Baidu와 같은 문자열 조각과 일치 할 수 있음)

여러 브라우저에서 페이지에서 찾기

검색 엔진 일치로 성공 및 실패

  • Chrome (40.0.2214.115, Mac) : &shy;성공, <wbr>성공, &#173;성공
  • Firefox (35.0.1, Mac) : &shy;성공, <wbr>성공, &#173;성공
  • Safari (6.1.2, Mac) : &shy;성공, <wbr>성공, &#173;성공
  • IE10 (Win7에가) &shy; 실패 만은 모두 수줍음 하이픈 포함되어있는 경우 일치 <wbr>성공, &#173; 실패 만이 모두 수줍음 하이픈을 포함 할 때 일치
  • IE8 (Win7에가) &shy; 실패 만은 모두 수줍음 하이픈 포함되어있는 경우 일치 <wbr>성공, &#173; 실패 만이 모두 수줍음 하이픈을 포함 할 때 일치
  • IE7 (Win7에가) &shy; 실패 만은 모두 수줍음 하이픈 포함되어있는 경우 일치 <wbr>성공, &#173; 실패 만이 모두 수줍음 하이픈을 포함 할 때 일치

현재 <wbr/>Firefox 및 Chrome에서 작동합니다. (그리고 솔직히 말해서, 적어도 2 월에도 Windows에서는 그랬다고 생각합니다.)
— Andreas Rejbrand 18시 03 분

1
Windows 7에서 최신 버전의 Chrome 및 Firefox를 사용하고 <wbr/>있으며 두 가지 모두에서 작동합니다. 통지 해주십시오 <wbr>요소가 하이픈을 추가 할 예정되지 않은 중단이 발생했을 때. 즉, <wbr/>하고 &shy; 있다 되지 같은 일을하는데 .
— Andreas Rejbrand

아, SE의 CMS가 <wbr/>소스 코드를 유지하면서 최종 마크 업에서 s를 제거한 것처럼 보입니다 . 젠장 SE!
— user56reinstatemonica8

이상하고 그 벌레를 재현 할 수 없습니다.
— Andreas Rejbrand

테스트의 어느 지점 있는가 &shy;와는 &#173;? 일단 DOM에 도달하면 문자 그대로 동일합니다 . HTML 토크 나이저에서만 전혀 다릅니다.
— gsnedders

32

CSS3에서 하이픈 을 표준화 하기위한 지속적인 노력이 있습니다 .

일부 최신 브라우저, 특히 Safari 및 Firefox는 이미이를 지원합니다. 다음은 브라우저 지원에 대한 최신 정보입니다 .

CSS 하이픈이 보편적으로 구현되면 이것이 가장 좋은 해결책이 될 것입니다. 한편, 나는 추천 할 수 하이픈 붙이기를 - JS 스크립트를 그 특정 브라우저에 가장 적합한 방법으로 텍스트를 하이픈하는 방법을 그림.

하이픈 :

  • LaTeX 및 OpenOffice에서 일반적으로 알려진 Franklin M. Liangs 하이픈 알고리즘 에 의존합니다 .
  • 가능한 경우 CSS3 하이픈을 사용합니다.
  • &shy;대부분의 다른 브라우저에 자동 삽입
  • 여러 언어를 지원합니다
  • 고도로 구성 가능하며
  • 자바 스크립트가 활성화되지 않은 경우 정상적으로 작동합니다.

나는 그것을 사용했고 훌륭하게 작동합니다!


Firefox는이 속성을 지원하지만 적용시 아무 것도 수행하지 않습니다
— bob0the0mighty

Firefox가 작동하지 않지만 html 태그에 lang 유형을 포함시켜야합니다.
— bob0the0mighty

하이픈 넣기 스크립트는 더 이상 유지 관리되지 않는 것으로 보이지만 github.com/mnater/Hyphenopoly
— MattFisch

20

&shy;필요한 경우 수동으로 삽입하여을 사용 합니다.

나는 항상 사람들이 기술을 사용하지 않는 것이 안타깝다는 것을 알고 있습니다. 왜냐하면 오래되었거나 이상한 브라우저가 있기 때문에 브라우저가 지정된 방식으로 처리하지 못하기 때문입니다. &shy;최신 Internet Explorer 및 Firefox 브라우저 모두에서 제대로 작동하는 것으로 나타났습니다 . 사람들에게 이상한 브라우저를 사용하는 경우 성인물을 사용하거나 스스로 위험을 감수하도록 지시하는 브라우저 검사를 포함 할 수 있습니다.

Syllabification은 쉽지 않으므로 Javascript로 남겨 두는 것이 좋습니다 . 언어 별 주제이며 텍스트를 자극하지 않으려면 데스크 맨이 신중하게 수정해야 할 수도 있습니다. 독일어와 같은 일부 언어는 복합 단어를 형성하며 분해 문제를 일으킬 수 있습니다. 예를 들어 Spargelder( 배균 저축 돈, pl.)은 음절 규칙에 따라 두 곳에 포장 될 수 있습니다 ( Spar-gel-der). 그러나 그것을 두 번째 위치로 감싸서 첫 번째 부분을 Spargel-( 배아 아스파라거스) 로 표시 하여 독자의 머리에 완전히 잘못된 개념을 활성화하여 피해야합니다.

그리고 문자열은 Wachstube어떻습니까? '보호실'( Wach-stu-be) 또는 '왁스 튜브 '( ) 를 의미 할 수 있습니다 Wachs-tu-be. 다른 언어로 된 다른 예제도있을 수 있습니다. 모든 핵심 단어를 교정하여 잘 정리 된 텍스트를 작성하는 데 데스크 맨이 지원 될 수있는 환경을 제공해야합니다.


6
Spar-gelder와 Spargel-der의 영어에서 일반적인 예는 "re-cord"와 "rec-ord"(동 음계는 아니지만 호모 폰은 아님)입니다. 전자는 동사이고 후자는 명사입니다. 알고리즘은 영어 (IT에서 가장 많이 지원되는 언어 중 하나) 인 경우에도 일반적으로 충분하지 않습니다.
— 니콜라스 생크

38
나는 전문가 교환 대 전문가 섹스 교환을 제안합니다
— CJ Dennis

13

HTML5에서 <wbr>와 &shy; 똑같은 일을해서는 안된다는 것을 아는 것이 매우 중요합니다 !

부드러운 하이픈

&shy;소프트 하이픈, 즉 U + 00AD : SOFT HYPHEN입니다. 예를 들어

innehålls&shy;förteckning

로 렌더링 될 수 있습니다

innehållsförteckning

또는

innehålls-
förteckning

현재 소프트 하이픈은 Firefox, Chrome 및 Internet Explorer에서 작동합니다.

wbr요소

그만큼 wbr 요소 는 단어 분리 기회이며 줄 바꿈이 발생하면 하이픈이 표시되지 않습니다. 예를 들어

ABCDEFG<wbr/>abcdefg

로 렌더링 될 수 있습니다

ABCDEFGabcdefg

또는

ABCDEFG
abcdefg

현재이 요소는 Firefox 및 Chrome에서 작동합니다.


4

폭 이 0 인 공간 엔티티는 <wbr>거의 모든 플랫폼에서 안정적으로 태그 대신 사용될 수 있습니다 .

&#8203;

휴식을 금지하는 데 사용될 수있는 단어 결합 자 엔티티 도 유용합니다 . 휴식을 원하는 곳을 제외하고 단어의 각 문자 사이에 삽입하십시오.

&#8288;

이 두 가지로 무엇이든 할 수 있습니다.


1
너비가 0 인 공간 (ZWSP, U + 200B, &#8203;)은 정확히 <wbr>(iirc; 시간이 지났지 만) 더 나은 지원 (일반적으로 오늘날)입니다. 깨진 단어에 하이픈을 추가 하지 않기 때문에 내가 찾던 것입니다. 예를 들어 쉼표로 구분 된 값을 s/,/,\&#8203;/g대체 할 때 줄 바꿈 할 수 있습니다 .
— Adam Katz 2018

2

이것은 클라이언트에서 실행되고 jQuery를 사용하여 조금 전에 살펴본 크로스 브라우저 솔루션입니다.

(function($) { 
  $.fn.breakWords = function() { 
    this.each(function() { 
      if(this.nodeType !== 1) { return; } 

      if(this.currentStyle && typeof this.currentStyle.wordBreak === 'string') { 
        //Lazy Function Definition Pattern, Peter's Blog 
        //From http://peter.michaux.ca/article/3556 
        this.runtimeStyle.wordBreak = 'break-all'; 
      } 
      else if(document.createTreeWalker) { 

        //Faster Trim in Javascript, Flagrant Badassery 
        //http://blog.stevenlevithan.com/archives/faster-trim-javascript 

        var trim = function(str) { 
          str = str.replace(/^\s\s*/, ''); 
          var ws = /\s/, 
          i = str.length; 
          while (ws.test(str.charAt(--i))); 
          return str.slice(0, i + 1); 
        }; 

        //Lazy Function Definition Pattern, Peter's Blog 
        //From http://peter.michaux.ca/article/3556 

        //For Opera, Safari, and Firefox 
        var dWalker = document.createTreeWalker(this, NodeFilter.SHOW_TEXT, null, false); 
        var node,s,c = String.fromCharCode('8203'); 
        while (dWalker.nextNode()) { 
          node = dWalker.currentNode; 
          //we need to trim String otherwise Firefox will display 
          //incorect text-indent with space characters 
          s = trim( node.nodeValue ).split('').join(c); 
          node.nodeValue = s; 
        } 
      } 
    }); 

    return this; 
  }; 
})(jQuery); 

2

을 사용하는 것이 wbr좋으므로 코드를 다음과 같이 작성할 수 있습니다.

<p>这里有一段很长,很长的<wbr
></wbr>文字;这里有一段</p>

문자 사이에 &shy;공백이 생기지 않고 줄 바꿈으로 작성된 공백은 멈추지 않습니다.


2

내가 사용하는 소프트 하이픈 유니 코드 문자를 문제를 해결하기 위해 몇 가지 데스크톱 및 모바일 브라우저에서 성공적으로.

유니 코드 기호는 다음 \u00AD과 같이 Python 유니 코드 문자열에 삽입하기가 매우 쉽습니다.s = u'Языки и методы програм\u00ADми\u00ADро\u00ADва\u00ADния' .

다른 해결책은 유니 코드 문자 자체를 삽입하는 것이며 Sublime Text, Kate, Geany 등과 같은 편집기에서 소스 문자열은 완벽하게 평범하게 보입니다 (커서는 보이지 않는 심볼을 느낄 것입니다).

사내 도구의 16 진 편집자가이 작업을 쉽게 자동화 할 수 있습니다.

쉬운 kludge는와 같이 희귀하고 눈에 띄는 문자를 사용 ¦하여 복사 및 붙여 넣기가 쉽고, 예를 들어 frontend script in을 사용하여 소프트 하이픈으로 대체하는 것입니다 $(document).ready(...). 같은 소스 코드 s = u'Языки и методы про¦гра¦м¦ми¦ро¦ва¦ния'.replace('¦', u'\u00AD')는보다 읽기 쉽다 s = u'Языки и методы про\u00ADг\u00ADра\u00ADм\u00ADми\u00ADро\u00ADва\u00ADния'.


0

엔터티 &#173;대신 유니 코드 문자열을 사용하면 웹 브라우저가 더 관대 해 보일 수 있습니다 &shy;.


0

운이 좋지 않고 여전히 JSF 1을 사용해야하는 경우 유일한 해결책은 & # 173 ;, & shy; 작동하지 않습니다.


0

<wbr> & shy;

오늘은 둘 다 사용할 수 있습니다.

<wbr> 는 더 많은 정보를 나누지 않고 깨는 데 사용합니다.

예를 들어, 링크를 표시하는 데 사용하십시오.

 https://stackoverflow.com/questions/226464/soft-hyphen-in-html-wbr-vs-shy

&수줍은; 필요한 경우이 시점에서 텍스트가 깨지고 하이픈이 추가됩니다.

예:

"에임시 수줍음, 수줍음, 수줍음, 수줍음, 음란 수음, 수줍음, 수줍음, 수줍음;

div{
  max-width: 130px;
  border-width: 2px;
  border-style: dashed;
  border-color: #f00;
  padding: 10px;
}
<div>https://<wbr>stackoverflow.com<wbr>/questions/226464<wbr>/soft-hyphen-in-<wbr>html-wbr-vs-shy</div>

<div>É im&shy;pos&shy;sí&shy;vel pa&shy;ra um ho&shy;mem a&shy;pren&shy;der a&shy;qui&shy;lo que ele acha que já sa&shy;be.</div>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.