>  기사  >  웹 프론트엔드  >  CSS 리플로우 및 다시 그리기의 원리 공개

CSS 리플로우 및 다시 그리기의 원리 공개

WBOY
WBOY원래의
2024-01-26 09:59:061161검색

CSS 리플로우 및 다시 그리기의 원리 공개

CSS 리플로우 및 리페인트의 작동 원리 해독

소개:
웹 개발 과정에서 우리는 CSS 리플로우(리플로우)와 리페인트(리페인트)라는 두 가지 개념을 자주 듣습니다. 웹 페이지 성능을 최적화하고 사용자 경험을 향상하려면 작동 방식을 이해하는 것이 중요합니다. 이 기사에서는 CSS 리플로우 및 리페인트 작동 방식을 자세히 살펴보고 독자가 이 두 가지 개념을 더 잘 이해할 수 있도록 구체적인 코드 예제를 제공합니다.

1. CSS 리플로우 작동 방식
1.1 CSS 리플로우란 무엇입니까
CSS 리플로우는 브라우저가 요소의 위치와 크기를 다시 계산하고 페이지 레이아웃을 업데이트하는 프로세스를 말합니다. 페이지에 있는 요소의 레이아웃 속성이 변경되면 CSS 리플로우가 트리거됩니다.

1.2 CSS 리플로우의 트리거 조건
다음 상황에서는 CSS 리플로우가 트리거됩니다.

  • DOM 노드가 추가, 삭제 또는 수정될 때
  • 페이지 요소의 위치, 크기 또는 스타일이 변경될 때; 창 크기가 변경될 때 ;
  • 사용자가 페이지를 스크롤할 때;
  • 브라우저 창이 변경될 때.
  • 1.3 CSS 리플로우 프로세스
CSS 리플로우 프로세스는 다음과 같습니다.


CSS 리플로우가 트리거되면 브라우저는 최상위 루트 노드부터 시작하여 DOM 트리를 탐색하고 DOM 트리의 위치와 크기를 계산합니다.
  • 특정 노드의 위치나 크기가 상위 노드나 형제 노드의 속성에 따라 달라지는 경우 이러한 노드의 위치와 크기를 다시 계산해야 합니다.
  • 모든 노드의 위치와 크기가 계산되면 브라우저는 페이지 레이아웃을 업데이트합니다.
  • 1.4 불필요한 CSS 리플로우를 방지하는 방법
웹 페이지 성능을 향상시키기 위해 불필요한 CSS 리플로우를 피할 수 있습니다. 다음은 몇 가지 일반적인 최적화 방법입니다.


테이블 레이아웃 사용을 피하고 CSS 레이아웃 모델을 사용해 보세요.
  • 잦은 DOM 작업을 피하고 여러 요소를 한 번에 수정하세요.
  • 스타일을 한 번에 변경하려면 일괄 스타일 수정을 사용하세요. 여러 요소에 적용됩니다.
  • offsetLeft, offsetTop 등과 같은 레이아웃 정보를 얻기 위해 작업을 줄입니다.
  • 2. CSS 다시 그리기 작동 방식
2.1 CSS 다시 그리기란

CSS 다시 그리기는 스타일 변경에 따라 브라우저가 페이지를 다시 그리는 프로세스를 말합니다. 페이지에 있는 요소의 스타일 속성이 변경되면 CSS 다시 그리기가 트리거됩니다.

2.2 CSS 다시 그리기의 트리거 조건

다음 상황에서는 CSS 다시 그리기가 트리거됩니다.


요소의 배경색, 글꼴 색상, 테두리 색상 및 기타 스타일 속성을 변경할 때
  • 스타일을 추가, 삭제 또는 수정할 때; sheet;
  • 요소의 가시성을 변경할 때.
  • 2.3 CSS 다시 그리기 프로세스
CSS 다시 그리기 프로세스는 다음과 같습니다.


CSS 다시 그리기가 트리거되면 브라우저는 요소의 새 스타일에 따라 요소를 다시 그립니다. 그려진 요소 비트맵을 기반으로 요소를 생성한 후 화면에 표시합니다.
  • 2.4 불필요한 CSS 다시 그리기를 방지하는 방법
  • 웹 페이지 성능을 향상시키기 위해 불필요한 CSS 다시 그리기를 피할 수 있습니다. 다음은 몇 가지 일반적인 최적화 방법입니다.

요소 스타일을 개별적으로 수정하는 대신 클래스 선택기를 사용합니다.

자주 변경되는 스타일 속성을 함께 병합하고 모두 한 번에 수정합니다.
  • JavaScript 애니메이션 대신 CSS 애니메이션을 사용합니다. 요소의 스타일 속성을 변경하면 다시 그려집니다.
  • CSS 표현식을 사용하지 마세요.
  • 3. 코드 예제
  • 다음은 불필요한 CSS 리플로우 및 다시 그리기를 방지하는 방법을 보여주는 간단한 코드 예제입니다.
  • <!DOCTYPE html>
    <html>
    <head>
      <style>
      .box {
        width: 100px;
        height: 100px;
        background-color: red;
        transition: width 1s;
      }
      </style>
    </head>
    <body>
      <div class="box"></div>
      <button onclick="changeWidth()">改变宽度</button>
      <script>
        function changeWidth() {
          var box = document.querySelector('.box');
          // 触发一次CSS回流和重绘
          box.style.width = '200px';
        }
      </script>
    </body>
    </html>
위 코드에서 상자 너비를 변경하기 위해 버튼을 클릭하면

속성 사용으로 인해 브라우저가 CSS 애니메이션을 사용하여 너비 변경을 전환하므로 CSS 리플로우와 다시 그리기가 하나만 트리거됩니다. , 성능이 향상됩니다.

결론:

이 문서에서는 CSS 리플로우 및 리페인트 작동 방식을 심층적으로 해독하고 특정 코드 예제를 제공합니다. 이 두 가지 개념이 어떻게 작동하는지 이해함으로써 웹 페이지 성능을 최적화하고 사용자 경험을 향상시킬 수 있습니다. 나는 독자들이 이 지식을 활용하여 고성능 웹 페이지를 더 잘 개발할 수 있기를 바랍니다. transition

위 내용은 CSS 리플로우 및 다시 그리기의 원리 공개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.