반응형 레이아웃을 만들 때, 디자인 시안에서 받은 px 단위를 그대로 쓰면 화면이 줄어들 때 위치나 크기가 틀어진다.
그래서 퍼센트 단위로 변환해두면 화면 크기가 줄어도 같은 비율을 유지할 수 있다.
공식을 적용하기 전에 “요소”와 “기준”의 의미부터 확실히 알아야 한다.
요소(Element)
퍼센트로 바꾸고 싶은 대상 값
left, right, top, bottom기준(Base)
그 요소가 속해 있는 전체 크기
쉽게 말해, “요소 ÷ 기준 = 퍼센트” 구조다.
퍼센트(%) = (요소 px 값 ÷ 기준 px 값) × 100
(250 ÷ 448) × 100 = 55.8%
→ w-[55.8%]
(298 ÷ 448) × 100 = 66.5%
→ w-[66.5%]
(10 ÷ 448) × 100 = 2.2%
→ left-[2.2%]
(13 ÷ 163) × 100 = 8.0%
→ top-[8%]
(15 ÷ 652) × 100 = 2.3%
→ -bottom-[2.3%]
<div className="absolute -bottom-[2.3%] w-[55.8%] aspect-[250/163]">
<div className="relative aspect-[250/163]">
<Image
src="/images/speech-bubble-up.svg"
alt="speech-bubble-up"
fill
className="object-cover"
/>
<div className="absolute top-[8%] left-[4%] w-[70%]
flex flex-col justify-between items-center
text-[clamp(12px,3.6vw,16px)]">
<span>이제 본격적으로</span>
<span>{`${"ㄴㅇㄹ"}님의 사주팔자를`}</span>
<span>분석해볼 차례네요</span>
</div>
</div>
</div>
시안에서 글자가 16px이라면, 그대로 고정하면 반응형에서 균형이 안 맞는다.
text-[3.6vw] // 16px ÷ 448px × 100 ≈ 3.6vw
단점: 큰 화면에선 너무 커짐
text-[clamp(12px,3.6vw,16px)]
글자를 16px로 고정해두고, 말풍선 전체를 transform: scale()로 줄인다.
텍스트와 이미지가 1:1 비율로 같이 축소됨.
clamp()를 활용하면 가독성과 반응성을 동시에 잡을 수 있다