javascript 如何在已设置样式的构件中执行条件悬停?

dy2hfwbg  于 2023-01-04  发布在  Java
关注(0)|答案(4)|浏览(93)

我有一个组件,基于某些 prop ,我希望能够改变悬停的背景。但基于其他 prop ,悬停应该什么都不做。这可能吗?

export const Container = styled.div`

    &:hover {
        background: ${({ shouldHover }) => shouldHover ? 'red' : '' };
    }
`

然而,这并不起作用。有什么建议可以这样做吗?

2j4z5cfb

2j4z5cfb1#

这将工作:

export const Container = styled.div`
    ${ props => props.shouldHover 
        ? '&:hover { background: red }' 
        : ''
    }
`;
kuhbmx9i

kuhbmx9i2#

您可以尝试类似以下的方法,这可能会有所帮助:

import styled, { css } from 'styled-components'

styled.div`
   ${props => props.shouldHover && css`
      &:hover {
        background: 'red';
      }
   `}
`
juud5qan

juud5qan3#

这对我有用

import React from "react";
import ReactDOM from "react-dom";
import styled from "styled-components";
const Container = styled.div`
  & > h2 {
    &:hover {
      background: ${props => (props.shouldHover ? "red" : "none")};
    }
  }
`;
function App({ shouldHover }) {
  return (
    <Container shouldHover>
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic shappen!</h2>
    </Container>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App shouldHover />, rootElement);

Codesandbox

hts6caw3

hts6caw34#

你可以根据你传递的 prop 来设置背景。下面是一个例子,div根据多个不同的条件而改变。

const Container = styled.div`
  background: blue;

  &:hover {
    background: ${props => props.shouldHoverRed 
      ? 'red'
      : props.shouldHoverGreen
      ? 'green'
      : props.shouldHoverOrange
      ? 'orange'
      : 'blue'
    };
  }
`

默认为蓝色,根据传递的 prop ,悬停时会呈现不同的背景颜色。

相关问题