css - React and Tailwind: Hover effect on one card causes both cards to expand, even though they have independent hover states -

I am trying to create two cards in React, each with an independent hover effect. When I hover over Card

I am trying to create two cards in React, each with an independent hover effect. When I hover over Card 1, I want only Card 1 to expand, and when I hover over Card 2, I want only Card 2 to expand. However, when I hover over either card, both cards expand.

Here is the code I have:

import React, { useState } from "react";
import card1 from "../assets/Logos/card1.gif";
import card2 from "../assets/Logos/card2.gif";

const Demo = () => {
  // Independent hover states for each card
  const [isHoveredCard1, setIsHoveredCard1] = useState(false);
  const [isHoveredCard2, setIsHoveredCard2] = useState(false);

  return (
    <div className="bg-black grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 gap-36 py-14 px-24">
      {/* Card 1 */}
      <div
        className="bg-black px-6 py-10 rounded-3xl flex flex-col justify-center transition-all duration-500 ease-in-out"
        onMouseEnter={() => setIsHoveredCard1(true)}
        onMouseLeave={() => setIsHoveredCard1(false)}
      >
        <img className="w-16" src={card1} alt="" />
        <h1 className="text-[#7670EA] font-Poppins-Medium text-xl">
          Creativity With Purpose:
        </h1>
        <div
          className={`overflow-hidden transition-all duration-500 ease-in-out ${
            isHoveredCard1 ? "max-h-40" : "max-h-0"
          }`}
        >
          <p className="text-white pt-4">
            We bring ideas to life, crafting innovative and meaningful
            narratives that resonate with your audience.
          </p>
        </div>
      </div>

      {/* Card 2 */}
      <div
        className="bg-black px-6 py-10 rounded-3xl flex flex-col justify-center transition-all duration-500 ease-in-out"
        onMouseEnter={() => setIsHoveredCard2(true)}
        onMouseLeave={() => setIsHoveredCard2(false)}
      >
        <img className="w-16" src={card2} alt="" />
        <h1 className="text-[#F43C3C] font-Poppins-Medium text-xl">
          Client-Service Focused:
        </h1>
        <div
          className={`overflow-hidden transition-all duration-500 ease-in-out ${
            isHoveredCard2 ? "max-h-40" : "max-h-0"
          }`}
        >
          <p className="text-white pt-4">
            Your vision is our mission. We partner with you to create strategies
            that elevate your brand.
          </p>
        </div>
      </div>
    </div>
  );
};

export default Demo;

You can find the output image in this link:

I am trying to create two cards in React, each with an independent hover effect. When I hover over Card 1, I want only Card 1 to expand, and when I hover over Card 2, I want only Card 2 to expand. However, when I hover over either card, both cards expand.

Here is the code I have:

import React, { useState } from "react";
import card1 from "../assets/Logos/card1.gif";
import card2 from "../assets/Logos/card2.gif";

const Demo = () => {
  // Independent hover states for each card
  const [isHoveredCard1, setIsHoveredCard1] = useState(false);
  const [isHoveredCard2, setIsHoveredCard2] = useState(false);

  return (
    <div className="bg-black grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 gap-36 py-14 px-24">
      {/* Card 1 */}
      <div
        className="bg-black px-6 py-10 rounded-3xl flex flex-col justify-center transition-all duration-500 ease-in-out"
        onMouseEnter={() => setIsHoveredCard1(true)}
        onMouseLeave={() => setIsHoveredCard1(false)}
      >
        <img className="w-16" src={card1} alt="" />
        <h1 className="text-[#7670EA] font-Poppins-Medium text-xl">
          Creativity With Purpose:
        </h1>
        <div
          className={`overflow-hidden transition-all duration-500 ease-in-out ${
            isHoveredCard1 ? "max-h-40" : "max-h-0"
          }`}
        >
          <p className="text-white pt-4">
            We bring ideas to life, crafting innovative and meaningful
            narratives that resonate with your audience.
          </p>
        </div>
      </div>

      {/* Card 2 */}
      <div
        className="bg-black px-6 py-10 rounded-3xl flex flex-col justify-center transition-all duration-500 ease-in-out"
        onMouseEnter={() => setIsHoveredCard2(true)}
        onMouseLeave={() => setIsHoveredCard2(false)}
      >
        <img className="w-16" src={card2} alt="" />
        <h1 className="text-[#F43C3C] font-Poppins-Medium text-xl">
          Client-Service Focused:
        </h1>
        <div
          className={`overflow-hidden transition-all duration-500 ease-in-out ${
            isHoveredCard2 ? "max-h-40" : "max-h-0"
          }`}
        >
          <p className="text-white pt-4">
            Your vision is our mission. We partner with you to create strategies
            that elevate your brand.
          </p>
        </div>
      </div>
    </div>
  );
};

export default Demo;

You can find the output image in this link: https://www.filemail/d/guqzjuttbyuvzvu

Share Improve this question edited Jan 19 at 9:35 Kirstie Wilkinson 3041 gold badge2 silver badges11 bronze badges asked Jan 17 at 19:00 kiran balikaikiran balikai 153 bronze badges 1
  • can you please provide a codesandbox if possible? since i'm trying it with some height tweaks like isHoveredCard1 ? 'h-[40vh]' : 'h-0' and it works for me fzyvln.csb.app – Hmmmmm Commented Jan 17 at 19:43
Add a comment  | 

1 Answer 1

Reset to default 1

I would extract the card into its own component so that each card has its own independent state.

i.e. Card component:

const Card = ({ title, description, icon, titleColor }) => {
  const [isHovered, setIsHovered] = useState(false);
  
  return (
    <div
      className="bg-black px-6 py-10 rounded-3xl flex flex-col justify-center transition-all duration-500 ease-in-out"
      onMouseEnter={() => setIsHovered(true)}
      onMouseLeave={() => setIsHovered(false)}
    >
      {/* Card content */}
    </div>
  );
};

Rendering card:

      <Card 
        title="Creativity With Purpose:"
        description="We bring ideas to life..."
        titleColor="text-[#7670EA]"
        icon={card1}
      />
      <Card 
        title="Client-Service Focused:"
        description="Your vision is our mission..."
        titleColor="text-[#F43C3C]"
        icon={card2}
      />

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745347706a4623639.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信