div+css原生实现图文堆叠堆积幻灯片点击切换效果代码

代码语言:html

所属分类:幻灯片

代码描述:div+css原生实现图文堆叠堆积幻灯片点击切换效果代码

代码标签: div css 原生 图文 堆叠 堆积 幻灯片 点击 切换

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  


<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
  
  
  
<style>
/* register these two so they can be transitioned */
/* index of previous top item during the animation
 * after another has been selected */
@property --p {
  syntax: "<number>";
  initial-value: 0;
  inherits: true;
}
/* animated index of top item from previous to current */
@property --v {
  syntax: "<number>";
  initial-value: 0;
  inherits: true;
}
* {
  margin: 0;
}

/* poor man's reset */
/* grid everything! */
html, body, section, article, button {
  display: grid;
}

/* full viewport height container for stack section */
html {
  min-height: 100%;
}

body {
  background: #070410;
}

section {
  /* set previous top item index to current top index
   * 0s duration delayed transition ensures switch happens 
   * after the switching top item transtion */
  --p: var(--k);
  /* set previous top item index to current top index
   * a transition ensures switch doesn't happen instantly */
  --v: var(--k);
  /* difference between current & previous top item indices
   * 0 if not during animation, 
   * 1 during animation not between two ends, 
   * n - 1 > 1 (if n > 2) during animation from one end to another */
  --ini: abs(var(--k) - var(--p));
  /* animation from one end of the n > 2 length list to another?
   * 0 if no, 1 if yes */
  --end: clamp(0, var(--ini) - 1, 1);
  /* absolute value of difference between animated & previous top index */
  --abs: abs(var(--v) - var(--p));
  /* animation progress as a decimal value */
  --dif: calc(var(--abs)/(1 - var(--end) + var(--end)*(var(--n) - 1)));
  /* direction we're going in given by 
   * sign of difference between current & previous top item indices
   * -1 backwards, 1 forwards, 0 no animation */
  --dir: sign(var(--k) - var(--p));
  /*  bit form of direction: 0 backwards, 1 forwards */
  --bit: calc(.5*(1 + (1 - 2*var(--end))*var(--dir)));
  /* bigger space between the two columns (image stack & all else) */
  grid-gap: 0.5em 4em;
  grid-template: repeat(2, max-content) 1fr max-content/max-content 1fr;
  place-self: center;
  color: #f1f5f9;
  font: 1em poppins, sans-serif;
  counter-reset: k calc(1 + var(--k)) n var(--n);
  /* transition previous & animated top item indices 
   * so they don't change instantly like the current one */
  transition: --p 0s 0.8s, --v 0.8s;
  /* counter & binomial name faded */
  /* this ridiculousness needed for Chrome without flag */
  /* for reference
   * https://css-tricks.com/using-absolute-value-sign-rounding-and-modulo-in-css-today/ */
}
section::before, section em {
  color: RGB(from currentColor r g b/0.6);
}
section::before {.........完整代码请登录后点击上方下载按钮下载查看

网友评论0