[解決済み] MUIでカスタムアニメーションエフェクト@keyframesを適用する方法は?
2022-02-17 19:05:31
質問
CSSでアニメーションを使用することを学びました。
@keyframe
. しかし、私は自分のReactプロジェクトにカスタムアニメーションのコードを書きたいと思っています(MUIを使用)。私の課題は、私のアニメーションをカスタマイズするために、どのようにJavascriptコードを書くことができるかということです。
makeStyle()
をMUIに追加しました。
パーセンテージでトランジション処理をカスタムできるようにしたい。
今回はMUIで。にこんな感じのコードを書けるようにしたい。
makeStyle()
が、その方法がわからないようです。
@keyframes myEffect {
0%{
opacity:0;
transform: translateY(-200%);
}
100% {
opacity:1;
transform: translateY(0);
}
}
解決方法は?
以下は
keyframes
の構文は
makeStyles
:
import React from "react";
import ReactDOM from "react-dom";
import { makeStyles } from "@material-ui/core/styles";
import Button from "@material-ui/core/Button";
import clsx from "clsx";
const useStyles = makeStyles(theme => ({
animatedItem: {
animation: `$myEffect 3000ms ${theme.transitions.easing.easeInOut}`
},
animatedItemExiting: {
animation: `$myEffectExit 3000ms ${theme.transitions.easing.easeInOut}`,
opacity: 0,
transform: "translateY(-200%)"
},
"@keyframes myEffect": {
"0%": {
opacity: 0,
transform: "translateY(-200%)"
},
"100%": {
opacity: 1,
transform: "translateY(0)"
}
},
"@keyframes myEffectExit": {
"0%": {
opacity: 1,
transform: "translateY(0)"
},
"100%": {
opacity: 0,
transform: "translateY(-200%)"
}
}
}));
function App() {
const classes = useStyles();
const [exit, setExit] = React.useState(false);
return (
<>
<div
className={clsx(classes.animatedItem, {
[classes.animatedItemExiting]: exit
})}
>
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
<Button onClick={() => setExit(true)}>Click to exit</Button>
</div>
{exit && <Button onClick={() => setExit(false)}>Click to enter</Button>}
</>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
ドキュメンテーション https://cssinjs.org/jss-syntax/?v=v10.0.0#keyframes-animation
Material-UI v5を使い始めた方で、Emotionではなく、Emotionを使った方法を知りたい方へ。
makeStyles
以下は、Emotionを使用して同等のスタイルを実現する方法の一例です。
/** @jsxImportSource @emotion/react */
import React from "react";
import ReactDOM from "react-dom";
import { css, keyframes } from "@emotion/react";
import { useTheme } from "@mui/material/styles";
import Button from "@mui/material/Button";
const myEffect = keyframes`
0% {
opacity: 0;
transform: translateY(-200%);
}
100% {
opacity: 1;
transform: translateY(0);
}
`;
const myEffectExit = keyframes`
0% {
opacity: 1;
transform: translateY(0);
}
100% {
opacity: 0;
transform: translateY(-200%);
}
`;
function App() {
const theme = useTheme();
const animatedItem = css`
animation: ${myEffect} 3000ms ${theme.transitions.easing.easeInOut};
`;
const animatedItemExiting = css`
animation: ${myEffectExit} 3000ms ${theme.transitions.easing.easeInOut};
opacity: 0;
transform: translateY(-200%);
`;
const [exit, setExit] = React.useState(false);
return (
<>
<div css={exit ? animatedItemExiting : animatedItem}>
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
<Button onClick={() => setExit(true)}>Click to exit</Button>
</div>
{exit && <Button onClick={() => setExit(false)}>Click to enter</Button>}
</>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Emotion keyframesのドキュメントです。 https://emotion.sh/docs/keyframes
関連
-
[解決済み】display:noneの反対語はあるのか?
-
[解決済み] :first-child が期待通りに動作しない
-
[解決済み] reactでスティッキーフッターを作るには?
-
[解決済み] DjangoのCSSが更新されない
-
[解決済み] bootstrap 4 でカードブロックの不透明度を変更する方法
-
[解決済み] JavaFX Labelの文字色を変更する方法
-
[解決済み] CSSで0を指定する場合、明示的に単位を表記するべきか、省略するべきか。
-
[解決済み] 幅・高さをピクセル単位からパーセント単位で設定する。
-
[解決済み] .css()を使って!importantを適用するには?
-
[解決済み] CSSで複数のtransformを適用するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜ私のdivは重なっているのですか?
-
[解決済み] CSS無効なプロパティ値?
-
[解決済み] iframe 要素の scrolling 属性は廃止されました。代わりにCSSを使用してください。
-
[解決済み] ChromeでCSSカスタムスタイルのボタンから青枠を削除する
-
[解決済み] CSS - div から画面の幅いっぱいまでオーバーフローさせる方法
-
[解決済み] Bootstrap 4のナバーボタンのアイコンの色を変更するにはどうすればよいですか?
-
[解決済み] css グリッドによる垂直・水平方向の中央揃え 4x4 正方形グリッド
-
[解決済み] 特定のdivを右へ移動させたい
-
[解決済み] 幅・高さをピクセル単位からパーセント単位で設定する。
-
[解決済み] 高さと幅はspanには適用されないのですか?