技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营
卡卡网是专业的网站测速平台,网速测试,测试网站速度,就来卡卡网 ~
问题反馈网络日志

【DiyVM】沙田机房/香港云/回国CN2线路/AMD EPYC/39元一月5M/CN2海外云主机 24元/月BGP+CN2海外云 低至25元/月海外主机 低至$2/月

DiyVM:香港VPS惊爆价36元一月
★站长/主播变现★有流量就来
5M CN2 GIA云主机 24元起
一一一云主机 26元起一一一
官方高价收量,每日稳定结算

一一云主机 24元 3折起一一
海外CN2云 低至$2.5/月
海外云低至2折 298/年
免费测试★APK免杀 谷歌过保护
官方收量CPA/CPS长期稳定

海外主机 5M CN2 低至$2/月
恒创科技 一 海外服务器 ● 高速稳定
★解决安装报毒★谷歌过保护机制
超级签★免杀★加固★满意付款
全球云主机 3天试用再买

【菠萝云】香港4G内存99元,马上开通
亿人互联-津/京BGP托管租用/VPS
苹果签名/APP封装/远控免杀
10M CN2海外云VPS 53元/月
CN2 GIA/1000Mbps $111/月

实力产品变现
实力产品变现
实力产品变现
实力产品变现
实力产品变现

赞助商

分类目录

赞助商

最新文章

字体单位是相对测量单位,是根据其他一些值计算的,可以动态变化。与字体相关的测量单...
stroke-width设置形状的描边粗细,如果在 HTML 中,框架是从外边缘...
本文给大家介绍10款用SVG蒙版制作的图片转场/过渡动画,并分析如何实现它们。
CSS 数据类型<filter-function>代表可以改变输入图...
CSS box-shadow 属性用于在元素的框架上添加阴影效果。你可以在同一个...
drop-shadow() 是一个CSS 过滤器函数,其将投影效果应用于输入图像...
本文给大家介绍一个SVG实现的网页气泡动画效果。 

搜索

纯CSS创建圆形旋转图像滑块(轮播)【演示/代码下载】

作者:admin    时间:2023-2-7 20:54:51    浏览:417

那些从左到右或从右到左的图像轮播效果你或许见多了,今天介绍一个不一样的轮播效果,那就是圆形旋转图像滑块。

demodownload

这个圆形旋转图像滑块的效果,看起来是不是挺酷的?然而它是由纯CSS创建的,并且代码很少,一点JavaScript脚本都不用到。

下面我们分析一下主要代码。

HTML代码

假设我们正在处理四张图片:

  1. <div class="gallery">
  2.   <img src="" alt="">
  3.   <img src="" alt="">
  4.   <img src="" alt="">
  5.   <img src="" alt="">
  6. </div>

代码很少,代码只不过是容器中的图像列表。

CSS代码

使用CSS Grid将所有图像放置在彼此上方的同一区域中:

  1. .gallery  {
  2.   --s: 280px; /* control the size */
  3.  
  4.   display: grid;
  5.   width: var(--s);
  6.   aspect-ratio: 1;
  7.   padding: calc(var(--s) / 20); /* we will see the utility of this later */
  8.   border-radius: 50%;
  9. }
  10. .gallery > img {
  11.   grid-area: 1 / 1;
  12.   width: 100%;
  13.   height: 100%;
  14.   object-fit: cover;
  15.   border-radius: inherit;
  16. }

动画显示旋转一个大圆圈,但实际上,是单独旋转每个图像,从而产生一个大旋转圆圈的错觉。因此,我们定义一个动画m,并将其应用于图像元素:

  1. .gallery > img {
  2.   /* same as before */
  3.   animation: m 8s infinite linear;
  4.   transform-origin: 50% 120.7%;
  5. }
  6.  
  7. @keyframes m {
  8.   100% { transform: rotate(-360deg); }
  9. }

主要技巧依赖于突出显示的行。默认情况下,CSS transform-origin属性等于center(或50% 50%)使图像围绕其中心旋转,但这里不需要它来执行此操作。我们需要图像围绕包含我们图像的大圆的中心旋转,因此使用transform-origin的新值。

由于 R 等于0.707 * S,我们可以说R等于70.7%图像大小。这里有一个图来说明我们是如何得到这个120.7%值的:

 

让我们运行动画看看会发生什么:

 

因为我们把所有图片堆叠在一起,同时旋转,只有顶部图像是可见的。我们需要的是延迟每个图像的动画以避免这种重叠。

  1. .gallery > img:nth-child(2) { animation-delay: -2s; } /* -1 * 8s / 4 */
  2. .gallery > img:nth-child(3) { animation-delay: -4s; } /* -2 * 8s / 4 */
  3. .gallery > img:nth-child(4) { animation-delay: -6s; } /* -3 * 8s / 4 */

再看看动画效果:

 

如果我们隐藏容器上的溢出,我们已经可以看到一个滑块,但我们将稍微更新动画,以便每个图像在移动之前在短时间内保持可见。

我们将更新我们的动画关键帧来做到这一点: 

  1. @keyframes m {
  2.   0%, 3% { transform: rotate(0); }
  3.   22%, 27% { transform: rotate(-90deg); }
  4.   47%, 52% { transform: rotate(-180deg); }
  5.   72%, 77% { transform: rotate(-270deg); }
  6.   98%, 100% { transform: rotate(-360deg); }
  7. }

对于每个90deg(360deg/4,其中4图像的数量),我们将添加一个小的停顿。在我们滑动到下一个图像(27%-22%、52%-47%等)5%之前,每个图像将在整个持续时间内保持可见。我将更新使用函数cubic-bezier()使动画更漂亮:

 

现在我们的滑块完美了!最后添加润色:围绕我们的图像旋转的彩色圆形边框。我们可以在.gallery包装器上使用伪元素来制作它:

  1. .gallery {
  2.   padding: calc(var(--s) / 20); /* the padding is needed here */
  3.   position: relative;
  4. }
  5. .gallery::after {
  6.   content: "";
  7.   position: absolute;
  8.   inset: 0;
  9.   padding: inherit; /* Inherits the same padding */
  10.   border-radius: 50%;
  11.   background: repeating-conic-gradient(#789048 0 30deg, #DFBA69 0 60deg);
  12.   mask: 
  13.     linear-gradient(#fff 0 0) content-box, 
  14.     linear-gradient(#fff 0 0);
  15.   mask-composite: exclude;
  16. }
  17. .gallery::after,
  18. .gallery >img {
  19.   animation: m 8s infinite cubic-bezier(.5, -0.2, .5, 1.2);
  20. }

这样,一个很酷的圆形滑块就制作完了。

demodownload

x

适用于任意数量图像的滑块

上面实例使用四张图像,但如果我们可以用任意数量的图像会更好,也更符合实际使用需求。我们应该考虑N张图像。

下面是一个适用任意数量图像的SCSS代码。

  1. @use 'sass:math';
  2.  
  3. $n:5; /* 这里自定义图像数量,把5改为你的图像数目 */
  4.  
  5. .gallery  {
  6.   --s: 280px; /* 控制大小 */
  7.   --d: 8s; /* 动画延迟 */
  8.   
  9.   display: grid;
  10.   width: var(--s);
  11.   aspect-ratio: 1;
  12.   overflow: hidden;
  13.   padding: calc(var(--s)/20);
  14.   border-radius: 50%;
  15.   position: relative;
  16.   clip-path: circle(49.5%); /* 避免由 overflow: hidden 造成的差错*/
  17. }
  18. .gallery::after {
  19.   content: "";
  20.   position: absolute;
  21.   inset: 0;
  22.   padding: inherit;
  23.   border-radius: inherit;
  24.   background: repeating-conic-gradient(#789048 0 30deg,#DFBA69 0 60deg);
  25.   -webkit-mask: 
  26.      linear-gradient(#fff 0 0) content-box, 
  27.      linear-gradient(#fff 0 0);
  28.   -webkit-mask-composite: xor;
  29.           mask-composite: exclude;
  30. }
  31. .gallery > img {
  32.   grid-area: 1/1;
  33.   width: 100%;
  34.   height: 100%;
  35.   object-fit: cover;
  36.   border-radius: inherit;
  37.   transform-origin: 50% (50%/math.sin(180deg/$n) + 50%);
  38. }
  39. .gallery::after,
  40. .gallery > img {
  41.   animation: m var(--d) infinite cubic-bezier(.5,-0.2,.5,1.2);
  42. }
  43. @for $i from 2 to ($n + 1) {
  44.   .gallery > img:nth-child(#{$i}) {
  45.     animation-delay: calc(#{(1 - $i)/$n}*var(--d));
  46.   }
  47. }
  48.  
  49. @keyframes m {
  50.   0%,3%    {transform: rotate(0)}
  51.   @for $i from 1 to $n {
  52.     #{($i/$n)*100 - 2}%,#{($i/$n)*100 + 3}% {transform: rotate(#{($i/$n)*-360}deg)}  
  53.   }
  54.   98%,100% {transform: rotate(-360deg)}
  55. }
  56.  
  57.  
  58. body {
  59.   margin: 0;
  60.   min-height: 100vh;
  61.   display: grid;
  62.   place-content: center;
  63.   background: #C2CBCE;
  64. }

请注意,此代码为SCSS而非CSS,我们要把该代码编译成CSS后才能用于HTML文档里。

下面是编译该SCSS代码为CSS的方法介绍。

1、打开在线编译器:https://codepen.io/pen/

2、把上面SCSS代码复制到CSS编辑窗口。

 

3、点击CSS编辑窗口右上方的齿轮图标,选择“CSS Preprocessor”为SCSS,然后点“x”关闭设置。

 

 4、点击CSS编辑器右上角的箭头,在下拉菜单点击“View Compiled CSS”,这时,SCSS代码立即被编译为CSS代码,我们把这些CSS代码复制到HTML文档里使用即可。

 

SCSS编译成CSS后的代码。

 

总结

本文介绍了如何使用纯CSS创建圆形旋转图像滑块(轮播),喜欢的朋友可以收藏本页,或下载源代码直接使用。

相关文章

标签: 滑块  图像滑块  css  轮播  
x
广告: CN2云主机 免费试用