Javascript + CSS에서 여러 줄 텍스트 생략
실현하고 싶은 것
jQuery를 사용하지 않고 여러 줄 텍스트 끝에 "..."를 붙이고 싶습니다.
자주 있는 처리인데 잊기 쉽기 때문에 비망록.
TL;DR
htps : // p ぁ y 여기. 이오/484998
참고
클래스메소드 씨의 기사를 바탕으로 Vanilla JS로 다시 작성했습니다.
클래스 메소드 씨, 항상 감사합니다.
htps : // v.ぁsss d. jp / ria / st rin g-p ぁse-c s-an d-j 쿠 ry /
코드
index.html
<div class="wrap">
<p class="ellipsis">
あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、
うつくしい森で飾られたモリーオ市、
郊外のぎらぎらひかる草の波。
</p>
</div>
ellipsis.css
.ellipsis {
width: 296px;
height: 48px;
font-size: 16px;
overflow: hidden;
}
ellipsis.js
const target = document.getElementsByClassName("ellipsis")[0];
let text = target.innerHTML;
const clone = target.cloneNode(true);
clone.style.visibility = "hidden";
clone.style.position = "absolute";
clone.style.overflow = "visible";
clone.style.width = `${target.clientWidth}px`;
clone.style.height = "auto";
target.insertAdjacentElement("afterend", clone);
while((text.length > 0) && (clone.clientHeight > target.clientHeight)) {
text = text.substr(0, text.length - 1);
clone.innerHTML = `${text}...`;
}
target.innerHTML = clone.innerHTML;
clone.parentNode.removeChild(clone);
해설
▶︎ 아무것도 하지 않은 상태
ellipsis.css
.ellipsis {
width: 296px;
font-size: 16px;
}
▶︎ 높이를
height: 48px;
로 지정하고 요소에서 튀어나온 텍스트를 overflow: hidden;
로 숨기기ellipsis.css
.ellipsis {
width: 296px;
height: 48px;
font-size: 16px;
overflow: hidden;
}
▶︎JS 처리 추가
텍스트의
<p>
요소를 복제해, 직후에 추가ellipsis.js
const target = document.getElementsByClassName("ellipsis")[0];
let text = target.innerHTML;
const clone = target.cloneNode(true);
clone.style.visibility = "hidden"; // display: "none"だとclientHeightが取得できない
clone.style.position = "absolute";
clone.style.overflow = "visible";
clone.style.width = `${target.clientWidth}px`;
clone.style.height = "auto";
target.insertAdjacentElement("afterend", clone);
▶︎ 복제된 요소를 추가한 상태
▶︎ 복제된 요소의
height
가 원래 요소의 height
아래로 떨어질 때까지 문자를 줄입니다.ellipsis.js
while((text.length > 0) && (clone.clientHeight > target.clientHeight)) {
text = text.substr(0, text.length - 1);
clone.innerHTML = `${text}...`;
}
▶︎복제한 요소의 텍스트를 원래의 요소에 대입, 복제 요소는 불필요하므로 삭제
ellipsis.js
target.innerHTML = clone.innerHTML;
clone.parentNode.removeChild(clone);
복제 요소도 제대로 제거되었습니다
Reference
이 문제에 관하여(Javascript + CSS에서 여러 줄 텍스트 생략), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Nakadate_Satoshi/items/8669c72ae59b2f37266c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)