CSS zoom: 요소 확대 및 축소

CSS zoom: 요소 확대 및 축소

CSS zoom 속성은 요소의 확대와 축소 수준을 제어합니다. transform: scale()과 비슷하지만 zoom은 레이아웃에 영향을 줍니다.

.target {
  zoom: 2;
  /* zoom: 0.5; */
  /* zoom: 120%; */
}
.circle {
  background-color: #0af;
  border-radius: 50%;
  display: inline-block;
  height: 1em;
  width: 1em;
}
<p>
  이 글의 <b class="target">굵은 글자</b>를 확대 또는 축소해보세요.
  <br>
  오른쪽의 원도 확대 또는 축소됩니다. <span class="circle target"></span>
</p>

불러오는 중...

위 예제에서 확인할 수 있듯, zoom 속성으로 크기를 조절하면 그 영향으로 다른 요소들의 위치가 바뀝니다. zoom의 크기 조절은 기본 writing-mode 속성 기준 위쪽 가운데가 원점입니다.

반면, scale()을 적용하는 경우에는 레이아웃 재계산도 없고 주위 다른 요소들도 움직이지 않습니다. scale() 후의 크기가 컨테이닝 블록보다 커지면 overflow 속성의 영향을 받습니다. 또한 scale()의 원점은 요소의 중앙이며 이를 바꾸려면 [transform-origin 속성]을 사용해야 합니다.

구문

/* 키워드 값 */
zoom: normal;

/* <percentage> 값 */
zoom: 50%;
zoom: 200%;

/* <number> 값 */
zoom: 1.1;
zoom: 0.7;

/* 전역 값 */
zoom: inherit;
zoom: initial;
zoom: revert;
zoom: revert-layer;
zoom: unset;

normal

요소를 일반 크기로 렌더링합니다. 100% 또는 1.0과 같습니다.

<percentage>

확대율을 백분율로 지정합니다. 100%보다 크면 확대, 작으면 축소입니다.

<number>

확대율을 숫자로 지정합니다. 1.0보다 크면 확대, 작으면 축소입니다.

예제

확대 컨트롤 만들기

이 예제에서는 사용자가 확대율을 직접 선택할 수 있는 인터페이스의 제작 과정을 보입니다.

HTML

제공할 확대율을 선택할 수 있는 <select>를 먼저 정의합니다.

<div class="controls">
  <label for="zoom">확대</label>
  <select id="zoom">
    <option selected value="1.0">보통</option>
    <option value="1.5">크게</option>
    <option value="2.0">더 크게</option>
  </select>
</div>

다음으로는 확대할 글을 작성합니다.

<p class="content">
  유구한 역사와 전통에 빛나는 우리 대한국민은 3ㆍ1운동으로 건립된 대한민국임시정부의 법통과 불의에 항거한 4ㆍ19민주이념을 계승하고, 조국의 민주개혁과 평화적 통일의 사명에 입각하여 정의ㆍ인도와 동포애로써 민족의 단결을 공고히 하고, 모든 사회적 폐습과 불의를 타파하며, 자율과 조화를 바탕으로 자유민주적 기본질서를 더욱 확고히 하여 정치ㆍ경제ㆍ사회ㆍ문화의 모든 영역에 있어서 각인의 기회를 균등히 하고, 능력을 최고도로 발휘하게 하며, 자유와 권리에 따르는 책임과 의무를 완수하게 하여, 안으로는 국민생활의 균등한 향상을 기하고 밖으로는 항구적인 세계평화와 인류공영에 이바지함으로써 우리들과 우리들의 자손의 안전과 자유와 행복을 영원히 확보할 것을 다짐하면서 1948년 7월 12일에 제정되고 8차에 걸쳐 개정된 헌법을 이제 국회의 의결을 거쳐 국민투표에 의하여 개정한다.
</p>
CSS

확대율은 사용자 지정 속성 --zoom-level을 활용합니다. 초기 값을 1.0으로 설정하고, 확대할 글 요소의 클래스인 .contentzoom 속성에 적용합니다.

:root {
  --zoom-level: 1.0;
}

.content {
  line-height: 1.5;
  margin: 10px auto 0;
  max-width: 60ch;
  text-indent: 4ch;
  zoom: var(--zoom-level);
}

.controls {
  text-align: center;
}
JavaScript

사용자가 <select>의 값을 바꿔 change 이벤트가 발생하면 .content--zoom-level 값을 바꾸는 코드입니다.

const zoomControl = document.querySelector('#zoom')
const content = document.querySelector('.content')

zoomControl.addEventListener('change', () => {
  content.style.setProperty('--zoom-level', zoomControl.value)
})
결과

불러오는 중...

명세

브라우저 호환성

MDN browser-compat-data
데스크톱모바일
iOSAndroid
SafariChromeFirefoxSafariChromeFirefoxSamsung Internet
zoom
The reset value

마지막 수정:

CC BY-SA 4.0 unless otherwise noted. See LICENSE.