본문 바로가기
프론트엔드 HTML CSS JAVASCRIPT

[HTML, JAVASCRIPT, CSS] 마우스 오버 시 HTML 요소(이미지, div 등) 확대(zoomIn) 하는 방법. 옆에 요소 안밀려나게/밀려나게

by jaewooojung 2019. 8. 18.

HTML JAVASCRIPT CSS


HTML에서 마우스 오버 시 요소를 확대, 축소하는 방법입니다.

확대, 축소는 아래와 같이 자바스크립트로 CSS를 직접 제어하여 구현할 수도 있지만

function zoomIn(event) {
  event.target.style.width = "600px";
}
<img src="/image.jpg" onmouseenter="zoomIn(event)" />

 

이 작업은 CSS class의 변경만으로도 구현이 가능한 작업이기 때문에 위와 같이 JAVASCRIPT로 style을 직접 제어하지는 않겠습니다.

 

자바스크립트로 style을 직접 제어하게 되면 요소에 인라인 스타일이 적용되는데, 이후의 코드 관리와 확장성에 부정적인 영향을 끼치는 경우가 많습니다.

 

예를 들면 inline 스타일은 요소에 적용되는 여러 가지 스타일 중에서 가장 우선순위가 높기 때문에, 이후에 다른 class로 스타일을 적용했을 때 특정 프로퍼티가 inline 스타일에 의해 적용되지 않을 수 있습니다.

 

 

CSS를 이용해서 div를 확대, 축소하기

1. transform scale 활용

<!DOCTYPE html>
<html>
  <head>
    <style>
      .small {
        width: 100px;
        height: 100px;
      }
      .scale-up {
        transform: scale(1.3);
      }
      .bg-blue {
        background: blue;
      }
      .bg-green {
        background: green;
      }
      .bg-red {
        background: red;
      }
    </style>
  </head>
  <body>
    <div>
      <div class="small bg-blue" onmouseenter="zoomIn(event)" onmouseleave="zoomOut(event)"></div>
      <div class="small bg-green" onmouseenter="zoomIn(event)" onmouseleave="zoomOut(event)"></div>
      <div class="small bg-red" onmouseenter="zoomIn(event)" onmouseleave="zoomOut(event)"></div>
    </div>
    <script>
      function zoomIn(event) {
        event.target.classList.add("scale-up");
      }
      function zoomOut(event) {
        event.target.classList.remove("scale-up");
      }
    </script>
  </body>
</html>

 

마우스 오버 시 transform 속성과 scale 값을 활용하여 요소를 1.3배 확대하고, 마우스 leave 시에 다시 1배로 축소합니다. transform은 요소의 레이아웃을 변경하지 않고 해당 요소의 크기만 확대, 축소하기 때문에 아래 예시와 같이 다른 요소에 영향을 주지 않고 확대, 축소됩니다. (=> 밀려나지 않음)

 

(직접 마우스를 오버해 보세요)

 

 

 

2. width, height 조절

<!DOCTYPE html>
<html>
  <head>
    <style>
      .small {
        width: 100px;
        height: 100px;
      }
      .big {
        width: 130px;
        height: 130px;
      }
      .bg-blue {
        background: blue;
      }
      .bg-green {
        background: green;
      }
      .bg-red {
        background: red;
      }
    </style>
  </head>
  <body>
    <div>
      <div class="bg-blue small" onmouseenter="zoomIn(event)" onmouseleave="zoomOut(event)"></div>
      <div class="bg-green small" onmouseenter="zoomIn(event)" onmouseleave="zoomOut(event)"></div>
      <div class="bg-red small" onmouseenter="zoomIn(event)" onmouseleave="zoomOut(event)"></div>
    </div>
    <script>
      function zoomIn(event) {
        event.target.classList.add("big");
      }
      function zoomOut(event) {
        event.target.classList.remove("big");
      }
    </script>
  </body>
</html>

 

이번엔 요소의 width와 height를 직접 크게 설정하였습니다. width와 height가 변경되면 해당 요소가 위치한 레이아웃에 영향을 주기 때문에 인접한 요소들이 양쪽으로 밀려나면서 확대되는 모습을 확인할 수 있습니다. (=> 밀려남)

 

(직접 마우스를 오버해 보세요)



        
답변을 생성하고 있어요.