<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>纯CSS3动态文字展示切换特效</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background: linear-gradient(135deg, #1a1a2e, #16213e);
font-family: 'Arial', sans-serif;
overflow: hidden;
}
.text-slider {
position: relative;
width: 100%;
max-width: 800px;
height: 300px;
margin: 0 auto;
overflow: hidden;
}
.slider-container {
position: relative;
width: 100%;
height: 100%;
}
.slide {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
color: white;
opacity: 0;
transform: translateY(50px);
transition: all 0.8s cubic-bezier(0.68, -0.55, 0.265, 1.55);
z-index: 1;
}
.slide.active {
opacity: 1;
transform: translateY(0);
z-index: 2;
}
.slide h2 {
font-size: 3rem;
margin-bottom: 20px;
text-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
background: linear-gradient(to right, #fdc830, #f37335);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.slide p {
font-size: 1.2rem;
max-width: 80%;
line-height: 1.6;
margin-bottom: 30px;
}
.btn {
display: inline-block;
padding: 12px 30px;
background: linear-gradient(45deg, #f12711, #f5af19);
color: white;
border-radius: 50px;
text-decoration: none;
font-weight: bold;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
transition: all 0.3s ease;
transform: translateY(0);
}
.btn:hover {
transform: translateY(-5px);
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.3);
}
.slider-nav {
position: absolute;
bottom: 30px;
left: 50%;
transform: translateX(-50%);
display: flex;
z-index: 3;
}
.slider-nav-item {
width: 12px;
height: 12px;
margin: 0 8px;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.5);
cursor: pointer;
transition: all 0.3s ease;
}
.slider-nav-item.active {
background-color: white;
transform: scale(1.3);
}
.credit {
position: absolute;
bottom: 20px;
left: 0;
width: 100%;
text-align: center;
color: rgba(255, 255, 255, 0.7);
font-size: 14px;
}
.credit a {
color: #f5af19;
text-decoration: none;
transition: color 0.3s;
}
.credit a:hover {
color: #f12711;
}
/* 动画定义 */
@keyframes slideIn {
0% {
opacity: 0;
transform: translateY(50px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideOut {
0% {
opacity: 1;
transform: translateY(0);
}
100% {
opacity: 0;
transform: translateY(-50px);
}
}
/* 自动切换动画 */
.slide:nth-child(1) {
animation-delay: 0s;
}
.slide:nth-child(2) {
animation-delay: 5s;
}
.slide:nth-child(3) {
animation-delay: 10s;
}
.slide:nth-child(4) {
animation-delay: 15s;
}
@keyframes slider {
0%, 20% {
opacity: 1;
transform: translateY(0);
z-index: 2;
}
21%, 100% {
opacity: 0;
transform: translateY(-50px);
z-index: 1;
}
}
.slide {
animation: slider 20s infinite;
}
.slide:nth-child(2) {
animation-delay: 5s;
}
.slide:nth-child(3) {
animation-delay: 10s;
}
.slide:nth-child(4) {
animation-delay: 15s;
}
</style>
</head>
<body>
<div class="text-slider">
<div class="slider-container">
<div class="slide active">
<h2>创意设计</h2>
<p>用创新的思维和独特的设计理念,打造令人惊叹的视觉效果</p>
<a href="#" class="btn">了解更多</a>
</div>
<div class="slide">
<h2>响应式开发</h2>
<p>为各种设备提供完美的用户体验,从手机到桌面无缝衔接</p>
<a href="#" class="btn">查看案例</a>
</div>
<div class="slide">
<h2>高效性能</h2>
<p>优化每一行代码,确保您的网站快速加载,流畅运行</p>
<a href="#" class="btn">技术细节</a>
</div>
<div class="slide">
<h2>持续支持</h2>
<p>我们提供全方位的技术支持和服务,确保您的项目长期稳定</p>
<a href="#" class="btn">联系客服</a>
</div>
</div>
<div class="slider-nav">
<div class="slider-nav-item active" data-slide="0"></div>
<div class="slider-nav-item" data-slide="1"></div>
<div class="slider-nav-item" data-slide="2"></div>
<div class="slider-nav-item" data-slide="3"></div>
</div>
</div>
<div class="credit">
</div>
<script>
// 纯CSS实现,这里只是为导航点添加点击功能
document.addEventListener('DOMContentLoaded', function() {
const slides = document.querySelectorAll('.slide');
const navItems = document.querySelectorAll('.slider-nav-item');
navItems.forEach(item => {
item.addEventListener('click', function() {
const slideIndex = parseInt(this.getAttribute('data-slide'));
// 移除所有active类
slides.forEach(slide => slide.classList.remove('active'));
navItems.forEach(nav => nav.classList.remove('active'));
// 添加active类到当前slide和nav
slides[slideIndex].classList.add('active');
this.classList.add('active');
// 重置动画
slides.forEach((slide, index) => {
slide.style.animation = 'none';
setTimeout(() => {
slide.style.animation = '';
slide.style.animationDelay = `${index * 5}s`;
}, 10);
});
});
});
});
</script>
</body>
</html>