React Slick 自定义旋转木马与图像重叠 div

React Slick Custom Carousel with image overlap a div

我正在尝试制作这样的旋转木马。

但是我不知道如何让图像像图片一样重叠在div的顶部。 我也不知道如何将按钮放在带有文本的 div 中。 这是我已经做的

这是我的代码 `

import { useState } from "react";
import Slider from "react-slick";
import "./contentcarousel.scss"
import img1 from "./img/feature-checkin.png"
import img2 from "./img/feature-scanqr.png"
const ContentCarousel = (props) => {
  const [slides, setSlides] = useState([1, 2]);
  const [data, setData] = useState([
    ["Step 1","On your Home tab, Check In as you click on the coin available that day.",img1],
    ["Step 2","Your Check In is Successful! Come back tomorrow for more reward points.",img2]
  ])
  const [button, setButton] = useState("left")

  const create = () => {
    setSlides([1, 2])
    setData([
      ["Step 1","On your Home tab, Check In as you click on the coin available that day.",img1],
      ["Step 2","Your Check In is Successful! Come back tomorrow for more reward points.",img2]
    ])
    setButton("left")
  }
  const pause = () => {
    setSlides([1, 2])
    setData([
      ["Step 1","On your Reward tab, Select Mission.",img1],
      ["Step 2","Select on Weekly, Biweekly, or Monthly to see the missions and its Progress. When the mission is accomplished, you can Collect Point.",img2]
    ])
    setButton("middle")
  }
  const stop = () => {
    setSlides([1, 2])
    setData([
      ["Step 1","On your Reward tab, Select Redeem Point.",img1],
      ["Step 2","Claim the vouchers that you want.",img2]
    ])
    setButton("right")
  }
  const settings = {
    dots: true,
    infinite: true,
    speed: 500,
    slidesToShow: 1,
    slidesToScroll: 1,
    customPaging: (i) => (
      <div
        style={{
          left: "10px",
          width: "10px",
          height: "10px",
          borderRadius: "20px",
          backgroundColor: "#c4c4c4"
        }}
      ></div>
    ),
  };
  return (
    <div className="content-carousel p-5">
      <div className="mb-4">
        {button === "left" ?  
          <button className="px-3 py-1 btn-carousel-left btn-carousel-active" onClick={create}>
            Create
          </button>:
            <button className="px-3 py-1 btn-carousel-left " onClick={create}>
            Create
          </button>
        }
        {button === "middle" ?  
          <button className="px-3 py-1 btn-carousel-middle btn-carousel-active" onClick={pause}>
            Pause
          </button> :
          <button className="px-3 py-1 btn-carousel-middle" onClick={pause}>
            Pause
          </button>
        }
        {button === "right" ?  
          <button className="px-3 py-1 btn-carousel-right btn-carousel-active" onClick={stop}>
            Stop
          </button> :
          <button className="px-3 py-1 btn-carousel-right" onClick={stop}>
            Stop
          </button>
        }
      </div>

      <Slider {...settings}>
        {slides.map(function(slide) {
          return (
            <div className="content-carousel-card p-5" key={slide}>
              <div className="text-box p-5">
                  <h3 style={{fontSize:"20px"}}>{data[slide-1][0]}</h3>
                  <h3 style={{fontSize:"20px"}} className="b-700">{data[slide-1][1]}</h3>
              </div>
              <div className="img-box">
                <img src={data[slide-1][2]} alt=""/>
              </div>
            </div>
          );
        })}
      </Slider>
    </div>
  )
}

export default ContentCarousel

这是我的 css(使用 sass)

    @import '../../../../asset/css/variables';
    .content-carousel{
        // carousel content css
        .btn-carousel-left{
            background-color: #E9F2F6;
            color:$primaryColor;
            border: none;
            border-radius: 5px 0px 0px 5px;
        }
        .btn-carousel-right{
            background-color: #E9F2F6;
            color:$primaryColor;
            border: none;
            border-radius: 0px 5px 5px 0px;
        }
        .btn-carousel-middle{
            border-left: 1px solid $primaryColor;
            border-right: 1px solid $primaryColor;
            background-color: #E9F2F6;
            color:$primaryColor;
            border: none;
            border-left: 1px solid $primaryColor;
            border-right: 1px solid $primaryColor;
        }
        .btn-carousel-active{
            color:white;
            background-color: $primaryColor;
        }
        
    .content-carousel-card{
        position:relative;
        
        .text-box{
            border: 1px solid rgba(0, 0, 0, 0.05);
            box-sizing: border-box;
            box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25), inset 0px 4px 4px rgba(0, 0, 0, 0.25);
            border-radius: 50px;
        }
    
        .img-box {
            position: absolute;
            top: 0;
            right: 0;
          }
        
    // ---------------slick dots-----------
        .slick-dots {
            display: flex !important;
            justify-content: center;
        }
        
        li.slick-active div {
            background-color: #F4C14F !important;
        }
}
}

希望大家能帮我解决css的问题 先谢谢你了!

我主要使用CSS Flexbox实现了你的设计。

<Slider {...settings}>
  {slides.map(function (slide) {
    return (
      <div className="content-carousel-card p-5" key={slide}>
        {/* Add this wrapper to handle the style of the item */}
        <div className="card-content-wrapper">
          <div className="text-box p-5">
            <h3 style={{ fontSize: "20px" }}>{data[slide - 1][0]}</h3>
            <h3 style={{ fontSize: "20px" }} className="b-700">
              {data[slide - 1][1]}
            </h3>
          </div>
          <div className="img-box">
            <img src={data[slide - 1][2]} alt="" width="200" height="300" />
          </div>
        </div>
      </div>
    );
  })}
</Slider>;
.content-carousel {
  max-width: 900px;
  margin: 0 auto;
  position: relative;
  z-index: 1;

  .slick-controls {
    position: absolute;
    z-index: 1;
    top: 53px;
    left: 60px;
  }

  .content-carousel-card {
    .card-content-wrapper {
      display: flex;
      justify-content: space-between;
      align-items: center;
      position: relative;
      z-index: 1;
      padding: 0 60px;

      &:before {
        content: '';
        display: block;
        position: absolute;
        z-index: 1;
        width: calc(100% - 2px);
        height: calc(100% - 50px);
        top: 50%;
        transform: translateY(-50%);
        border: 1px solid #000;
        left: 0px;
        border-radius: 50px;
      }

      .text-box {
        padding-right: 50px;
      }
    }
  }
}

注意 - 请谨慎对待您的内容。在部署到生产环境之前,请始终使用最坏情况检查此布局。

https://codesandbox.io/s/elated-raman-lvq34?file=/src/contentcarousel.scss

如果您需要进一步的支持,请告诉我。