【发布时间】:2020-09-25 14:08:00
【问题描述】:
我正在使用 Sanity 无头 CMS 开发 React.js/Next.js 项目。
我有一个 hero 元素,它接受一组图像,但希望能够自动循环通过它来创建背景滑块效果。我很想使用光滑的滑块或类似的滑块,但如果可能的话,我想尝试使用纯 CSS 来实现这一点,因为该项目的 webpack 配置不会使导入外部 css 文件变得非常容易。
我的组件...
import React from "react";
import PropTypes from "prop-types";
import styles from "./Hero.module.css";
import client from "../../client";
import SimpleBlockContent from "../SimpleBlockContent";
import Cta from "../Cta";
import imageUrlBuilder from "@sanity/image-url";
const builder = imageUrlBuilder(client);
function Hero(props) {
const { heading, image, tagline, ctas } = props;
const images = props.image;
return (
<div className={styles.root}>
<div className={styles.content}>
<h1 className={styles.title}>{heading}</h1>
<div className={styles.tagline}>{tagline && <SimpleBlockContent blocks={tagline} />}</div>
<div>
{images.map((image) => (
<img
className={styles.image}
src={builder.image(image).url()}
className={styles.image}
alt={heading}
/>
))}
</div>
</div>
</div>
);
}
Hero.propTypes = {
heading: PropTypes.string,
backgroundImage: PropTypes.object,
tagline: PropTypes.array,
ctas: PropTypes.arrayOf(PropTypes.object),
};
export default Hero;
我的 CSS
@import "../../styles/custom-properties.css";
.root {
composes: center from "../../styles/shared.module.css";
position: relative;
color: var(--color-white, #fff);
background: none;
padding-bottom: 2rem;
@media (--media-min-medium) {
padding-bottom: 1rem;
}
}
.content {
width: 100vw;
min-height: 100vh;
padding: 0 1.5em;
box-sizing: border-box;
z-index: 1;
display: flex;
justify-content: center;
align-items: center;
}
.image {
position: absolute;
z-index: -1;
left: 0;
top: 0;
overflow: hidden;
display: block;
width: 100vw;
height: 100vh;
object-fit: cover;
animation: fade 2s infinite;
}
.title {
text-align: center;
text-transform: uppercase;
letter-spacing: 2px;
position: relative;
font-weight: 300;
font-size: var(--font-title2-size);
line-height: var(--font-title2-line-height);
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
margin: 0;
padding: 0;
@media (--media-min-medium) {
font-size: var(--font-title1-size);
line-height: var(--font-title1-line-height);
padding-top: 0;
}
}
@keyframes fade {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
此代码确实淡入淡出数组中的第一个图像,但不会影响“坐在”第一个图像后面的其他图像。
希望这是有道理的,任何帮助将不胜感激!
编辑 - 简化的 StackBlitz 模型
【问题讨论】:
-
如果您在 stackblitz 上分享有关该问题的工作演示会更容易提供帮助
-
感谢@AkberIqbal 添加了一个非常基本的内容,但希望能得到重点
标签: css arrays reactjs animation css-animations