>웹 프론트엔드 >CSS 튜토리얼 >CSS 박스 그림자를 애니메이션하고 성능을 최적화하는 방법

CSS 박스 그림자를 애니메이션하고 성능을 최적화하는 방법

Joseph Gordon-Levitt
Joseph Gordon-Levitt원래의
2025-02-11 08:24:10930검색

CSS 박스 그림자를 애니메이션하고 성능을 최적화하는 방법 이 기사에서는 브라우저 성능을 줄이지 않고 CSS 박스 그림자를 애니메이션하는 방법을 배웁니다. CSS에서 Box-Shadow 속성은 웹 요소에 그림자를 추가하는 데 사용되며 이러한 그림자는 애니메이션 할 수 있습니다. 그러나 섀도우 애니메이션은 브라우저의 성능에 영향을 줄 수있어 페이지를 렌더링 할 때 지연됩니다.

이 안내서는 HTML에 대한 실무 지식과 CSS 애니메이션을 갖춘 프론트 엔드 개발자를위한 것입니다. 키 테이크 아웃

CSS 박스 그림자 애니메이션은 브라우저 성능에 영향을 줄 수 있으므로 페이지 렌더링 중에 지연 될 수 있습니다. 따라서 빠른 페이지로드 시간을 유지하기 위해 이러한 애니메이션을 최적화하는 것이 중요합니다. 이는 사용자 만족도 및 전환율의 핵심 요소입니다. CSS Box-Shadow 애니메이션은 페인팅, 레이아웃 및 합성의 세 가지 주요 프로세스를 트리거합니다. 브라우저를 색상으로 픽셀로 채우는 그림은 가장 자원 집약적입니다. 페이지의 구조를 재 계산하는 레이아웃 변경도 상당한 자원을 소비합니다. 페이지의 일부에만 영향을 미치는 합성은 가장 까다로운 프로세스입니다.

성능을 최적화하기 위해 개발자는 여러 기술을 채택 할 수 있습니다. 여기에는 오프셋 값을 변경하는 대신 그림자의 불투명도 만 애니메이션하는 것이 포함되며, 이는 다시 페인팅의 필요성을 줄입니다. 애니메이션 할 때 놀랍게도 더 잘 수행되는 여러 박스 샤 두층 사용; 그림자를 제공하는 의사 요소를 애니메이션하여 리페이 팅량과 전체 CPU 워크로드의 양을 크게 줄입니다. CPU 워크로드를 줄이기 위해 그림자 애니메이션을 최소화하고 애니메이션 대화 형 요소 만 유지하는 것이 중요합니다. 섀도우 애니메이션이 필요한 경우 개발자는 깊이의 시각적 매력과 불투명도 만 변경하는 성능 이점 사이의 트레이드 오프를 평가해야합니다. 또한 그림자를 제공하는 의사 요소를 애니메이션하는 데 필요한 추가 코드를 고려해야합니다.

왜 이것이 중요한지

웹 페이지는 이상적으로 5 초 미만의로드 시간이 매우 짧아 야합니다. 연구에 따르면 빠른 페이지 로딩이 전환율을 크게 향상시킵니다. 추가 연구에 따르면 사용자의 70%가 웹 사이트의 속도가 온라인 상점에서 구매하려는 의지에 영향을 미친다고 말합니다. 기본적으로 빠른 사이트는 행복한 사용자와 같습니다 더 나아 가기 전에 다음은 웹 페이지에서 Box-Shadow 애니메이션이 작동하는 방법의 데모입니다. 웹 요소를 스크롤하고 상호 작용할 수 있습니다.

를 참조하십시오 sitepoint (@sitepoint) 에 의한 그림자 애니메이션이있는 웹 요소 Codepen에서.

    3 개의 주요 CSS 박스 상자 그림자 애니메이션 이벤트

    무대 뒤에서 일어나는 일 때문에 CSS Box-Shadow 애니메이션은 리소스가 많을 수 있습니다. Box Shadow 애니메이션 (또는 그 문제에 대한 모든 형태의 애니메이션) 중에 트리거되는 세 가지 주요 프로세스 또는 이벤트가 있습니다. 이 이벤트는 페인팅, 레이아웃 및 합성입니다

    그림. 그림에서 브라우저는 픽셀을 색상으로 채우고 Box-Shadow는이 이벤트를 트리거하는 CSS 속성 중 하나입니다. 기본적으로 애니메이션의 모든 프레임에 새 그림자를 만듭니다. Mozilla에 따르면 이상적인 CSS 애니메이션은 60fps로 실행됩니다.
    • 레이아웃. 일부 애니메이션은 페이지의 구조를 변경하여 많은 스타일의 재 계산으로 이어질 수 있습니다. 좋은 예는 확장 할 때 다른 요소를 밀어내는 사이드 바입니다. 이를 유발하는 CSS 속성에는 패딩, 여백, 테두리가 포함됩니다. 간단히 말하면, 애니메이션 속성이 다른 요소에 영향을 미치면 페이지의 레이아웃이 변경되어 다시 계산이 변경됩니다. 이는 많은 시스템 리소스를 사용합니다.
    • <.> 복합. 합성에서는 페이지의 일부만 변경됩니다. 불투명도 및 변환과 같은 CSS 속성은 적용되는 요소에만 영향을 미칩니다. 이는 스타일 재 계산이 적고 더 부드러운 애니메이션을 의미합니다. 합성은 세 가지 중에서 가장 적은 작업 프로세스입니다.

      브라우저의 검사관 도구를 사용하면이 프로세스를 실시간으로 관찰 할 수 있습니다. 먼저, 검사관 도구를 열고 (Chrome은 아래 그림) 탭의 오른쪽 상단에있는 3 개의 점을 클릭하십시오. 더 많은 도구를 확인하고 렌더링을 선택하십시오

    • 이 예에서는 페인트 깜박임이 선택됩니다. 페인팅 이벤트가있을 때마다 화면이 녹색으로 플래시됩니다 :
    • NAVBAR :

      <:> 텍스트 카드 :
    • NAV 링크 :

      그림자가있는 모든 요소가 호버링되거나 페이지를 새로 고침 할 때 녹색으로 깜박임을 알 수 있습니다. 레이아웃으로 동일한 실험을 할 수도 있습니다. 페인트 깜박임을 선택 취소하고 레이아웃 시프트 영역을 선택하십시오. 페인트 깜박임은 Codepen 데모에서는 작동하지 않을 수 있으므로 텍스트 편집기의 라이브 미리보기로 시도해보십시오. 아래 비디오는 당신이 무엇을 볼 것인지를 보여줍니다.

      CSS 박스 그림자를 애니메이션하고 성능을 최적화하는 방법

      목표는 더 많은 시스템 리소스를 사용하기 때문에 페인팅 및 레이아웃 변경을 최소화하는 것입니다. 성능 점검

      개발자로서 빠른 컴퓨터가 있기 때문에 그림자 애니메이션을 실행하는 문제가 없을 수 있습니다. 그러나 PC 속도가 느리고 신뢰할 수없는 인터넷 연결을 가진 사용자를 고려해야합니다. 컴퓨터에서 좋아 보인다고해서 다른 곳과 동일하다는 의미는 아닙니다.

      박스 샤도에는 4 개의 값과 색상이 있습니다. 이 네 가지 값은 그림자의 수평 위치 (X-OffeSSet), 수직 위치 (y- 오프셋), 스프레드 및 블러 반경입니다. 일반적인 섀도우 애니메이션에는 이러한 값 중 하나 이상의 변화가 포함됩니다.

      html로 시작하여 간단한 박스 샤 두어 애니메이션을 만들어 봅시다 :

      그리고 초기 및 최종 그림자에 대한 CSS는 다음과 같습니다.

      결과는 다음과 같습니다.

      <span>box-shadow: <x-offset> <y-offset> <spread> <blur> <color>;
      </span>
      를 참조하십시오 sitepoint (@sitepoint) 에 의한 애니메이션 박스 쉐이드 Codepen에서.

      애니메이션의 경우 Y- 오프셋, 블러 및 스프레드의 값을 변경하고 있습니다. 우리는 또한 더 투명한 최종 그림자로 가고 있습니다.
      <span><span><span><body</span>></span>
      </span>  <span><span><span><div</span> class<span>="box"</span>></span><span><span></div</span>></span>
      </span><span><span><span></body</span>></span>
      </span>
      이제이 0.5 년대 애니메이션을 실행하면서 무대 뒤에서 무슨 일이 일어나고 있는지 살펴 보겠습니다. 브라우저에서 검사를 마우스 오른쪽 버튼으로 클릭하고 선택하여 개발자 도구를 엽니 다. 도구가 열리면 성능 탭으로 이동하십시오. 그림자 애니메이션을 녹음 할 수 있습니다. 몇 초만에 무슨 일이 일어나고 있는지 알기에 충분합니다.

      아래의 스크린 샷은 Chrome의 DevTools에서 찾을 수있는 내용을 보여줍니다.

      <span><span>.box</span> {
      </span>  <span>box-shadow: 0px 5px 10px 0px <span>rgba(0, 0, 0, 0.5)</span>;
      </span>  <span>transition: transform ease 0.5s, box-shadow ease 0.5s;
      </span><span>}
      </span><span><span>.box:hover</span> {
      </span>  <span>transform: translateY(-5px);
      </span>  <span>box-shadow: 0px 10px 20px 2px <span>rgba(0, 0, 0, 0.25)</span>;
      </span><span>}
      </span>
      섀도우의 애니메이션 기간 인 호버링 위아래로 위아래로 강조 표시되며, 발생하는 프로세스의 고장이 바닥에 표시됩니다. 고장은 스크립팅이 7ms, 렌더링은 55ms, 페인팅은 30ms에 지속되는 것을 보여줍니다. 이제, 그 숫자는 괜찮아 보이지만 CPU가 4 배 느려지면 어떻게됩니까? 성능 탭에서 CPU 속도를 스로틀 할 수 있습니다.

      다음 이미지는 더 느린 CPU로 동일한 애니메이션을 실행할 때 어떤 일이 발생하는지 보여줍니다.

      이 새로운 프로세스에서로드는 6ms가 걸립니다. 스크립팅은 최대 52ms, 렌더링은 117ms로 두 배 이상 증가했으며 그림은 72ms입니다. 당신은 네트워크 속도를 스로틀 속도로 만들고 CPU를 더 느리게 만들 수 있습니다. 섀도우 애니메이션은 많은 시스템 리소스를 사용하며 일부 부하를 제거 할 것입니다. 변환 속성이 ​​CPU의 수행 방식에 참여한다는 점에 유의해야합니다. 나중에 이것에 대해 자세히 알아보십시오. 최적의 성능을 유지하는 방법

      웹 페이지에서 그림자를 애니메이션해야한다면 더 성능을 발휘할 가치가 있습니다. 이 섹션에서는 그림자 애니메이션을 조정하여 성능이 줄어드는 다양한 방법을 배울 수 있습니다. 우리는 다음을 다룰 것입니다 :

      애니메이션 불투명도 여러 상자 층 레이어가있는

      유사 요소를 애니메이션하는

      변환 속성 사용

      애니메이션 불투명도 RGBA 색상을 사용할 때 알파 채널은 불투명도를 제어합니다. 그림자를 애니메이션 할 때 알파 채널 만 변경하면 CPU에서 그림자의 오프셋 및 스프레드 값을 변경하는 것만 큼 어렵지 않습니다.

      첫 번째 애니메이션에서는 그림자의 불투명도 만 변경되고 있으며 두 번째로 Y- 오프셋은 10px에서 20px로 변경되고 스프레드는 20px에서 40px로 변경됩니다. 그리고 불투명도 만 변경되는 애니메이션부터 시작하여 6 배 속도로 (성능 그래프를 명확하게 볼 수 있음) 수행 방법은 다음과 같습니다.
      1. 상자를 켜고 끄는 데 약 2 초가 걸립니다. 이제 이것을 두 번째 그림자 애니메이션과 비교하십시오
      2. 다시, 2 초 켜지고 꺼지고 모든 이벤트에 대한 시간이 눈에 띄게 증가합니다. 그림은 전 96ms였으며 이제는 187ms로 두 배가되었습니다. 합성의 일부인 렌더링도 97ms에서 178ms입니다. 따라서 그림자의 불투명도 만 변경하면보다 성능이 좋은 애니메이션이 생성됩니다.
      3. 이 두 애니메이션의 라이브 데모는 다음과 같습니다
      4. 를 참조하십시오 itepoint (@sitepoint) 에 의한 애니메이션 불투명도 대 애니메이션 오프셋 Codepen에서.

      층 그림자 테이블 주위의 그림자를 관찰하거나 그 위의 물체를 들어 올리면 가장 어두운 그림자 영역이 물체에 가장 가까워지고 바깥쪽으로 퍼져서 점점 더 가벼워집니다.

      . 이 효과를 복제하는 것은 하나의 박스 섀도우에서 쉽지 않습니다. 계층화 된 그림자가 훨씬 좋아 보입니다. 또한 그림자 레이어가 추가 된 상태에서도 더 성능이 좋은 애니메이션을 생성합니다. 단일 박스 섀도우의 성능과 다층 그림자의 성능을 비교해 봅시다 :

      이 애니메이션은 148ms의 렌더링과 133ms의 그림을 가지고 있습니다.

      <span>box-shadow: <x-offset> <y-offset> <spread> <blur> <color>;
      </span>
      이제 두 개의 Box Shadow 레이어가있는 그림자 애니메이션을 갖도록하겠습니다.

      차이는 분명합니다. 계층화 된 그림자는 더 잘 보이는 그림자 효과를 생성 할뿐만 아니라 애니메이션을 할 때 놀랍게도 성능이 뛰어납니다. 렌더링은 148ms에서 74ms로 줄었고 그림도 133ms에서 74ms로 감소했습니다. 다음은 두 가지의 라이브 데모입니다

      를 참조하십시오 SitePoint (@SitePoint) 에 의한 단일 섀도우 vs 계층 섀도 애니메이션 Codepen에서.

      이제, 애니메이션 중에 두 번째 그림자를 추가하여 다른 것을 시도해 봅시다 :



      애니메이션 중에 두 번째 섀도우 레이어를 추가하는 것은 처음부터 두 개의 레이어를 갖는 것만 큼 성능이 없지만 단일 박스 쉐이딩 애니메이션과 함께 133ms에 비해 100ms의 페인팅이 있습니다. 궁극적으로, 그림자가 어떻게 보이는지, 어떤 방법을 만들 때 어떤 방법을 사용할 것인지 결정하는 것은 당신에게 달려 있습니다.

      유사 요소를 애니메이션하는

      이번에는 Box-Shadow 속성을 변경하지 않고 그림자 애니메이션을 복제 할 것입니다. 이전 데모에서, 우리는 그림자 애니메이션 중에 여전히 많은 페인팅이 진행되고 있음을 알 수 있습니다. Box-Shadow 값을 변경하는 경우이 프로세스를 피할 수 없습니다.

      이 섹션의 끝에서 그림이 거의 완전히 제거 될 것입니다. 더 많은 코드 라인이 포함되지만 더 성능있는 그림자 애니메이션을 달성합니다.

      . 따라서, 상자의 기본 스타일 후에 : 의사 요소 후에는 다음과 같은 상자 섀도우를 제공합니다.

      이제, 당신이해야 할 일은 슈도 요소의 불투명도를 바꾸는 것입니다 : 호버 :

      일반 그림자 애니메이션과 함께 보자
      <span>box-shadow: <x-offset> <y-offset> <spread> <blur> <color>;
      </span>

      CSS 박스 그림자를 애니메이션하고 성능을 최적화하는 방법

      를 참조하십시오 sitepoint (@sitepoint) 에 의한 psuedo 섀도우 Codepen에서.

      여기에 시각적으로 갈 수는 없습니다. 진정한 차이점은 그들의 성능에 있습니다. 일반 Box-Shadow 애니메이션의 결과는 다음과 같습니다.

      에는 230ms의 렌더링 시간이 있고 그림에는 211ms가 있습니다. 이제 의사 섀도우 애니메이션.

      이번에는 148ms의 렌더링과 51m의 그림 만 있습니다. 더 많은 코드가 있지만 결과는 번거 로움의 가치가 있습니다.

      변환 속성 사용 이것은 주로 그림자가있는 주요 요소 인 상자에 적용됩니다. 변환 속성을 사용하여 마진과 같은 레이아웃을 바꾸는 속성 대신 스타일 재 계산의 양이 줄어 듭니다.

      이 속성은 번역 또는 스케일 속성과 함께 사용하여 페이지에서 요소를 들어 올리는 것을 시뮬레이션하여 깊이의 환상을 만듭니다. 몇 가지 유용한 팁

      이미 상자 쉐이드 속성과 관련된 모든 애니메이션이 성능에 영향을 미칠 것으로 이미 확립되었습니다. 따라서 CSS Box Shadow Animation이 있어야한다면 여기에 유용한 팁을 명심해야합니다. 먼저, 최소화하십시오. 그것을 위해 모든 요소에 그림자를 던지지 마십시오. 둘째, 대화식 요소 만 애니메이션합니다. 기능이없는 것을 애니메이션 할 필요가 없습니다. 이렇게하면 CPU의 워크로드가 줄어들고 성능을 크게 향상시킵니다.

      결론 그림자는 사이트를 시각적으로 향상시킬 수 있지만 특히 애니메이션과 관련하여 성능에도 영향을 미칩니다. 이 기사에서는 그림자 애니메이션에 대한 다양한 방법을 테스트하고 성능을 비교했습니다. 그림자를 애니메이션하면 그림, 레이아웃 변경 및 합성 등 세 가지 이벤트가 발생합니다.

      이상적인 솔루션은 그림자를 전혀 애니메이션하지 않는 것입니다. Box-Shadow 속성에 애니메이션을 원한다면 오프셋 값을 변경하는 대신 불투명도 만 변경하면 다시 페인팅이 줄어 듭니다. 어획량은 그림자가 제공하는 깊이의 환상을 느슨하게한다는 것입니다. 또 다른 접근법은 두 개의 박스 쉐이더 레이어를 애니메이션하는 것입니다. 이 솔루션은 여분의 그림자로도 시각적으로 유쾌하고 성능이 있습니다.

      마지막 옵션은 박스 섀도우가 아니라 그림자를 제공하는 의사 요소를 애니메이션하는 것입니다. 이로 인해 Refainting의 양과 CPU가 애니메이션을 실행하는 데있어 전체 작업이 크게 줄어 듭니다. 더 많은 코드를 작성하지만 좋은 성능을 보장하는 것이 가장 좋습니다.

      관련 내용 :

      CSS의 방법 : IS, WHER 및 : 의사 클래스 선택기가 작동합니까 CSS에서 요소를 숨기는 10 가지 방법

      책 : CSS Mas CSS의

      CSS Box-Shadow에 대한 FAQS

      CSS의 Box-Shadow는 무엇입니까? Box-Shadow는 요소에 대한 그림자를 만들 수있는 CSS 속성입니다. 그것은 당신이 요소의 전체 상자에 그림자 효과를 추가하여 시각적 외관을 향상시킬 수 있습니다. Box-Shadow 속성의 값은 무엇을 의미합니까? <:> 값은 다음을 나타냅니다 : 수평 오프셋 : 그림자의 수평 거리는 그림자의 수평 거리 : 섀도의 수직 거리 : 그림자의 수직 거리. : 선택 사항. 그림자가 널리 퍼져야합니다.

      색상 : 그림자의 색상.

      Box-Shadow를 사용하여 여러 그림자를 요소에 적용 할 수 있습니까? 예, 각 그림자를 쉼표로 분리하여 여러 개의 그림자를 적용 할 수 있습니다.
      HTML 요소에서 Box-Shadow를 사용할 수 있습니까? es, 당신은 div, 단락, 헤더 등과 같은 대부분의 HTML 요소에 박스 쉐이드를 적용 할 수 있습니다. 요소의 시각적 표현을 향상시키기위한 다양한 속성입니다. Box-Shadow를 사용할 때 성능 고려 사항? 상자 그림자, 특히 큰 흐림 값으로 과도한 사용은 성능에 영향을 줄 수 있습니다. 특히 덜 강력한 장치에서 원활한 사용자 경험을 유지하기 위해 Shadows를 신중하게 사용하는 것이 좋습니다.

위 내용은 CSS 박스 그림자를 애니메이션하고 성능을 최적화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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