这看起来很简单,但我错过了一些东西,因为我不能让它运行.

我想使用perspective()rotateY()函数的transform来创建元素的透视图.然后使用转换在悬停时更新变换属性的值.并将rotateY()值更改为负值,以从左到右镜像透视效果.

My App.tsx that is not working

我声明了所有样式并将其内联apply.

import React from 'react';
import { Box } from '@mui/material';

const styles = {
    imageCard: {
        display: ' inline-block',
        boxSizing: 'border-box',
        margin: '1rem',
        width: '240px',
        height: '320px',
        padding: '8px',
        borderRadius: '1rem',
        background: 'url(https://picsum.photos/id/1049/240/320)',
        boxShadow: 'rgba(0, 0, 0, 0.25) 0px 25px 50px -12px',
    },

    perspectiveLeft: {
        transform: 'perspective(1500px) rotateY(15deg)',
        transition: 'transform 1s ease 0s',
    },

    'perspectiveLeft:hover': {
        transform: 'perspective(3000px) rotateY(5deg)',
    },

    perspectiveRight: {
        transform: 'perspective(1500px) rotateY(-15deg)',
        transition: 'transform 1s ease 0s',
    },

    'perspectiveRight:hover': {
        transform: 'perspective(3000px) rotateY(-5deg)',
    },
};

function Perspective() {
    return (
        <Box styles={styles.imageCard}>
            <Box style={styles.perspectiveLeft}></Box>
            <Box style={styles.perspectiveRight}></Box>
        </Box>
    );
}

export { Perspective };


推荐答案

在React中有许多不同的方式来实现这些样式,但won't个可用的选项之一是内联样式,因为您无法使用内联样式控制:hover个样式.

一种 Select 是像在代码笔中一样使用CSS类.对于React,您唯一需要更改的是class=...变为className=...:

import "./styles.css";

export default function App() {
  return (
    <div className="card-container">
      <div className="image-card perspective-left"></div>
      <div className="image-card perspective-right"></div>
    </div>
  );
}

Edit perspective cards using CSS classes


由于您试图利用MUI的Box,我猜您可能试图将其纳入使用MUI的项目中,并且可能希望在JS方法中使用CSS,而不是全局CSS类名.下面是使用MUI的styled API的示例.使用MUI实现所委托的情感styled API,这看起来也几乎相同.

import React from "react";
import { styled } from "@mui/material/styles";

const ImageCard = styled("div")`
  display: inline-block;
  box-sizing: border-box;
  margin: 1rem;
  width: 240px;
  height: 320px;
  padding: 8px;
  border-radius: 1rem;
  background: url("https://picsum.photos/id/1049/240/320");
  box-shadow: rgba(0, 0, 0, 0.25) 0px 25px 50px -12px;
`;
const ImageCardLeft = styled(ImageCard)`
  transform: perspective(1500px) rotateY(15deg);
  transition: transform 1s ease 0s;
  &:hover {
    transform: perspective(3000px) rotateY(5deg);
  }
`;
const ImageCardRight = styled(ImageCard)`
  transform: perspective(1500px) rotateY(-15deg);
  transition: transform 1s ease 0s;
  &:hover {
    transform: perspective(3000px) rotateY(-5deg);
  }
`;

export default function Perspective() {
  return (
    <div>
      <ImageCardLeft />
      <ImageCardRight />
    </div>
  );
}

Edit perspective cards

Javascript相关问答推荐

在React中获取数据后,如何避免不必要的组件闪现1秒?

单击子元素时关闭父元素(JS)

使用下表中所示的值初始化一个二维数组

如何在Javascript中的控制台上以一行形式打印循环的结果

单击ImageListItemBar的IconButton后,在Material—UI对话框中显示图像

编剧如何获得一个div内的所有链接,然后判断每个链接是否都会得到200?

从包含数百行的表中获取更改后的值(以表单形式发送到后端)的正确方法是什么?

我怎么在JS里连续加2个骰子的和呢?

在使用位板时,如何在Java脚本中判断Connect 4板中中柱的对称性?

如何在箭头函数中引入or子句?

有效路径同时显示有效路径组件和不存在的路径组件

如何在尚未创建的鼠标悬停事件上访问和着色div?

与在编剧中具有动态价值的定位器交互

如何正确地在ComponentWillUnmount中卸载状态以避免内存泄漏?

连续添加promise 时,如何在所有promise 都已结算时解除加载覆盖

使用静态函数保存 node 前的钩子

Js问题:有没有办法将数据从标记表转换成图表?

This.forceUPDATE并通过Reaction-Router-DOM链接组件传递状态

如何解析/data/build中的Angularnode_modules/chart.js/dist/Chart.js?

如何使用逗号JS从数组中输出数据列表?