Hone logo
Hone
Problems

Vue Transition Component Challenge: Fading In Content

This challenge focuses on implementing a simple fade-in transition using Vue's built-in <transition> component. Transitions are crucial for creating smooth and engaging user experiences, and understanding how to use Vue's transition component is a fundamental skill. You'll be creating a component that displays content with a fade-in effect when it's added or removed from the DOM.

Problem Description

You need to create a Vue component called FadingContent that displays a given message and applies a fade-in transition when the message is rendered or unrendered. The transition should smoothly fade the content in from opacity 0 to opacity 1 when it appears, and fade out from opacity 1 to opacity 0 when it disappears. The component should accept a message prop (string) to determine the content to display.

Key Requirements:

  • message Prop: The component must accept a message prop of type string.
  • Fade-In Transition: When the component is mounted (content appears), a fade-in transition should be applied.
  • Fade-Out Transition: When the component is unmounted (content disappears), a fade-out transition should be applied.
  • CSS Styling: You must use CSS to define the transition effect. The CSS should be included within the component's <style> block.
  • Vue <transition> Component: You must use Vue's built-in <transition> component to manage the transition.

Expected Behavior:

  1. When the FadingContent component is rendered, the message should initially be invisible (opacity: 0).
  2. After a short delay (e.g., 200ms), the message should smoothly fade in to full visibility (opacity: 1).
  3. When the component is removed from the DOM, the message should smoothly fade out to invisibility before being removed.

Edge Cases to Consider:

  • The component should handle empty strings for the message prop gracefully (displaying nothing, but still transitioning).
  • The transition should work correctly regardless of the parent component's styling.

Examples

Example 1:

Input: message = "Hello, Vue!"
Output: The text "Hello, Vue!" fades in smoothly.
Explanation: The component renders, the message fades in from opacity 0 to 1 over a short duration.

Example 2:

Input: message = ""
Output: Nothing is displayed, but the transition still occurs (opacity fades from 0 to 0).
Explanation: The component renders, but the empty string results in no visible content. The transition still applies, fading from opacity 0 to 0.

Example 3:

Input: The component is removed from the DOM.
Output: The previously displayed message fades out smoothly.
Explanation: The component is unmounted, triggering the fade-out transition.

Constraints

  • Transition Duration: The fade-in and fade-out transitions should have a duration of 200ms.
  • CSS Only: You must use CSS for the transition styling. Avoid using JavaScript to directly manipulate opacity.
  • Vue 3: The solution must be compatible with Vue 3.
  • TypeScript: The code must be written in TypeScript.

Notes

  • Consider using the v-enter-active and v-leave-active CSS classes provided by the <transition> component to apply the transition styles.
  • The v-enter-from and v-leave-to classes can be used to define the initial and final states of the transition, respectively.
  • Think about how to structure your CSS to ensure it doesn't interfere with other styles in your application. Scoped styles are recommended.
  • Focus on creating a clean and readable component that adheres to Vue's best practices.
Loading editor...
typescript