模糊到清晰
元素从模糊状态逐渐变清晰并淡入,营造柔和的过渡入场效果。
交互预览
动效定义与代码
{
"slug": "blur-in",
"name": "模糊到清晰",
"nameEn": "Blur In",
"description": "元素从模糊状态逐渐变清晰并淡入,营造柔和的过渡入场效果。",
"descriptionEn": "Element transitions from blurred to sharp while fading in, creating a soft focus entrance effect.",
"category": "transition",
"tags": [
"blur",
"focus",
"entrance",
"transition"
],
"trigger": "on-mount",
"difficulty": "beginner",
"duration": "500ms",
"easing": "cubic-bezier(0.16, 1, 0.3, 1)",
"cssProperties": [
"opacity",
"filter"
],
"isGPUAccelerated": true,
"previewBg": "light",
"keywords": [
"blur",
"focus",
"sharp",
"entrance",
"transition",
"soft"
],
"useCases": [
"Image reveal",
"Page transition effect",
"Modal content entrance",
"Background image loading"
],
"relatedAnimations": [
"fade-in-up",
"scale-in"
],
"recommendedStyles": [
"glassmorphism",
"soft-ui",
"apple-style"
],
"codeSnippets": [
{
"label": "CSS Keyframes",
"language": "css",
"code": "@keyframes blur-in {\n from {\n opacity: 0;\n filter: blur(10px);\n }\n to {\n opacity: 1;\n filter: blur(0px);\n }\n}\n\n.blur-in {\n --sk-duration: 500ms;\n --sk-delay: 0ms;\n --sk-ease: cubic-bezier(0.16, 1, 0.3, 1);\n will-change: filter, opacity;\n animation: blur-in var(--sk-duration) var(--sk-ease) var(--sk-delay) both;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .blur-in {\n animation: none;\n opacity: 1;\n transform: none;\n }\n}"
},
{
"label": "Tailwind CSS",
"language": "css",
"code": "@keyframes blur-in {\n from {\n opacity: 0;\n filter: blur(10px);\n }\n to {\n opacity: 1;\n filter: blur(0px);\n }\n}\n\n@utility animate-blur-in {\n --sk-duration: 500ms;\n --sk-delay: 0ms;\n --sk-ease: cubic-bezier(0.16, 1, 0.3, 1);\n will-change: filter, opacity;\n animation: blur-in var(--sk-duration) var(--sk-ease) var(--sk-delay) both;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .blur-in {\n animation: none;\n opacity: 1;\n transform: none;\n }\n}"
},
{
"label": "Framer Motion",
"language": "tsx",
"code": "import { motion } from \"framer-motion\";\n\n// Tip: respect user's motion preferences\n// import { useReducedMotion } from \"framer-motion\";\n// const reduced = useReducedMotion();\n// Use reduced ? { opacity: 0 } : { opacity: 0, filter: \"blur(10px)\" } for initial\n\n<motion.div\n initial={{ opacity: 0, filter: \"blur(10px)\" }}\n animate={{ opacity: 1, filter: \"blur(0px)\" }}\n transition={{ duration: 0.5, ease: [0.16, 1, 0.3, 1] }}\n>\n Content\n</motion.div>"
}
]
}