PC Geek's
html css에서 white-space:norwrap 이 레이아웃을 깨는 경우 (문제해결 기록) 본문
이슈
이 부분인데,
nowrap 을 normal 로 바꿔주니, 레이아웃이 안 깨지네요. 제 블로그에서 뭐가 문제인지 알아서 속시원.
(원래는 어떤 이유가 있어서 바꾸어주었고 유지했던 것인데, 그것이 여러 모로 문제를 일으키더군요. 예를들어, 이미지를 누르면 티스토리의 이미지 뷰어 레이어가 뜨는데 그것이 호환이 안 되었고, 나중에는 제가 어디를 바꿨는지도 기억못해서 방치하다 손대본 것)

생각해보면 당연한데, 이걸 생각하지 않고, width 라든가 !important 를 찾고 있었습니다.
이하 구글검색 AI모드 문답기록
width:auto !important
width: auto !important는 브라우저가 요소의 너비를 기본값(auto)으로 자동 계산하도록 강제하는 CSS 선언입니다. 다른 CSS 스타일이나 외부 라이브러리에서 지정한 고정 너비(width: 500px, width: 100% 등)를 무효화하고, 요소 본연의 크기 계산 규칙으로 되돌릴 때 주로 사용됩니다. [1, 2]
1. 작동 방식과 핵심 개념
- width: auto (자동 계산): CSS width 프로퍼티의 기본값입니다. 요소의 display 속성에 따라 다르게 작동합니다.
- !important (최우선 순위): CSS 명시도(Specificity) 규칙을 무시하고 이 선언을 무조건 최우선으로 적용하도록 만듭니다. [1, 2]
2. 주로 사용하는 상황
이 코드는 주로 기존 스타일을 '초기화'하거나 '덮어쓸 때' 해결사 역할을 합니다.
- 반응형 이미지 레이아웃 잡기:
외부 라이브러리나 과거 코드가 이미지 태그에 고정 가로세로 크기를 강제해 두었을 때, max-height나 height 조정에 맞춰 가로비율을 원본대로 자동 조절하고 싶을 때 사용합니다.cssimg { height: 200px; width: auto !important; /* 이미지 고정 너비를 해제하고 높이에 맞춰 비율 자동 계산 */ }코드를 사용할 때는 주의가 필요합니다. - 프레임워크(Bootstrap 등)나 플러그인 스타일 덮어쓰기:
Bootstrap이나 UI 플러그인이 특정 요소에 width: 100%를 강제로 부여해 레이아웃이 깨질 때, 이를 무효화하고 기본 자동 계산 방식으로 되돌려 놓습니다. [1, 2]
3. width: auto vs width: 100% 차이점
!important를 붙이기 전, auto와 100%의 차이를 명확히 아는 것이 중요합니다.

어떤 특정 레이아웃 문제(예: 이미지 깨짐, 부모 요소 밖으로 넘침 등) 때문에 이 코드를 살펴보게 되셨나요? 레이아웃이 적용되지 않는 HTML 구조나 스크린샷 상황을 알려주시면 알맞은 CSS 해결책을 찾아드리겠습니다.
html 본문 시작때 <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=5.0, user-scalable=yes" /> 를 넣었는데, width=device-width 의 역할은
width=device-width는 웹페이지의 너비를 접속한 기기(스마트폰, 태블릿 등)의 화면 스크린 너비에 맞추도록 브라우저에게 지시하는 역할을 합니다.
이 설정이 있어야 스마트폰에서 웹사이트를 열었을 때 PC 화면이 축소되어 글씨가 깨져 보이는 현상을 막고, 반응형 웹디자인(Responsive Web Design)이 올바르게 작동합니다.
1. 왜 이 설정이 필요할까요?
과거 모바일 브라우저들은 모바일 전용 페이지가 없는 일반 PC용 웹사이트를 보여주기 위해, 기본적으로 화면 너비를 데스크톱 기준(보통 980픽셀 내외)으로 가정하고 렌더링했습니다.
- width=device-width가 없을 때: 스마트폰(예: 너비 390px)으로 접속해도 브라우저는 980px짜리 화면으로 인식해 가로로 넓게 그린 뒤, 이를 390px 안에 억지로 구겨 넣습니다. 결과적으로 글씨와 이미지가 돋보기로 봐야 할 정도로 아주 작게 보입니다.
- width=device-width가 있을 때: 브라우저에게 "이 페이지는 스마트폰 화면 너비(390px)에 맞춰서 디자인되었으니, 화면 너비를 390px로 잡고 보여줘!"라고 알립니다. 덕분에 글씨 크기가 확대/축소 없이 원래 의도한 크기 그대로 읽기 편하게 표시됩니다.
2. 작성하신 뷰포트(Viewport) 코드의 전체 의미
적어주신 설정은 모바일 환경에서 매우 표준적이고 사용자 친화적인 구성입니다. 각 속성의 세부 역할은 다음과 같습니다.
- initial-scale=1.0: 페이지가 처음 로딩될 때 기본 확대/축소 비율을 100%(1:1)로 설정합니다.
- minimum-scale=1.0: 사용자가 화면을 최소한으로 축소할 수 있는 비율을 100%로 제한합니다. (더 작게 축소 안 됨)
- maximum-scale=5.0: 사용자가 화면을 최대 5배(500%)까지 확대할 수 있도록 허용합니다.
- user-scalable=yes: 사용자가 손가락으로 화면을 줌인/줌아웃(확대/축소)할 수 있도록 허용합니다. (접근성을 위해 매우 권장되는 설정입니다.)
현재 작업 중인 반응형 웹페이지에서 특정 기기(예: 아이폰, 갤럭시)나 특정 해상도에서 레이아웃이 깨지는 문제가 발생하고 있나요? 어떤 부분의 배치가 의도대로 되지 않는지 말씀해 주시면 CSS 미디어 쿼리나 레이아웃 수정 방법을 안내해 드리겠습니다.
★★★★★ white-space:nowrap;text-overflow:ellipsis 에 대해
white-space: nowrap과 text-overflow: ellipsis는 긴 텍스트가 지정된 영역을 벗어날 때, 글자가 줄바꿈되지 않도록 막고 끝부분을 말줄임표(...)로 예쁘게 잘라주는 CSS 조합입니다.
이 효과를 올바르게 구현하려면 반드시 3가지 속성이 세트로 함께 움직여야 합니다.
1. 말줄임표(...)를 만드는 필수 3대 CSS 속성
css
.ellipsis-text {
white-space: nowrap; /* 1. 줄바꿈 금지: 텍스트를 무조건 한 줄로 길게 늘어뜨립니다. */
overflow: hidden; /* 2. 넘치는 부분 숨김: 부모 영역을 벗어난 글자를 보이지 않게 자릅니다. */
text-overflow: ellipsis; /* 3. 말줄임표 표시: 잘린 끝부분에 '...'을 붙여줍니다. */
width: 200px; /* (중요) 고정 너비나 가용한 한계 너비가 지정되어 있어야 합니다. */
}
코드를 사용할 때는 주의가 필요합니다.
2. 각 속성의 세부 역할
- white-space: nowrap;
- 원래 텍스트는 박스 테두리에 닿으면 자동으로 다음 줄로 줄바꿈(normal)됩니다.
- 이 속성은 줄바꿈을 강제로 막아, 아무리 긴 문장이라도 무조건 한 줄로 옆으로 길게 이어지게 만듭니다.
- text-overflow: ellipsis;
- 잘려 나간 글자 자리(텍스트 끝부분)에 문자가 더 있다는 신호인 말줄임표(...)를 렌더링합니다.
- overflow: hidden; (필수 누락 주의!)
- text-overflow 속성은 혼자서는 작동하지 않습니다. 영역을 벗어난 요소가 '숨겨진 상태(hidden)'일 때만 브라우저가 인지하고 말줄임표를 그리기 때문에, 이 속성이 빠지면 글자가 박스 밖으로 삐져나온 채로 유지됩니다.
3. 가장 자주 하는 실수와 해결책
- width를 지정하지 않음
- 블록 요소에 너비(width 또는 max-width)를 지정하지 않거나, 부모로부터 제한받지 않으면 박스가 글자 길이에 맞춰 끝없이 늘어납니다. 박스가 늘어나니 글자가 잘리지 않고, 말줄임표도 나오지 않습니다.
- 인라인 요소(span, a 등)에 직접 적용함
- span이나 a 태그 같은 인라인 요소는 애초에 너비(width)라는 개념을 가지지 못하므로 이 효과가 먹히지 않습니다.
- 해결책: 해당 요소에 display: inline-block; 또는 display: block;을 추가하여 너비를 가질 수 있는 구조로 만들어야 합니다.
💡 보너스: 여러 줄(2줄 이상) 말줄임표가 필요할 때
만약 한 줄이 아니라 "2줄이나 3줄까지는 다 보여주고 그 뒤를 (...)로 자르고 싶다"면 아래의 웹킷(Webkit) 속성 조합을 사용해야 합니다.
css
.multi-line-ellipsis {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2; /* 원하는 줄 수 지정 (예: 2줄) */
overflow: hidden;
text-overflow: ellipsis;
/* 주의: 여러 줄 말줄임에서는 white-space: nowrap을 절대 쓰면 안 됩니다! */
}
코드를 사용할 때는 주의가 필요합니다.
지금 이 말줄임표를 표(Table) 안의 셀, 버튼 내부, 혹은 일반 리스트 항목 중 어디에 적용하고 계시나요? 특정 상황(특히 table이나 flex 레이아웃 안)에서는 추가적인 처리가 필요할 수 있으니 레이아웃 구조를 알려주시면 바로 적용 가능한 코드를 짚어드리겠습니다.
Table 안의 td 영역 안에 표시하는 li 태그
<table>의 <td> 내부에 있는 <li> 태그에 말줄임표(...)를 적용할 때는 표(table) 특유의 너비 자동 계산 메커니즘 때문에 스타일이 작동하지 않고 표가 옆으로 늘어나는 현상이 발생합니다.
이를 해결하려면 table 태그에 고정 레이아웃 속성을 주거나, <td> 내부를 블록(Block) 구조로 한 번 감싸서 너비를 제한해야 합니다. 가장 확실하고 깔끔한 2가지 해결 방법을 소개해 드립니다.
방법 1. 추천: <td> 내부에 <div>를 넣어 감싸기 (가장 안전함)
테이블 자체의 유연한 너비 조절 기능을 유지하면서 말줄임표만 깔끔하게 적용하는 가장 부작용이 적은 방법입니다. <li> 내부나 <td> 내부에 <div>를 만들고 거기에 말줄임 스타일을 부여합니다.
HTML:
html
<table>
<tr>
<td class="list-cell">
<ul>
<li>
<!-- 글자가 잘릴 영역을 div로 감싸줍니다 -->
<div class="ellipsis">여기에 아주아주 길어서 표를 뚫고 나갈 것 같은 텍스트가 들어갑니다.</div>
</li>
</ul>
</td>
</tr>
</table>
코드를 사용할 때는 주의가 필요합니다.
CSS:
css
/* td에는 최대 너비 한계선을 지정합니다 (px 또는 %) */
.list-cell {
max-width: 200px;
}
/* 실제 말줄임이 적용될 내부 div */
.ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%; /* 부모인 li와 td의 너비를 따라가도록 설정 */
}
코드를 사용할 때는 주의가 필요합니다.
방법 2. Table 자체를 고정 레이아웃(table-layout: fixed)으로 바꾸기
만약 <div>를 추가하기 어렵고 <li> 태그에 직접 CSS를 주어 해결하고 싶다면, <table> 태그의 너비 계산 방식을 고정식으로 바꾸고 <td>에 구체적인 너비를 지정해야 합니다.
HTML:
html
<table class="fixed-table">
<tr>
<td class="list-cell">
<ul>
<li class="ellipsis-li">여기에 아주아주 길어서 표를 뚫고 나갈 것 같은 텍스트가 들어갑니다.</li>
</ul>
</td>
</tr>
</table>
코드를 사용할 때는 주의가 필요합니다.
CSS:
css
/* 1. 테이블의 너비 계산 방식을 고정(fixed)으로 선언 (매우 중요) */
.fixed-table {
table-layout: fixed;
width: 100%; /* 테이블 전체 너비 지정 */
}
/* 2. td의 너비를 명확히 제한 */
.list-cell {
width: 250px;
}
/* 3. li 태그에 말줄임 속성 부여 */
.ellipsis-li {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
/* li의 기본 점(bullet)이 말줄임표와 겹치거나 사라지는 것을 방지 */
list-style-position: inside;
}
코드를 사용할 때는 주의가 필요합니다.
⚠️ 주의할 점: 리스트 점(Bullet) 위치 문제
white-space: nowrap을 <li>에 직접 쓰면 리스트 앞의 점(•)이 글자와 겹치거나 영역 밖으로 밀려 숨겨질 수 있습니다.
- 이를 깨끗하게 처리하려면 방법 1처럼 글자만 <div>나 <span>으로 감싸서 자르는 것이 시각적으로 가장 완벽합니다.
리스트의 점(•) 모양을 유지한 채로 글자만 자르고 싶으신가요, 아니면 어차피 말줄임을 할 거라 점(Bullet)은 숨겨져도(list-style: none) 상관없으신가요? 원하시는 형태를 말씀해 주시면 마진과 패딩을 조절한 맞춤 코드를 짜드리겠습니다.
============
여기까지.
'프로그램' 카테고리의 다른 글
| 스마트폰앱의 납치광고 (0) | 2026.10.17 |
|---|---|
| 구글 앱스스크립트 (0) | 2026.10.10 |
| 토스와 알리의 광고창 디자인 (0) | 2026.09.27 |
| 마이크로소프트 엣지 웹뷰2 (앱, 프로세스) 에 대해 (0) | 2026.09.22 |
| 모 온라인 서점 사이트, 개선희망점: 상품정렬 (0) | 2026.09.16 |
| 모 미니게임의, 착각을 유도하는 숫자표시와 막대그래프 (0) | 2026.09.14 |
| 우체국쇼핑몰(mall.epost.go.kr) 등 일부 국내 쇼핑몰, PC웹 화면 UI/UX/레이아웃 개선희망점: 폰트 크기 (0) | 2026.09.06 |
| 온라인몰, 반려동물 사료는 사람먹는 식품과 구별하기를. 개선희망점 (0) | 2026.08.30 |
Comments
|
Viewed Posts
|
|
Recent Posts
|
