CSS로 긴 문자열 자르기 : 아직 실현 가능합니까?


210

동적 HTML이 너비와 높이가 고정 된 레이아웃에 맞도록 일반 HTML 및 CSS로 텍스트를 자르는 좋은 방법이 있습니까?

나는 서버 측을 논리적 너비 (예 : 맹목적으로 추측되는 문자 수)만큼 잘랐지만 'w'가 'i'보다 넓기 때문에 차선책이되는 경향이 있으며 다시 추측해야합니다 ( 고정 너비마다 문자 수를 조정하십시오. 브라우저에서 잘림이 발생하는 것이 이상적 이며 렌더링 된 텍스트 의 실제 너비 를 알고 있습니다.

나는 IE가 text-overflow: ellipsis내가 원하는 것을 정확하게 하는 속성을 가지고 있음을 발견 했지만, 이것이 브라우저 간이어야합니다. 이 속성 은 표준으로 보이지만 Firefox에서는 지원하지 않습니다. 에 따라 다양한 해결 방법을 찾았 overflow: hidden지만 줄임표를 표시하지 않거나 (사용자가 내용이 잘렸다는 것을 알기를 원합니다) 내용을 잘랐습니다 (내용이 잘리지 않은 경우에도).

누구든지 고정 레이아웃에 동적 텍스트를 넣는 좋은 방법이 있습니까? 아니면 지금 당장 논리 너비만큼 서버 측 잘림이 있습니까?




답변:


187

업데이트 : text-overflow: ellipsis이제 지원됩니다 Firefox 7 (2011 년 9 월 27 일 릴리스)부터 됩니다. 예이! 내 원래의 대답은 역사적 기록입니다.

Justin Maxwell은 크로스 브라우저 CSS 솔루션을 보유하고 있습니다. 그러나 Firefox에서 텍스트를 선택할 수 없다는 단점이 있습니다. 이것이 작동하는 방법에 대한 자세한 내용은 Matt Snider의 블로그에서 게스트 게시물을 확인하십시오 .

이 기술은 또한 innerHTMLFirefox 의 특성을 사용하여 JavaScript에서 노드의 컨텐츠를 업데이트하지 못하게합니다 . 해결 방법은이 게시물의 끝 부분을 참조하십시오.

CSS

.ellipsis {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    -o-text-overflow: ellipsis;
    -moz-binding: url('assets/xml/ellipsis.xml#ellipsis');
}

ellipsis.xml 파일 내용

<?xml version="1.0"?>
<bindings
  xmlns="http://www.mozilla.org/xbl"
  xmlns:xbl="http://www.mozilla.org/xbl"
  xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
>
    <binding id="ellipsis">
        <content>
            <xul:window>
                <xul:description crop="end" xbl:inherits="value=xbl:text"><children/></xul:description>
            </xul:window>
        </content>
    </binding>
</bindings>

노드 컨텐츠 업데이트

Firefox에서 작동하는 방식으로 노드의 컨텐츠를 업데이트하려면 다음을 사용하십시오.

var replaceEllipsis(node, content) {
    node.innerHTML = content;
    // use your favorite framework to detect the gecko browser
    if (YAHOO.env.ua.gecko) {
        var pnode = node.parentNode,
            newNode = node.cloneNode(true);

        pnode.replaceChild(newNode, node);
    }
};

작동 방식에 대한 설명은 Matt Snider의 게시물을 참조하십시오 .


지적 해 주셔서 감사합니다. 잘리지 않은 div에 어떤 ​​내용을 넣을 수 있는지에 대한 선택 불가능한 텍스트와 제한은 부끄러운 일이지만 일반적으로 좋은 해결책처럼 보입니다.
Sam Stokes

내가 맞은 진짜 좌절은 공백이 & nbsp;로 렌더링되어 들여 쓰기가 실제로 실현 가능하지 않다는 것입니다 ... = /
Matchu

나는이 같은 문제를 겪었습니다. Firefox가 아직 어떤 형태로는 이것을 지원하지 않는다고 믿을 수 없습니다.
mcjabberz

이 방법은 Webkit 및 IE8에서 SELECT 컨트롤의 OPTION 요소에 대해 누구나 작동합니다. Webkit은 나를 위해 아무것도하지 않는 것 같으며 IE8은 줄임표없이 클립합니다.
Rajat

Microsoft의 설명서에 요소 text-overflow지원이 명시 되어 있지 않습니다 option( msdn.microsoft.com/en-us/library/ms531174(VS.85).aspx적용 대상 섹션 참조 ).
Simon Lieschke

45

2014 년 3 월 : CSS로 긴 문자열 자르기 : 브라우저 지원에 중점을 둔 새로운 답변

http://jsbin.com/leyukama/1/ 데모 (이전 버전의 IE를 지원하기 때문에 jsbin을 사용합니다).

<style type="text/css">
    span {
        display: inline-block;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;     /** IE6+, Firefox 7+, Opera 11+, Chrome, Safari **/
        -o-text-overflow: ellipsis;  /** Opera 9 & 10 **/
        width: 370px; /* note that this width will have to be smaller to see the effect */
    }
</style>

<span>Some very long text that should be cut off at some point coz it's a bit too long and the text overflow ellipsis feature is used</span>

-ms-text-overflow CSS 속성은 필요하지 않습니다. text-overflow CSS 속성의 동의어이지만 6에서 11까지의 IE 버전은 이미 text-overflow CSS 속성을 지원합니다.

웹 브라우저에 대해 Windows OS에서 성공적으로 테스트되었습니다 (Browserstack.com에서).

  • IE6에서 IE11로
  • 오페라 10.6, 오페라 11.1, 오페라 15.0, 오페라 20.0
  • 크롬 14, 크롬 20, 크롬 25
  • 사파리 4.0, 사파리 5.0, 사파리 5.1
  • Firefox 7.0, Firefox 15

Firefox : Simon Lieschke (다른 답변)에서 지적한 바와 같이 Firefox는 Firefox 7 이후 (2011 년 9 월 27 일 릴리스) 이후의 텍스트 오버 플로우 CSS 속성 만 지원합니다.

Firefox 3.0 및 Firefox 6.0에서이 동작을 다시 확인했습니다 (텍스트 오버플로는 지원되지 않음).

Mac OS 웹 브라우저에서 몇 가지 추가 테스트가 필요합니다.

참고 : 줄임표가 적용될 때 마우스로 가리키면 툴팁을 표시 할 수 있습니다. 이는 자바 스크립트를 통해 수행 할 수 있습니다 .HTML 텍스트 오버플로 줄임표 감지HTML-줄임표가 활성화 된 경우에만 툴팁을 표시하는 방법

자원:


@chiragpatel이 라이브 데모를 편집하여 직접 해보십시오 jsbin.com/leyukama/1
Adrien Be

FF7 <은 오늘날 Firefox 사용자의 0.05 %입니다.
Tom Tom

19

JavaScript 솔루션에 문제가 없다면 브라우저 간 방식으로이를 수행하는 jQuery 플러그인이 있습니다. http://azgtech.wordpress.com/2009/07/26/text-overflow-ellipsis-for를 참조하십시오. -firefox-via-jquery /


정말 유용합니다, 감사합니다! Firefox를 제외한 모든 브라우저가 CSS 속성을 지원하는 것처럼 보이므로이 플러그인을 사용하면 Javascript를 비활성화 한 Firefox 사용자 만 유일하게 작동하지 않습니다. 성능의 의미가 어떤지 아십니까?
Sam Stokes

아니요, 죄송합니다. 실제 코드를 사용하지 않고 데모와 함께 연주했습니다. 데모를 가져 와서 같은 페이지에 백 번 잘라 붙여 넣기하는 것이 쉬울 것입니다.
RichieHindle

2
JavaScript truncate () (jQuery 또는 Prototype의 경우 도트 문자열 등)는 문자 너비를 고려하지 않기 때문에 절반에 불과합니다. 따라서 미리 정의 된 제한된 공간으로 인해 텍스트를 잘라내려면 고정 폭 글꼴을 사용할 때 해당 기능 만 안정적으로 작동합니다. 심각한 솔루션은 문자 수가 아닌 글리프에서 작동해야합니다.
Matthias

@ Matias : 아마도 코드를 테스트 한 후에 코드가 업데이트되었지만 아마도 데모를 보았고 가변 너비 글꼴로 완벽하게 작동합니다.
RichieHindle

7

좋아, Firefox 7 text-overflow: ellipsis뿐만 아니라 구현 했습니다 text-overflow: "string". 최종 출시는 2011-09-27에 계획되어 있습니다.


6

이 문제에 대한 또 다른 해결책은 다음 CSS 규칙 세트 일 수 있습니다.

.ellipsis{
 white-space:nowrap;
 overflow:hidden;
}

.ellipsis:after{
  content:'...';
}

위의 CSS의 유일한 단점은 텍스트가 컨테이너를 오버플로하는지 여부에 관계없이 "..."을 추가한다는 것입니다. 그럼에도 불구하고 많은 요소가 있고 내용이 넘칠 것이라고 확신하는 경우이 규칙이 더 간단합니다.

내 두 센트 Justin Maxwell의 독창적 인 기술


의사 코드의 문제점은 텍스트가 오버플로되면 "..."이 여전히 잘 리거나 숨겨진다는 것입니다. 텍스트가 넘치면 "..."가 표시되기를 바랐습니다. 분명히, 그것은 사실이 아닙니다 :(
Antony

@Antony pseudo 요소를 배치하십시오. position: absolute; right: 0;( position: relative실제 요소를 작동시키는 것을 잊지 마십시오 ). 텍스트와 겹치므로 배경색도 추가 할 수 있습니다.
마지막 자녀
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.