css+js实现自适应响应式可点击切换时间线效果代码
代码语言:html
所属分类:响应式
代码描述:css+js实现自适应响应式可点击切换时间线效果代码
代码标签: css js 自适应 响应式 点击 切换 时间线
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600&display=swap" rel="stylesheet">
<style>
:root {
--color-accent-light: #00DBDE;
--color-accent-dark: #FC00FF;
--color-secondary: #ccc;
--text-color-default: #2c2c2c;
--text-color-light: #fff;
--font-size-default: 15px;
--font-size-lg: 25px;
--font-weight-regular: 400;
--font-weight-semibold: 600;
--font-weight-default: var(--font-weight-regular);
--border-color-default: var(--color-secondary);
--border-color-accent: var(--color-accent-dark);
--bg-color-default: #fff;
--bg-color-dark: #2c2c2c;
--bg-color-accent--lignt: var(--color-accent-light);
--bg-color-accent--dark: var(--color-accent-dark);
--transition-duration: .2s;
--transition-timing-function: linear;
--transition-delay: 0s;
--negative-multiplier: -1;
--gradient-default: linear-gradient(122deg, var(--color-accent-light) 0%, var(--color-accent-dark) 100%);
}
body {
font-family: 'Montserrat', sans-serif;
font-size: var(--font-size-default);
color: var(--text-color-default);
}
* {
box-sizing: border-box;
}
/* EXAMPLE STYLES: YOU DON'T NEED THEM!!! */
.header {
max-width: 500px;
margin: auto;
text-align: center;
}
.header__btns {
display: flex;
justify-content: center;
gap: 15px;
margin-top: 30px;
}
body a {
color: inherit;
text-decoration: none;
}
.header__btn {
transition:
all
var(--transition-duration)
var(--transition-timing-function)
var(--transition-delay);
padding: 10px 20px;
margin-right: 10px;
background-color: var(--bg-color-default);
border: 1px solid var(--border-color-default);
border-radius: 3px;
cursor: pointer;
outline: none;
}
.header__btn:hover,
.header__btn.js-active {
color: var(--text-color-light);
background-color: var(--bg-color-dark);
}
.header__title {
margin-bottom: 10px;
font-weight: var(--font-weight-semibold);
}
.content {
margin: 50px auto;
}
.content__title {
margin-bottom: 80px;
font-size: var(--font-size-lg);
font-weight: var(--font-weight-default);
text-align: center;
}
/* TIMELINE STYLES: YOU NEED THEM!!! */
.timeline {
--wrapper-width: 900px;
width: 95%;
max-width: var(--wrapper-width);
margin: auto;
}
.timeline__stepper {
--step-border-width: 3px;
--offset-to-slider-content: 30px;
position: relative;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 30px;
margin-bottom: var(--offset-to-slider-content);
}
@media(min-width: 530px) {
.timeline__stepper {
display: flex;
justify-content: space-around;
gap: 0;
}
}
@media(min-width: 700px) {
.timeline__stepper {
--offset-to-slider-content: 50px;
}
}
.timeline__step {
position: relative;
width: 100%;
cursor: pointer;
}
@media(min-width: 530px) {
.timeline__step {
width: 100%;;
}
}
.timeline__icon {
--timeline-icon-dimensions: 45px;
position: relative;
display: block;
width: var(--timeline-icon-dimensions);
max-height: var(--timeline-icon-dimensions);
height: auto;
margin: 0 auto;
transition: opacity var(--transition-duration) var(--transition-timing-function) var(--transition-delay);
}
@media(min-width: 700px) {
.timeline__icon {
--timeline-icon-dimensions: 60px;
margin-bottom: 30px;
}
}
.timeline__icon--active {
position: absolute;
top: 0;
left: 50%;
transform: translate(-50%);
fill: url(#icon-gradient);
opacity: 0;
}
.timeline__step-title {
--timeline-dot-dimensions: 11px;
--extra-offset-fox-pixelperfect: -1px;
position: relative;
display: none;
padding-top: 30px;
margin-bottom: 0;
text-align: center;
line-height: 1.7;
border-top: var(--step-border-width) solid var(--border-color-default);
}
@media(min-width: 700px) {
.timeline__step-title {
display: block;
}
}
.timeline__step-title:before,
.timeline__step-title:after {
position: absolute;
top: var(--dot-top-position);
left: 50%;
display: block;
width: var(--timeline-dot-dimensions);
height: var(--timeline-dot-dimensions);
content: '';
border-radius: 50%;
}
.timeline__step-title:before {
--dot-top-position: calc(
var(--timeline-dot-dimensions)/2 * var(--negative-multiplier) + var(--extra-offset-fox-pixelperfect)
);
transform: translate(-50%);
border: 2px solid var(--border-color-default);
border-radius: 50%;
background-color: #fff;
z-index: 5;
}
.timeline__step-title:after {
--timeline-dot-dimensions: 25px;
--dot-top-position: calc(
var(--timeline-dot-dimensions)/2 * var(--negative-multiplier) + var(--extra-offset-fox-pixelperfect)
);
transform: translate(-50%) scale(0);
border-radius: 50%;
background-color: #fff;
}
/* this elements generates in JS */
.timeline__step-active-marker {
--slide-pos-y: none; /* calcs on the fly in js */
--slide-pos-x: none; /* calcs on the fly in js */
--slide-width: auto; /* calcs on the fly in js */
--transition-timing-function: cubic-bezier(0, 0, 0, 1.2);
position: absolute;
top: var(--slide-pos-y);
left: 0;
display: none;
width: var(--slide-width);
height: var(--step-border-width);
transform: translateX(var(--slide-pos-x));
transition: transform var(--transition-duration) var(--transition-timing-function) var(--transition-delay);
background-image: var(--gradient-default);
}
@media(min-width: 700px) {
.timeline__step-active-marker {
display: block;
}
}
.timeline__step.is-active {
cursor: default;
}
.timeline__step.is-active .timeline__step-title {
font-weight: var(--font-weight-semibold);
}
.timeline__step.is-active .timeline__step-title:before {
transition: background-color var(--transition-duration) var(--transition-timing-function) var(--transition-delay);
background-color: var(--color-accent-dark);
border-color: var(--border-color-accent);
}
.timeline__step.is-active .timeline__step-title:after {
transform: translate(-50%) scale(1);
transition: transform var(--transition-durati.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0