웹 프론트엔드 CSS 튜토리얼 CSS 다시 그리기 및 재배열의 예

CSS 다시 그리기 및 재배열의 예

Mar 12, 2018 am 10:08 AM
css

이 글은 주로 CSS reraw 및 reflowing 방법에 대한 관련 정보를 소개합니다. 편집자는 이것이 꽤 좋다고 생각하므로, 여러분에게 도움이 되기를 바라며 지금 공유하겠습니다.

브라우저 로딩 페이지의 원리

일반적으로 문서가 처음 로드될 때 브라우저 엔진은 HTML 문서를 구문 분석하여 DOM 트리를 구축한 다음 DOM 요소의 기하학적 속성을 기반으로 렌더링을 위한 트리를 구축합니다. 렌더링 트리의 각 노드에는 상자 모델과 유사한 크기 및 여백과 같은 속성이 있습니다(숨겨진 요소는 표시할 필요가 없으므로 렌더링 트리에는 DOM 트리의 숨겨진 요소가 포함되지 않습니다). 렌더링 트리가 구성되면 브라우저는 요소를 올바른 위치에 배치한 다음 렌더링 트리 노드의 스타일 속성을 기반으로 페이지를 그릴 수 있습니다. 브라우저의 흐름 레이아웃으로 인해 렌더링 트리 계산은 일반적으로 한 번만 통과하면 됩니다. 테이블과 내부 요소를 제외하고 렌더링 트리에서 노드의 속성을 결정하려면 여러 계산이 필요할 수 있으며 이는 일반적으로 동등한 요소에 비해 3배의 시간이 걸립니다. 이것이 레이아웃에 테이블을 사용하지 말아야 하는 이유 중 하나입니다.

Redraw

다시 그리기는 가시성, 윤곽선, 배경색 등의 속성 변경과 같이 요소 모양의 변경으로 인해 발생하는 브라우저 동작입니다. 브라우저는 새 속성을 기반으로 요소를 다시 그려 요소에 새로운 모양을 부여합니다. 다시 그리기는 다시 레이아웃을 가져오지 않으며 반드시 리플로우를 동반하지도 않습니다. 브라우저는 다시 그리고 리플로우할 때 높은 성능 비용을 지불합니다.

재배열

재배치는 더욱 분명한 변화로, 렌더링 트리를 다시 계산해야 한다는 의미로 이해될 수 있습니다. 다음은 리플로우를 트리거하는 일반적인 작업입니다.

  1. DOM 요소의 기하학 속성 변경.

  2. DOM 트리의 구조적 변화.

예: 추가, 삭제, 노드 이동 등

특정 속성을 가져옵니다.

일부 속성을 가져올 때 브라우저는 올바른 값을 얻기 위해 리플로우도 트리거합니다. 이로 인해 브라우저의 최적화가 효과적이지 않게 됩니다. 이러한 속성에는 offsetTop, offsetLeft, offsetWidth, offsetHeight, scrollTop, scrollLeft, scrollWidth, scrollHeight, clientTop, clientLeft, clientWidth, clientHeight, getCompulatedStyle()(IE의 currentStyle)이 포함됩니다. 따라서 이러한 값은 여러 번 사용될 때 캐시되어야 합니다.

또한 요소의 일부 스타일 변경, 브라우저 창 크기 조정, 스크롤 막대 표시 등도 리플로우를 트리거합니다.

재정렬 횟수 및 재정렬 효과 범위 줄이기

1. 스타일 속성을 변경하는 여러 작업을 하나의 작업으로 결합합니다. 예를 들어


JS:
    var changep = document.getElementById(‘changep’);
    changep.style.color = ‘#093′;
    changep.style.background = ‘#eee';
    changep.style.height = ‘200px';
    可以合并为:
CSS:
    p.changep {
        background: #eee;
        color: #093;
        height: 200px;
    }
JS:
    document.getElementById(‘changep’).className = ‘changep';
로그인 후 복사

2. 여러 번 재정렬해야 하는 요소의 위치 속성을 절대 또는 고정으로 설정하면 이 요소가 문서 흐름에서 벗어나 변경 사항이 다른 요소에 영향을 미치지 않습니다. 예를 들어 애니메이션 효과가 있는 요소는 절대 위치로 설정하는 것이 가장 좋습니다.

3. 메모리에서 노드를 여러 번 작동시킨 후 완료 후 문서에 추가합니다. 예를 들어 테이블 데이터를 비동기적으로 가져와 페이지에 렌더링하려고 합니다. 루프에 각 행을 추가하는 대신 먼저 데이터를 얻은 다음 메모리에 전체 테이블의 HTML 조각을 작성한 다음 문서에 한 번에 추가할 수 있습니다.

4. 표시 속성이 없음인 요소는 렌더링 트리에 없으므로 숨겨진 요소에 대한 작업으로 인해 다른 요소가 재배열되지 않습니다. 요소에 대해 복잡한 작업을 수행하려는 경우 먼저 요소를 숨긴 다음 작업이 완료된 후 표시할 수 있습니다. 숨기고 표시할 때 리플로우가 2번만 트리거됩니다.

5. 브라우저 리플로우를 유발하는 속성 값을 자주 검색해야 하는 경우 이를 변수에 캐시해야 합니다.

관련 권장 사항:

페이지 다시 그리기 및 리플로우를 위한 최적화 방법

고성능 WEB 개발 페이지 프리젠테이션, 다시 그리기, 리플로우.

js는 썸네일을 생성한 다음 이를 업로드하고 canvas_javascript 기술을 사용하여 다시 그립니다

위 내용은 CSS 다시 그리기 및 재배열의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

vue에서 자리 표시자는 무엇을 의미합니까? vue에서 자리 표시자는 무엇을 의미합니까? May 07, 2024 am 09:57 AM

Vue.js에서 placeholder 속성은 사용자가 콘텐츠를 입력하지 않을 때 표시되는 입력 요소의 자리 표시자 텍스트를 지정하고 입력 팁이나 예제를 제공하며 양식 접근성을 향상시킵니다. 사용법은 입력 요소에 자리 표시자 속성을 설정하고 CSS를 사용하여 모양을 사용자 정의하는 것입니다. 모범 사례에는 입력과 관련성, 짧고 명확함, 기본 텍스트 방지, 접근성 고려 등이 포함됩니다.

js에서 스팬은 무엇을 의미하나요? js에서 스팬은 무엇을 의미하나요? May 06, 2024 am 11:42 AM

스팬 태그는 텍스트에 스타일, 속성 또는 동작을 추가할 수 있습니다. 색상 및 글꼴 크기와 같은 스타일을 추가하는 데 사용됩니다. ID, 클래스 등의 속성을 설정합니다. 클릭, 호버 등과 같은 관련 동작 추가 처리 또는 인용을 위해 텍스트를 표시합니다.

js에서 rem은 무엇을 의미합니까? js에서 rem은 무엇을 의미합니까? May 06, 2024 am 11:30 AM

CSS의 REM은 루트 요소(html)의 글꼴 크기에 상대적인 단위입니다. 여기에는 다음과 같은 특징이 있습니다. 루트 요소의 글꼴 크기를 기준으로 하며 상위 요소의 영향을 받지 않습니다. 루트 요소의 글꼴 크기가 변경되면 REM을 사용하는 요소가 그에 따라 조정됩니다. 모든 CSS 속성과 함께 사용할 수 있습니다. REM 사용의 장점은 다음과 같습니다. 반응성: 다양한 장치 및 화면 크기에서 텍스트를 읽을 수 있도록 유지합니다. 일관성: 웹사이트 전체에서 글꼴 크기가 일관되게 유지되어야 합니다. 확장성: 루트 요소 글꼴 크기를 조정하여 전역 글꼴 크기를 쉽게 변경할 수 있습니다.

Vue에 이미지를 삽입하는 방법 Vue에 이미지를 삽입하는 방법 May 02, 2024 pm 10:48 PM

Vue에 이미지를 도입하는 방법에는 URL, 필수 함수, 정적 파일, v-bind 지시어 및 CSS 배경 이미지 등 5가지 방법이 있습니다. 동적 이미지는 Vue의 계산된 속성이나 리스너에서 처리할 수 있으며, 번들 도구를 사용하여 이미지 로딩을 최적화할 수 있습니다. 경로가 올바른지 확인하세요. 그렇지 않으면 로딩 오류가 나타납니다.

스팬 태그의 기능은 무엇입니까 스팬 태그의 기능은 무엇입니까 Apr 30, 2024 pm 01:54 PM

SPAN 태그는 스타일, 색상, 글꼴 크기 등의 속성을 적용하여 텍스트를 강조 표시하는 데 사용되는 인라인 HTML 태그입니다. 여기에는 텍스트 강조, 텍스트 그룹화, 호버 효과 추가 및 동적인 콘텐츠 업데이트가 포함됩니다. 강조하려는 텍스트 주위에 <span>, </span> 태그를 배치하여 사용하며, CSS 스타일링이나 JavaScript를 통해 조작됩니다. SPAN 태그의 이점에는 의미의 명확성, 스타일 유연성 및 유지 관리 용이성이 포함됩니다.

js에서 프롬프트를 래핑하는 방법 js에서 프롬프트를 래핑하는 방법 May 01, 2024 am 06:24 AM

JavaScript에서 프롬프트() 메서드를 사용할 때 다음 세 가지 방법을 통해 줄 바꿈을 수행할 수 있습니다. 1. 줄을 끊으려는 위치에 "\n" 문자를 삽입합니다. 2. 줄 바꿈 문자를 사용합니다. 프롬프트 텍스트; 3. CSS의 "white" -space: pre" 스타일을 사용하여 줄바꿈을 강제합니다.

브라우저 플러그인은 어떤 언어로 작성되어 있나요? 브라우저 플러그인은 어떤 언어로 작성되어 있나요? May 08, 2024 pm 09:36 PM

브라우저 플러그인은 일반적으로 다음 언어로 작성됩니다. 프런트엔드 언어: JavaScript, HTML, CSS 백엔드 언어: C++, Rust, WebAssembly 기타 언어: Python, Java

js의 노드 란 무엇입니까? js의 노드 란 무엇입니까? May 07, 2024 pm 09:06 PM

노드는 HTML 요소를 나타내는 JavaScript DOM의 엔터티입니다. 이는 페이지의 특정 요소를 나타내며 해당 요소에 액세스하고 조작하는 데 사용될 수 있습니다. 일반적인 노드 유형에는 요소 노드, 텍스트 노드, 주석 노드 및 문서 노드가 포함됩니다. getElementById()와 같은 DOM 메서드를 통해 노드에 액세스하고 속성 수정, 하위 노드 추가/제거, 노드 삽입/교체, 노드 복제 등의 작업을 수행할 수 있습니다. 노드 순회는 DOM 구조 내에서 탐색하는 데 도움이 됩니다. 노드는 페이지 콘텐츠, 이벤트 처리, 애니메이션 및 데이터 바인딩을 동적으로 생성하는 데 유용합니다.

See all articles