CSS 全屏图像上的幻灯片动画
CSS Slide Animation on Fullscreen Images
我的着陆页上有两张图片,它们使用默认的淡入淡出动画来回切换。我的第一个问题是我想使用滑动动画,但我没有找到任何更改它的选项。我的第二个问题是 淡入淡出动画仅适用于 chrome。有什么办法可以在其他浏览器中解决这个问题吗?
我的代码:
/* basicStyle.css */
* {
margin: 0;
padding: 0;
}
.container {
width: 100%;
height: 100%;
}
.lead {
font-size: 1.5rem;
}
.navbar {
position: fixed;
top: 0;
z-index: 1;
display: flex;
width: 100%;
height: 60px;
background: rgba(0, 0, 0, 0.7);
}
.navbar ul {
display: flex;
list-style: none;
width: 100%;
justify-content: center;
}
.navbar ul li {
margin: 0 1rem;
padding: 1rem;
}
.navbar ul li a {
text-decoration: none;
text-transform: uppercase;
color: #f4f4f4;
}
.navbar ul li a:hover {
color: skyblue;
}
section {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
width: 100%;
}
section h1 {
font-size: 4rem;
}
/* Section Images */
section#home {
background: black;
min-height: 100vh;
}
section#gallery {
background: red;
min-height: 100vh;
}
section#about {
background: green;
min-height: 100vh;
}
section#contact {
background: blue;
min-height: 100vh;
}
/* LandingPage.css */
* {
margin: 0;
padding: 0;
}
body {
margin: 0;
padding: 0;
font-family: 'Montserrat';
font-size: 17px;
color: #fff;
line-height: 1.6;
}
#showcase {
background: url('https://images.unsplash.com/photo-1597368208802-2bec16fba411?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1051&q=80')
100vw 0 no-repeat,
url('https://images.unsplash.com/photo-1597390520089-9f46046ea040?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1041&q=80')
0 0 no-repeat;
background-size: cover;
background-position: center;
height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
padding: 0 20px;
animation: slide-right 15s forwards 2s infinite;
}
@keyframes slide-right {
0% {
background-position: 100vw 0, 0 0;
}
50% {
background-position: 0vw 0, 0 0;
}
100% {
background-position: 100vw 0, 0 0;
}
}
#showcase h1 {
font-size: 50px;
line-height: 1.2;
}
#showcase p {
font-size: 20px;
color: #fff;
}
#showcase .button {
font-size: 18px;
text-decoration: none;
color: #fff;
border: #fff 1px solid;
padding: 10px 20px;
border-radius: 10px;
margin-top: 20px;
}
.main-section div.iScrollIndicator {
background: white !important;
}
.navbar {
position: fixed;
top: 0;
z-index: 1;
display: flex;
width: 100%;
height: 70px;
background: rgba(57, 77, 95, 0.7);
z-index: 2;
}
.navbar ul {
display: flex;
list-style: none;
width: 100%;
justify-content: center;
}
.navbar ul li {
margin: 10px;
padding: 5px;
}
.navbar ul li a {
text-decoration: none;
text-transform: uppercase;
color: #f4f4f4;
font-size: 30px;
}
.buttons {
display: flex;
justify-content: center;
}
.buttons .button {
margin: 10px;
display: grid;
place-items: center;
}
<div class="container">
<!-- <nav class="navbar">
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#service">Service</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav> -->
<header id="showcase">
<h1>Welcome!</h1>
<div class="buttons">
<a href="#about" class="button"><span>About</span></a>
<a href="#gallery" class="button"><span>Gallery</span></a>
</div>
</header>
<section id="about">
<h1>About</h1>
</section>
<section id="gallery">
<h1>Gallery</h1>
</section>
<section id="contact">
<h1>Contact</h1>
</section>
</div>
我受到 的启发并创建了以下代码段:
它使用多个背景,将top-layer一个screen-size放在右边,然后将其移入。
非常简单,您可以轻松添加更多图片。代码注释告诉你如何:)
* {
margin: 0;
padding: 0;
}
.container {
width: 100%;
height: 100%;
}
.lead {
font-size: 1.5rem;
}
.navbar {
position: fixed;
top: 0;
z-index: 1;
display: flex;
width: 100%;
height: 60px;
background: rgba(0, 0, 0, 0.7);
}
.navbar ul {
display: flex;
list-style: none;
width: 100%;
justify-content: center;
}
.navbar ul li {
margin: 0 1rem;
padding: 1rem;
}
.navbar ul li a {
text-decoration: none;
text-transform: uppercase;
color: #f4f4f4;
}
.navbar ul li a:hover {
color: skyblue;
}
section {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
width: 100%;
}
section h1 {
font-size: 4rem;
}
/* Section Images */
section#home {
background: black;
min-height: 100vh;
}
section#gallery {
background: red;
min-height: 100vh;
}
section#about {
background: green;
min-height: 100vh;
}
section#contact {
background: blue;
min-height: 100vh;
}
/* LandingPage.css */
* {
margin: 0;
padding: 0;
}
body {
margin: 0;
padding: 0;
font-family: "Montserrat";
font-size: 17px;
color: #fff;
line-height: 1.6;
}
#showcase {
/*/ Last image first, add 100vw for each additional image. For infinite, make first picture the last /*/
background: url("https://images.unsplash.com/photo-1597390520089-9f46046ea040?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1041&q=80")
300vw 0 no-repeat,
url("https://images.unsplash.com/photo-1521020781921-ce0d582b7665?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80")
200vw 0 no-repeat,
url("https://images.unsplash.com/photo-1597368208802-2bec16fba411?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1051&q=80")
100vw 0 no-repeat,
url("https://images.unsplash.com/photo-1597390520089-9f46046ea040?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1041&q=80")
0 0 no-repeat;
/*/ For every image, one cover /*/
background-size: cover, cover, cover, cover;
height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
padding: 0 20px;
animation: slide-right 8s forwards 1s infinite;
}
/*/ For four pictures, make keyframes at 0%, 25%, 75%, 100%, for 6 pictures make 0%, 20%, 40%, 60%, 80%, 100% etc./*/
@keyframes slide-right {
0% {
/*/ Add one 100vw 0 for each picture at every stage. It's always like a reverse stairway downwards /*/
/* 3 100vw's*/
background-position: 100vw 0, 100vw 0, 100vw 0, 0 0;
}
33% {
/*2 100vw's*/
background-position: 100vw 0, 100vw 0, 0 0, 0 0;
}
66% {
/* 1 100vw'*/
background-position: 100vw 0, 0 0, 0 0, 0 0;
}
100% {
/* The end - none left :)*/
background-position: 0 0, 0 0, 0 0;
}
}
#showcase h1 {
font-size: 50px;
line-height: 1.2;
}
#showcase p {
font-size: 20px;
color: #fff;
}
#showcase .button {
font-size: 18px;
text-decoration: none;
color: #fff;
border: #fff 1px solid;
padding: 10px 20px;
border-radius: 10px;
margin-top: 20px;
}
.main-section div.iScrollIndicator {
background: white !important;
}
.navbar {
position: fixed;
top: 0;
z-index: 1;
display: flex;
width: 100%;
height: 70px;
background: rgba(57, 77, 95, 0.7);
z-index: 2;
}
.navbar ul {
display: flex;
list-style: none;
width: 100%;
justify-content: center;
}
.navbar ul li {
margin: 10px;
padding: 5px;
}
.navbar ul li a {
text-decoration: none;
text-transform: uppercase;
color: #f4f4f4;
font-size: 30px;
}
.buttons {
display: flex;
justify-content: center;
}
.buttons .button {
margin: 10px;
display: grid;
place-items: center;
}
<div class="container">
<!-- <nav class="navbar">
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#service">Service</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav> -->
<header id="showcase">
<h1>Welcome!</h1>
<div class="buttons">
<a href="#about" class="button"><span>About</span></a>
<a href="#gallery" class="button"><span>Gallery</span></a>
</div>
</header>
<section id="about">
<h1>About</h1>
</section>
<section id="gallery">
<h1>Gallery</h1>
</section>
<section id="contact">
<h1>Contact</h1>
</section>
</div>
尝试重新排列 animation
部分中的 background-position
,其中数字以视口宽度 (vw
) 为单位。
如果background
中有3张图片就会像下面这样
100vw 0, 100vw 0, 0 0
100vw 0, 0 0, 0 0
0 0, 0 0, 0 0
您也可以简单地添加 scroll-behavior
property in your code on <html>
tag in order to make smooth
滚动,这也使页面在发生滚动事件时看起来更漂亮。
例子
html{scroll-behavior: smooth;}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
color: #fff;
}
section,
#showcase {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
section#gallery,
section#home,
section#about,
section#contact,
#showcase{min-height: 100vh;}
section{width: 100%;}
section h1 {font-size: 4rem;}
section#home {background: black;}
section#gallery {background: red;}
section#about {background: green;}
section#contact {background: blue;}
#showcase {
background: url("https://images.unsplash.com/photo-1597390520089-9f46046ea040?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1041&q=80")
200vw 0 no-repeat,
url("https://images.unsplash.com/photo-1597368208802-2bec16fba411?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1051&q=80")
100vw 0 no-repeat,
url("https://images.unsplash.com/photo-1597390520089-9f46046ea040?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1041&q=80")
0 0 no-repeat;
background-size: cover;
animation: slide-right 5s ease-in-out infinite;
}
@keyframes slide-right {
0% {background-position: 100vw 0, 100vw 0, 0 0;}
60% {background-position: 100vw 0, 0 0, 0 0;}
100% {background-position: 0 0, 0 0, 0 0;}
}
#showcase h1 {font-size: 50px;}
#showcase .button {
font-size: 18px;
text-decoration: none;
border: #fff 1px solid;
padding: 10px 20px;
border-radius: 10px;
margin-top: 20px;
}
.buttons {
display: flex;
justify-content: center;
}
.buttons .button {margin: 10px;}
<html>
<div class="container">
<header id="showcase">
<h1>Welcome!</h1>
<div class="buttons">
<a href="#about" class="button"><span>About</span></a>
<a href="#gallery" class="button"><span>Gallery</span></a>
</div>
</header>
<section id="about">
<h1>About</h1>
</section>
<section id="gallery">
<h1>Gallery</h1>
</section>
<section id="contact">
<h1>Contact</h1>
</section>
</div>
</html>
我也编辑了太多以避免代码中不必要的东西和 DRY(不要重复自己),但我希望你会发现它有用。
我的着陆页上有两张图片,它们使用默认的淡入淡出动画来回切换。我的第一个问题是我想使用滑动动画,但我没有找到任何更改它的选项。我的第二个问题是 淡入淡出动画仅适用于 chrome。有什么办法可以在其他浏览器中解决这个问题吗?
我的代码:
/* basicStyle.css */
* {
margin: 0;
padding: 0;
}
.container {
width: 100%;
height: 100%;
}
.lead {
font-size: 1.5rem;
}
.navbar {
position: fixed;
top: 0;
z-index: 1;
display: flex;
width: 100%;
height: 60px;
background: rgba(0, 0, 0, 0.7);
}
.navbar ul {
display: flex;
list-style: none;
width: 100%;
justify-content: center;
}
.navbar ul li {
margin: 0 1rem;
padding: 1rem;
}
.navbar ul li a {
text-decoration: none;
text-transform: uppercase;
color: #f4f4f4;
}
.navbar ul li a:hover {
color: skyblue;
}
section {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
width: 100%;
}
section h1 {
font-size: 4rem;
}
/* Section Images */
section#home {
background: black;
min-height: 100vh;
}
section#gallery {
background: red;
min-height: 100vh;
}
section#about {
background: green;
min-height: 100vh;
}
section#contact {
background: blue;
min-height: 100vh;
}
/* LandingPage.css */
* {
margin: 0;
padding: 0;
}
body {
margin: 0;
padding: 0;
font-family: 'Montserrat';
font-size: 17px;
color: #fff;
line-height: 1.6;
}
#showcase {
background: url('https://images.unsplash.com/photo-1597368208802-2bec16fba411?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1051&q=80')
100vw 0 no-repeat,
url('https://images.unsplash.com/photo-1597390520089-9f46046ea040?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1041&q=80')
0 0 no-repeat;
background-size: cover;
background-position: center;
height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
padding: 0 20px;
animation: slide-right 15s forwards 2s infinite;
}
@keyframes slide-right {
0% {
background-position: 100vw 0, 0 0;
}
50% {
background-position: 0vw 0, 0 0;
}
100% {
background-position: 100vw 0, 0 0;
}
}
#showcase h1 {
font-size: 50px;
line-height: 1.2;
}
#showcase p {
font-size: 20px;
color: #fff;
}
#showcase .button {
font-size: 18px;
text-decoration: none;
color: #fff;
border: #fff 1px solid;
padding: 10px 20px;
border-radius: 10px;
margin-top: 20px;
}
.main-section div.iScrollIndicator {
background: white !important;
}
.navbar {
position: fixed;
top: 0;
z-index: 1;
display: flex;
width: 100%;
height: 70px;
background: rgba(57, 77, 95, 0.7);
z-index: 2;
}
.navbar ul {
display: flex;
list-style: none;
width: 100%;
justify-content: center;
}
.navbar ul li {
margin: 10px;
padding: 5px;
}
.navbar ul li a {
text-decoration: none;
text-transform: uppercase;
color: #f4f4f4;
font-size: 30px;
}
.buttons {
display: flex;
justify-content: center;
}
.buttons .button {
margin: 10px;
display: grid;
place-items: center;
}
<div class="container">
<!-- <nav class="navbar">
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#service">Service</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav> -->
<header id="showcase">
<h1>Welcome!</h1>
<div class="buttons">
<a href="#about" class="button"><span>About</span></a>
<a href="#gallery" class="button"><span>Gallery</span></a>
</div>
</header>
<section id="about">
<h1>About</h1>
</section>
<section id="gallery">
<h1>Gallery</h1>
</section>
<section id="contact">
<h1>Contact</h1>
</section>
</div>
我受到
它使用多个背景,将top-layer一个screen-size放在右边,然后将其移入。
非常简单,您可以轻松添加更多图片。代码注释告诉你如何:)
* {
margin: 0;
padding: 0;
}
.container {
width: 100%;
height: 100%;
}
.lead {
font-size: 1.5rem;
}
.navbar {
position: fixed;
top: 0;
z-index: 1;
display: flex;
width: 100%;
height: 60px;
background: rgba(0, 0, 0, 0.7);
}
.navbar ul {
display: flex;
list-style: none;
width: 100%;
justify-content: center;
}
.navbar ul li {
margin: 0 1rem;
padding: 1rem;
}
.navbar ul li a {
text-decoration: none;
text-transform: uppercase;
color: #f4f4f4;
}
.navbar ul li a:hover {
color: skyblue;
}
section {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
width: 100%;
}
section h1 {
font-size: 4rem;
}
/* Section Images */
section#home {
background: black;
min-height: 100vh;
}
section#gallery {
background: red;
min-height: 100vh;
}
section#about {
background: green;
min-height: 100vh;
}
section#contact {
background: blue;
min-height: 100vh;
}
/* LandingPage.css */
* {
margin: 0;
padding: 0;
}
body {
margin: 0;
padding: 0;
font-family: "Montserrat";
font-size: 17px;
color: #fff;
line-height: 1.6;
}
#showcase {
/*/ Last image first, add 100vw for each additional image. For infinite, make first picture the last /*/
background: url("https://images.unsplash.com/photo-1597390520089-9f46046ea040?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1041&q=80")
300vw 0 no-repeat,
url("https://images.unsplash.com/photo-1521020781921-ce0d582b7665?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80")
200vw 0 no-repeat,
url("https://images.unsplash.com/photo-1597368208802-2bec16fba411?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1051&q=80")
100vw 0 no-repeat,
url("https://images.unsplash.com/photo-1597390520089-9f46046ea040?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1041&q=80")
0 0 no-repeat;
/*/ For every image, one cover /*/
background-size: cover, cover, cover, cover;
height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
padding: 0 20px;
animation: slide-right 8s forwards 1s infinite;
}
/*/ For four pictures, make keyframes at 0%, 25%, 75%, 100%, for 6 pictures make 0%, 20%, 40%, 60%, 80%, 100% etc./*/
@keyframes slide-right {
0% {
/*/ Add one 100vw 0 for each picture at every stage. It's always like a reverse stairway downwards /*/
/* 3 100vw's*/
background-position: 100vw 0, 100vw 0, 100vw 0, 0 0;
}
33% {
/*2 100vw's*/
background-position: 100vw 0, 100vw 0, 0 0, 0 0;
}
66% {
/* 1 100vw'*/
background-position: 100vw 0, 0 0, 0 0, 0 0;
}
100% {
/* The end - none left :)*/
background-position: 0 0, 0 0, 0 0;
}
}
#showcase h1 {
font-size: 50px;
line-height: 1.2;
}
#showcase p {
font-size: 20px;
color: #fff;
}
#showcase .button {
font-size: 18px;
text-decoration: none;
color: #fff;
border: #fff 1px solid;
padding: 10px 20px;
border-radius: 10px;
margin-top: 20px;
}
.main-section div.iScrollIndicator {
background: white !important;
}
.navbar {
position: fixed;
top: 0;
z-index: 1;
display: flex;
width: 100%;
height: 70px;
background: rgba(57, 77, 95, 0.7);
z-index: 2;
}
.navbar ul {
display: flex;
list-style: none;
width: 100%;
justify-content: center;
}
.navbar ul li {
margin: 10px;
padding: 5px;
}
.navbar ul li a {
text-decoration: none;
text-transform: uppercase;
color: #f4f4f4;
font-size: 30px;
}
.buttons {
display: flex;
justify-content: center;
}
.buttons .button {
margin: 10px;
display: grid;
place-items: center;
}
<div class="container">
<!-- <nav class="navbar">
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#service">Service</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav> -->
<header id="showcase">
<h1>Welcome!</h1>
<div class="buttons">
<a href="#about" class="button"><span>About</span></a>
<a href="#gallery" class="button"><span>Gallery</span></a>
</div>
</header>
<section id="about">
<h1>About</h1>
</section>
<section id="gallery">
<h1>Gallery</h1>
</section>
<section id="contact">
<h1>Contact</h1>
</section>
</div>
尝试重新排列 animation
部分中的 background-position
,其中数字以视口宽度 (vw
) 为单位。
如果background
中有3张图片就会像下面这样
100vw 0, 100vw 0, 0 0
100vw 0, 0 0, 0 0
0 0, 0 0, 0 0
您也可以简单地添加 scroll-behavior
property in your code on <html>
tag in order to make smooth
滚动,这也使页面在发生滚动事件时看起来更漂亮。
例子
html{scroll-behavior: smooth;}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
color: #fff;
}
section,
#showcase {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
section#gallery,
section#home,
section#about,
section#contact,
#showcase{min-height: 100vh;}
section{width: 100%;}
section h1 {font-size: 4rem;}
section#home {background: black;}
section#gallery {background: red;}
section#about {background: green;}
section#contact {background: blue;}
#showcase {
background: url("https://images.unsplash.com/photo-1597390520089-9f46046ea040?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1041&q=80")
200vw 0 no-repeat,
url("https://images.unsplash.com/photo-1597368208802-2bec16fba411?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1051&q=80")
100vw 0 no-repeat,
url("https://images.unsplash.com/photo-1597390520089-9f46046ea040?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1041&q=80")
0 0 no-repeat;
background-size: cover;
animation: slide-right 5s ease-in-out infinite;
}
@keyframes slide-right {
0% {background-position: 100vw 0, 100vw 0, 0 0;}
60% {background-position: 100vw 0, 0 0, 0 0;}
100% {background-position: 0 0, 0 0, 0 0;}
}
#showcase h1 {font-size: 50px;}
#showcase .button {
font-size: 18px;
text-decoration: none;
border: #fff 1px solid;
padding: 10px 20px;
border-radius: 10px;
margin-top: 20px;
}
.buttons {
display: flex;
justify-content: center;
}
.buttons .button {margin: 10px;}
<html>
<div class="container">
<header id="showcase">
<h1>Welcome!</h1>
<div class="buttons">
<a href="#about" class="button"><span>About</span></a>
<a href="#gallery" class="button"><span>Gallery</span></a>
</div>
</header>
<section id="about">
<h1>About</h1>
</section>
<section id="gallery">
<h1>Gallery</h1>
</section>
<section id="contact">
<h1>Contact</h1>
</section>
</div>
</html>
我也编辑了太多以避免代码中不必要的东西和 DRY(不要重复自己),但我希望你会发现它有用。