Common action patterns (click-outside, tooltip) in Svelte
📖 Scenario: You are building a simple interactive web component in Svelte. It will show a button that, when clicked, displays a tooltip. The tooltip should disappear when the user clicks anywhere outside the button or tooltip area.
🎯 Goal: Create a Svelte component that uses common action patterns: a clickOutside action to detect clicks outside an element and a tooltip that appears on button click and hides on outside click.
📋 What You'll Learn
Create a Svelte component with a button and a tooltip element
Use a clickOutside action to detect clicks outside the tooltip
Show the tooltip when the button is clicked
Hide the tooltip when clicking outside the tooltip or button
Use Svelte's reactive and action features properly
💡 Why This Matters
🌍 Real World
Click-outside detection and tooltips are common in web apps for menus, popups, and help messages. This pattern improves user experience by closing overlays when clicking elsewhere.
💼 Career
Understanding how to create reusable actions and manage component state in Svelte is valuable for frontend developer roles working with modern frameworks.
Progress0 / 4 steps
1
Set up the initial Svelte component with a button and tooltip container
Create a Svelte component with a <button> element that has the text Show Tooltip and a <div> with class tooltip that contains the text This is a tooltip. Do not add any interactivity yet.
Svelte
Hint
Use a <button> tag with the exact text Show Tooltip and a <div> with class tooltip containing the text This is a tooltip.
2
Add a reactive variable to control tooltip visibility
Add a let variable called showTooltip and set it to false. This will control whether the tooltip is visible or hidden.
Svelte
Hint
Declare let showTooltip = false inside a <script> tag at the top of your Svelte component.
3
Add button click to toggle tooltip visibility and conditionally show tooltip
Add an on:click event to the <button> that sets showTooltip = true. Then, update the <div class="tooltip"> to only render when showTooltip is true using Svelte's {#if} block.
Svelte
Hint
Use on:click={() => showTooltip = true} on the button and wrap the tooltip div inside {#if showTooltip} ... {/if}.
4
Create and use a clickOutside action to hide tooltip on outside clicks
Create a Svelte action called clickOutside that listens for clicks outside the element it is applied to and sets showTooltip = false. Apply this action to the tooltip <div> so that clicking outside hides the tooltip. Also, ensure that clicking the button does not immediately close the tooltip by stopping event propagation.
Svelte
Hint
Define the clickOutside action function that adds and removes a click event listener on the document. Use use:clickOutside on the tooltip div. Also, stop event propagation on the button click to prevent immediate closing.
Practice
(1/5)
1. What is the main purpose of the click-outside action pattern in Svelte?
easy
A. To toggle a checkbox state on click
B. To open a tooltip when hovering over an element
C. To close a menu or popup when the user clicks outside of it
D. To fetch data from an API when clicking a button
Solution
Step 1: Understand the click-outside pattern
This pattern detects clicks outside a specific element to trigger an action, usually closing menus or popups.
Step 2: Match purpose with options
To close a menu or popup when the user clicks outside of it correctly describes closing menus/popups on outside clicks, while others describe unrelated behaviors.
Final Answer:
To close a menu or popup when the user clicks outside of it -> Option C
Quick Check:
click-outside closes menus on outside click = A [OK]
Hint: Click-outside closes popups when clicking outside them [OK]
Common Mistakes:
Confusing click-outside with tooltip behavior
Thinking it toggles element visibility on inside clicks
Assuming it triggers API calls
2. Which of the following is the correct way to use a clickOutside action in a Svelte component?
easy
A.
B.
C.
D.
Solution
Step 1: Recall Svelte action syntax
Svelte actions are used with the use: directive followed by the action name and optional parameters.
Step 2: Identify correct syntax
uses use:clickOutside, which is the correct way to apply an action. Other options misuse event or binding syntax.
Final Answer:
<div use:clickOutside={handleClickOutside}></div> -> Option D
Quick Check:
Actions use 'use:' directive = C [OK]
Hint: Use actions with 'use:' prefix in Svelte [OK]
Common Mistakes:
Using event syntax 'on:' instead of 'use:' for actions
Trying to bind actions with 'bind:'
Passing actions as plain attributes
3. Given this Svelte code snippet using a tooltip action:
What will happen when the user hovers over the button?
medium
A. A tooltip with the text 'Save changes' appears near the button
B. The button text changes to 'Save changes'
C. Nothing happens because the syntax is incorrect
D. The button is disabled
Solution
Step 1: Understand tooltip action usage
The tooltip action shows a small info box with the provided text when hovering or focusing the element.
Step 2: Analyze the code behavior
The button uses use:tooltip with text 'Save changes', so hovering triggers the tooltip display near the button.
Final Answer:
A tooltip with the text 'Save changes' appears near the button -> Option A
Quick Check:
Tooltip shows text on hover = A [OK]
Hint: Tooltip shows text on hover or focus [OK]
Common Mistakes:
Thinking tooltip changes button text
Assuming tooltip disables the button
Believing the syntax is invalid
4. Consider this Svelte snippet using a clickOutside action:
<script>
let open = true;
function close() { open = false; }
</script>
<div use:clickOutside={close} >
{#if open}
<p>Menu content</p>
{/if}
</div>
Why might the menu not close when clicking outside?
medium
A. The clickOutside action is not imported or defined
B. The open variable is not reactive
C. The close function does not set open to true
D. The menu content is inside the div with the action
Solution
Step 1: Check action usage requirements
For use:clickOutside to work, the action must be imported or defined in the component.
Step 2: Identify missing import or definition
The snippet does not show any import or definition of clickOutside, so the action won't run, preventing menu close.
Final Answer:
The clickOutside action is not imported or defined -> Option A
Quick Check:
Missing action import = B [OK]
Hint: Always import or define actions before use [OK]
Common Mistakes:
Assuming variable reactivity is the issue
Confusing function logic with action setup
Ignoring the need to import or define actions
5. You want to create a tooltip that only appears when a button is focused or hovered, and disappears when clicking outside or losing focus. Which combination of Svelte patterns should you use?
hard
A. Use only CSS :hover and :focus styles without any actions
B. Use a tooltip action on the button and a clickOutside action on the tooltip container to hide it
C. Use a tooltip action on the button and toggle visibility with a manual click event
D. Use only a clickOutside action on the button to show and hide the tooltip
Solution
Step 1: Understand tooltip and clickOutside roles
The tooltip action shows info on hover/focus. The clickOutside action detects clicks outside to hide elements like tooltips.
Step 2: Combine actions for desired behavior
Using tooltip on the button shows the tooltip on hover/focus. Using clickOutside on the tooltip container hides it when clicking outside, ensuring it disappears properly.
Final Answer:
Use a tooltip action on the button and a clickOutside action on the tooltip container to hide it -> Option B
Quick Check:
Tooltip + clickOutside combo controls show/hide = D [OK]
Hint: Combine tooltip and clickOutside for show/hide control [OK]
Common Mistakes:
Using only clickOutside to show tooltip
Relying solely on CSS without accessibility
Manually toggling tooltip without outside click detection
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.