2010-02-12 7 views
4

저는 C# 웹 응용 프로그램을 만들고 있는데, 한 섹션에서는 작은 상자에 대한 사용자 의견을 보여줍니다. 한 사람이 상자를 더 크게 만드는 긴 끈을 썼던 것 같습니다.매우 긴 단어를 감싸는 방법

긴 단어가 컨테이너 크기에 맞게 표시되지 않도록하려면 어떻게해야합니까? 사용자가 다음과 같은

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

을 쓰고 내 상자가 짧은 폭

나는 그것이 적합해야한다있는 경우 예를 들어

.

+0

'make it fit'이란 무엇을 의미합니까? 그 단어를 반으로 자르시겠습니까? –

+1

어쩌면 데이빗 질문에 대한 답을 얻지 못할 수도 있습니다. –

+0

DouweM, 내 긴 단어로 위의 상황을 볼 수 있습니다. 페이지의 디자인에 영향을 미치고 있습니다. 크기 때문에 다른 상자를 넘기고 있기 때문에 내 웹 사이트에서이 작업을 원하지 않습니다. –

답변

7

CSS 속성 word-wrap: break-word을 사용하십시오. 그러면 긴 줄이 다음 줄로 넘어 가게됩니다.

+0

나는 이것을 보았고 일부 브라우저에서 제대로 작동하도록 만들었지 만 모든 브라우저가이 속성을 지원하지는 않는다는 사실을 알고 있습니다.이 기능이 작동하지 않는 브라우저에 적용 할 수있는 다른 해결 방법을 알고 있습니까? –

3

나는 이러한 특이점하는 경향이 일반적으로 실수가

overflow:hidden; 

사용하는 것을 좋아합니다.

CSS overflow Property

+0

오버플로 때문에 주석을자를 수 없습니다. 예를 들어, "안녕하세요, 오늘 어떻게 될까요?" 컨테이너보다 넓으므로 "안녕하세요"와 같은 것을 넣을 수는 없습니다. –

+0

얼마나 자주 그렇게 될까요? 대부분의 사람들은 그것을 "안녕, 오늘 어떠니?"라고 씁니다. 어떤 것이 올바르게 포장됩니다. "overflow-y : hidden;"과 같은 것을 시도해 볼 수도 있습니다. 하지만 이전 브라우저의 많은 부분에서 지원되지 않습니다 – Bertine

+0

여기에있는 것은이 사람이 "/"로 구분 된 전문 영역을 썼다는 것입니다.하지만 누군가가 그것을 쓰지 않으면 무언가를 쓰면 아무것도 아니야. –

4

할 일반적인 것은 글자 수를 확인하고 더 짧은과 elipsis로 긴 문자열을 대체합니다.

AAAAAA ...

하고, youwant 경우, 롤오버에서 전체 텍스트를 보여줍니다.

< DIV 제목 = "AAAAAA .... AAAA"> AAAAA ... </DIV>은

텍스트 = allText.SubString (최소 (allText처럼 뭔가를 할 수있는 코드에서

. 길이, 80))

그리고 이것을 다른 답변에 나열된 CSS 스타일과 결합하십시오.

+0

이것도 작동 할 수 있습니다, 나는 웹 사이트의 소유자가 비록이 솔루션을 받아 들일지 모르겠다. 그러나 어쨌든 당신을 감사하십시오. –

+0

죄송합니다. 더 좋은 생각으로 생각합니다.이 경우에는 좋은 옵션이 아닌 것 같습니다. 일반적인 이유는 "Hello World, 저는 stackoverflow에 대한 의견을 쓰고 있습니다"라고 평범하고 일반적인 텍스트를 작성한다고 가정 해 봅시다. "Hello World, I 'm writing ..."을 읽을 수 있지만 "내 전문 분야는 소프트웨어/하드웨어/스포츠/동물/이코노미스트/변호사"인 한 단어 만 있으면 간격을 두지 않고 잘라냅니다. div의 너비가 너무 길기 때문에 "하드웨어"에 표시됩니다. 사용자는 한 줄만 읽고 그 내용은 ... 그 상자에 대한 더 이상의 설명은 없지만 첫 번째 예에서는 사용자가 텍스트로 가득 찬 상자를 보게됩니다. –

0

soft hyphen을 확인하시기 바랍니다. 이것은 - 대부분의 경우 - 보이지 않는 문자로 한 줄을 끊습니다.

1

다음은 C#의 솔루션입니다. 주어진 한도를 초과 한 단어 만 흘렸고 다른 단어는 평소처럼 유지됩니다.

 /// <summary> 
     /// Word wraps the given text to fit within the specified width. 
     /// </summary> 
     /// <param name="text">Text to be word wrapped</param> 
     /// <param name="width">Width, in characters, to which the text 
     /// should be word wrapped</param> 
     /// <returns>The modified text</returns> 
     public static string WordWrap(string text, int width) 
     { 
      int pos, next; 
      StringBuilder sb = new StringBuilder(); 

      // Lucidity check 
      if (width < 1) 
       return text; 

      // Parse each line of text 
      for (pos = 0; pos < text.Length; pos = next) 
      { 
       // Find end of line 
       int eol = text.IndexOf(Environment.NewLine, pos); 
       if (eol == -1) 
        next = eol = text.Length; 
       else 
        next = eol + Environment.NewLine.Length; 

       // Copy this line of text, breaking into smaller lines as needed 
       if (eol > pos) 
       { 
        do 
        { 
         int len = eol - pos; 
         if (len > width) 
          len = BreakLine(text, pos, width); 
         sb.Append(text, pos, len); 
         sb.Append(Environment.NewLine); 

         // Trim whitespace following break 
         pos += len; 
         while (pos < eol && Char.IsWhiteSpace(text[pos])) 
          pos++; 
        } while (eol > pos); 
       } 
       else sb.Append(Environment.NewLine); // Empty line 
      } 
      return sb.ToString(); 
     } 

     /// <summary> 
     /// Locates position to break the given line so as to avoid 
     /// breaking words. 
     /// </summary> 
     /// <param name="text">String that contains line of text</param> 
     /// <param name="pos">Index where line of text starts</param> 
     /// <param name="max">Maximum line length</param> 
     /// <returns>The modified line length</returns> 
     private static int BreakLine(string text, int pos, int max) 
     { 
      // Find last whitespace in line 
      int i = max; 
      while (i >= 0 && !Char.IsWhiteSpace(text[pos + i])) 
       i--; 

      // If no whitespace found, break at maximum length 
      if (i < 0) 
       return max; 

      // Find start of whitespace 
      while (i >= 0 && Char.IsWhiteSpace(text[pos + i])) 
       i--; 

      // Return length of text before whitespace 
      return i + 1; 
     } 
관련 문제