text-overflow와 (inline-)block의 문제 해결

카테고리 IT/코딩 CSS

무찌마, 댓글

초고 2023. 8. 31.

.article-link p {
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

 

문자(text) 행(line)의 길이가 컨테이너 박스의 가로 폭을 초과할 경우에, 

폭에 맞추어 잘라내고(truncate) 말 줄임(ellipsis) 처리하는 방법입니다.

 

CSS의 text-overflow 설정 값으로는 ellipsis, clip, string, initial, inherit을 사용합니다.

 

ellipsis 예제

 

말줄임표(ellipsis)를 사용하여 초과하는 문자를 잘라낸 모습입니다.

한글 맞춤법의 말줄임표 부호 "......"와 형태가 다릅니다. 아래와 같이 임의로 지정 가능합니다.

 

text-overflow: ellipsis " [..]";
text-overflow: ellipsis "-";
text-overflow: ellipsis "......";
text-overflow: ellipsis "[...]";
text-overflow: ellipsis "[생략]";

 

(inline-)block과 함께 사용하여 문제 발생하는 경우

 

HTML:

<p>
<a href="" title="next page">&#8593;
<span>,</span></a>
</p>


CSS:

p {
	max-width: 760px;
	padding: 0 16px;
	line-height: 40px;

	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

 

위에 첨부한 이미지를 구현하기 위한 HTML과 CSS 코드입니다.

이 구문에서 <a> 링크는 텍스트의 높이가 마우스로 클릭할 수 있는 범위입니다.

 

모양을 수정하여 <a> 태그의 높이를 컨테이너 <p> 태그의 높이만큼 늘리면, 클릭할 수 있는 범위가 확장되어 모바일에서도 편한 사용자 환경을 만들 수 있습니다. 아래 이미지의 파란색 줄로 표시한 범위를 뜻합니다.

 

마우스 클릭 범위 비교

 

<a> 태그용 코드를 추가합니다.

 

p a {
	display: block;
	line-height: 40px;
}

 

inline 요소인 <a>에 높이를 지정하기 위하여 block 요소로 변경하고 40픽셀의 높이를 설정한 구문입니다. 정상적인 코드임에도 여기서는 text-overflow와 연관된 문제가 발생하였습니다.

 

text-overflow 오류 발생 사례

 

문제 발생 원인과 해결 방법

 

위 이미지와 같이 텍스트가 사라지고 말줄임표만 남았습니다. 정상이라고 오판했던 구문에 문제가 있다는 것입니다.

 

컨테이너 박스인 <p> 태그 안에서 텍스트로 인식되던 <a> 태그의 성질이 블록 박스로 변경되었기 때문입니다.

developer.mozilla.org의 "text-overflow" 페이지에 다음과 같은 설명이 있습니다.

 

The text-overflow property only affects content that is overflowing a block container element in its inline progression direction (not text overflowing at the bottom of a box, for example).

text-overflow 설정은 inline 진행 방향으로 block 컨테이너 요소의 범위를 넘어서는 (text) 컨텐트에만 영향을 미칩니다.

 

- 오류가 발생한 수정 코드에서는 <a>와 "display: block"이 결합하여 <a> 태그가 컨테이너로 성질이 변경되었습니다.

- <p> 태그에 text-overflow를 설정한 상태에서, 

- block 컨테이너로 바뀐 <a> 태그 내부의 텍스트에 영향을 미치지 못합니다.

 

<a> 태그에 높이를 설정하면서 <a> 태그 내부 텍스트에 말줄임 기능을 부여하려면 text-overflow 관련 코드를 <p> 태그에서 <a> 태그로 이동해야 합니다. 아래와 같이!

 

CSS:

p {
	max-width: 760px;
	padding: 0 16px;
	line-height: 40px;
}

p a {
	display: block;
	line-height: 40px;

	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
   
	max-width: 100%;
}

 

이 코드에서 <a> 태그에 "max-width: 100%;"를 추가한 이유가 있습니다.

 

text-overflow는 컨테이너 박스의 가로 폭을 계산하여 내부 텍스트의 끝을 말줄임표로 마감합니다. 600px, 900px와 같은 한정된 단위의 수치를 제공해야 합니다. 반응형으로 폭이 가변적일 경우 "max-width" 설정을 추가하면 문제가 발생하지 않습니다.

댓글