> 웹 프론트엔드 > CSS 튜토리얼 > CSS 무한 및 원형 회전 이미지 슬라이더

CSS 무한 및 원형 회전 이미지 슬라이더

William Shakespeare
풀어 주다: 2025-03-09 13:14:15
원래의
984명이 탐색했습니다.

CSS Infinite and Circular Rotating Image Slider 사진 슬라이더 (회전 목마라고도 함)는 어디에서나 사용할 수 있습니다. 그림이 왼쪽에서 오른쪽으로 미끄러지는 공통 슬라이더를 만들기위한 CSS 트릭이 많이 있습니다 (또는 그 반대도 마찬가지). 많은 JavaScript 라이브러리는 복잡한 애니메이션으로 아름다운 슬라이더를 만듭니다. 이 기사에서는 이러한 일을하지 않을 것입니다.

우리는 일련의 기사를 통해 화려하고 드문 순수한 CSS 슬라이더를 탐색 할 것입니다. 같은 클래식 슬라이더를 보는 데 지쳤다면 올바른 장소에 있습니다!

CSS 슬라이더 시리즈

사이클 회전 그림 슬라이더

(현재 위치)

폴라로이드 그림을 찾아 Infinite 3D 슬라이더

첫 번째 게시물에서, 우리는 내가 "루프 회전 사진 슬라이더"라고 부르는 것으로 시작합니다 : 멋져요? 코드를 분석합시다!
    HTML 구조
  • 아름다운 그림 장식 또는 CSS 그리드 및 커스텀 셰이프에서 내 시리즈를 따랐다면 첫 번째 규칙은 가능한 한 적은 html을 사용하는 것임을 알게 될 것입니다. 나는 항상 CSS 솔루션을 찾는 데 어려움을 겪고 많은 와 다른 것들로 코드를 엉망으로 만들고 있습니다. 동일한 규칙이 여기에 적용됩니다. 코드는 컨테이너의 일련의 이미지에 지나지 않습니다. 우리가 네 가지 그림을 사용한다고 가정 해 봅시다 :
  • 그게 다야! 이제 코드의 흥미로운 부분에 들어가자. 그러나 먼저, 우리는 슬라이더의 작동 방식에 대한 논리를 이해하기 위해 그것을 파헤쳐 줄 것입니다.
  • > 일하는 방법?
우리는 CSS 그리드를 사용하여 서로 같은 영역에 모든 이미지를 배치합니다.

지금까지, 너무 복잡한 것은 없습니다. 까다로운 부분은 애니메이션입니다.

우리는 큰 원을 회전시키는 것에 대해 논의했지만 실제로는 각 이미지를 개별적으로 회전시켜 큰 회전 원의 환상을 만듭니다. 애니메이션을 정의하고 이미지 요소에 적용해 봅시다 :

.

주요 요령은 행을 강조하는 것입니다. 기본적으로 CSS

속성은 센터 (또는 50% 50%)와 같아서 이미지가 중앙 주위로 회전하게하지만 그렇게 할 필요는 없습니다. 우리는 이미지를 포함하는

큰 원 의 중심 주위에서 회전해야하므로

의 새로운 값이 필요합니다. <div><is> s는 r이 0.707 * s와 같기 때문에 r은 이미지 크기의 70.7%와 같다고 말할 수 있습니다. 다음은 120.7%의 값을 얻는 방법을 설명하는 그래프입니다. (이미지는 여기에 포함되어야하지만 이미지를 처리 ​​할 수 ​​없으므로 텍스트로 설명하겠습니다) 이미지는 변환-원래 값을 계산하는 기하학적 관계를 보여줍니다. <p> <the> 애니메이션을 실행하고 어떻게되는지 보자. (애니메이션 효과는 여기에 내장되어야하지만 애니메이션을 처리 할 수 ​​없으므로 텍스트로 설명하겠습니다) 애니메이션 효과는 모든 이미지가 함께 겹쳐져 있기 때문에 하나의 이미지 만 볼 수 있음을 보여줍니다. </the></p> <delay> 우리는이 겹치는 것을 피하기 위해 각 이미지의 애니메이션을 지연시켜야합니다. <p> </p> <impr> 상황이 개선되었습니다! <p> <over> 컨테이너의 오버플로를 숨기면 이미 슬라이더를 볼 수 있지만 이동하기 전에 각 이미지가 짧은 시간 동안 보이도록 애니메이션을 약간 업데이트합니다. </over></p> <our> 우리는 다음을 위해 애니메이션 키 프레임을 업데이트 할 것입니다 : <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;div&gt; &lt;img alt=&quot;&quot; src=&quot;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;&quot;&gt; &lt;/div&gt;</pre><div class="contentsignin">로그인 후 복사</div></div>. <p> 각 90deg (360deg/4, 여기서 4는 이미지 수)에 대해 작은 일시 정지를 추가합니다. 각 이미지는 다음 이미지로 미끄러지기 전에 가시 기간 (27%-22%, 52%-47%등)의 총 지속 시간의 5%로 유지됩니다. 애니메이션을 더 아름답게 만들기 위해 기능으로 </p>를 업데이트 할 것입니다. <ider> 이제 우리 슬라이더가 완벽합니다! 글쎄요, 우리는 여전히 마지막 터치 업을 놓치고 있기 때문에 거의 완벽합니다. 이미지 주위에서 회전하는 다채로운 둥근 경계. 우리는 <p> 래퍼에서 pseudo-elements를 사용하여 그것을 만들 수 있습니다 : </p> <p> <circle> 나는 반복적 인 원뿔형 구배를 가진 원을 배경으로 만들었고, 채우기 영역 만 표시하는 마스킹 트릭을 사용했습니다. 그런 다음 이미지에 정의 된 동일한 애니메이션을 적용합니다. (애니메이션 효과는 여기에 포함되어야하지만 애니메이션을 처리 할 수 ​​없으므로 생략 할 것입니다) </circle></p> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">.gallery { --s: 280px; /* 控制大小 */ display: grid; width: var(--s); aspect-ratio: 1; padding: calc(var(--s) / 20); /* 我们稍后将看到它的用途 */ border-radius: 50%; } .gallery &gt; img { grid-area: 1 / 1; width: 100%; height: 100%; object-fit: cover; border-radius: inherit; }</pre><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div> 우리는 끝났다! 멋진 루프 슬라이더가 있습니다 : <p> <more> 더 많은 이미지를 추가합시다 <code>cubic-bezier() 4 개의 이미지를 사용하는 것이 좋지만 여러 이미지로 확장 할 수 있다면 더 좋습니다. 결국, 이것은 사진 슬라이더의 목적입니다. 우리는 n 사진을 고려할 수 있어야합니다. animation-timing-function 이렇게하려면 Sass를 소개하여 코드를보다 일반화 할 것입니다. 먼저 이미지 수 ($ N)의 변수를 정의하고 하드 코드 된 이미지 수의 각 부분 (4)을 업데이트합니다.

지연부터 시작하겠습니다 :

지연 공식은 (1- $ i)*지속 시간/$ n이며 다음 Sass 루프를 제공합니다. .gallery 우리는 실제로 원한다면 지속 시간을 변수로 만들 수 있습니다. 그러나 애니메이션을 계속합시다 :

.gallery > img {
  /* 与之前相同 */
  animation: m 8s infinite linear;
  transform-origin: 50% 120.7%;
}

@keyframes m {
  100% { transform: rotate(-360deg); }
}
로그인 후 복사
패턴을 더 잘 볼 수 있도록 단순화합시다 :

각 상태 간의 단계 크기는 25%, 즉 100%/4와 같습니다. -90deg 각도, 즉 -360deg/4를 추가합니다. 이것은 우리가 다음과 같은 루프를 쓸 수 있음을 의미합니다 :

각 이미지가 애니메이션의 5%를 차지하기 때문에 다음을 변경합니다.

<:><div> <img alt="" src=""><img alt="" src=""><img alt="" src=""><img alt="" src=""> </div> 이 예제에 대해 5%가 선택한 값이라는 점에 유의해야합니다. 또한 각 이미지가 표시되는 기간을 제어하기위한 변수로 설정할 수도 있습니다. 단순성을 위해 이것을 건너 뛸 것입니다. 그러나 숙제 로서이 작업을 시도하고 의견에 구현을 공유 할 수 있습니다!

마지막 요점은
.gallery {
  --s: 280px; /* 控制大小 */

  display: grid;
  width: var(--s);
  aspect-ratio: 1;
  padding: calc(var(--s) / 20); /* 我们稍后将看到它的用途 */
  border-radius: 50%;
}

.gallery > img {
  grid-area: 1 / 1;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: inherit;
}
로그인 후 복사
로그인 후 복사
를 업데이트하는 것입니다. 우리는 기하학적 기술이 필요합니다. 구성은 이미지 수에 관계없이 항상 동일합니다. 이미지 (작은 원)를 큰 원 안에 넣고 반경 R의 값을 찾아야합니다.

지루한 기하학적 설명을 원하지 않을 수도 있으므로 여기에 r : transform-origin를 찾는 방법은 다음과 같습니다.

우리가 이것을 백분율로 표현하면, 우리는 다음을 얻습니다 :

.gallery > img { /* 与之前相同 */ animation: m 8s infinite linear; transform-origin: 50% 120.7%; } @keyframes m { 100% { transform: rotate(-360deg); } }

우리는 끝났다! 우리는 여러 이미지에 대한 슬라이더가 있습니다!

9 장의 사진을 추가하자 : (9 장의 사진의 슬라이더 효과는 여기에 포함되어야하지만, 사진과 애니메이션을 처리 할 수 ​​없으므로 생략 할 것입니다)
.gallery > img:nth-child(2) { animation-delay: -2s; } /* -1 * 8s / 4 */
.gallery > img:nth-child(3) { animation-delay: -4s; } /* -2 * 8s / 4 */
.gallery > img:nth-child(4) { animation-delay: -6s; } /* -3 * 8s / 4 */
로그인 후 복사
. 많은 이미지를 추가하고 총 이미지 수로 $ n 변수를 업데이트하십시오.

transform-origin 요약 CSS 변환 및 표준 형상을 사용하는 몇 가지 트릭을 사용하여 많은 코드없이 멋진 루프 슬라이더를 만들었습니다. 이 슬라이더의 멋진 점은 우리가 원이 있기 때문에 무한 애니메이션을 유지하기 위해 이미지를 복사하는 것을 귀찮게 할 필요가 없다는 것입니다. 전체 회전 후 첫 번째 이미지로 돌아갑니다!

위 내용은 CSS 무한 및 원형 회전 이미지 슬라이더의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿