📖 Scenario: You are building a simple Svelte component that displays user-generated HTML content safely inside your app.This is common when you want to show formatted text or HTML snippets stored as strings.
🎯 Goal: Create a Svelte component that renders a string containing HTML tags using the {@html} directive.This will show how to insert raw HTML inside your component safely and correctly.
📋 What You'll Learn
Create a variable called htmlContent with a string containing HTML tags
Create a variable called maxLength to limit the displayed content length
Use a computed variable called shortHtml that slices htmlContent to maxLength characters
Render the shortHtml variable inside a <div> using the {@html} directive
💡 Why This Matters
🌍 Real World
Rendering user-generated or dynamic HTML content safely inside web apps is common in blogs, comments, or CMS systems.
💼 Career
Understanding how to use {@html} in Svelte helps you build interactive and dynamic web interfaces that handle rich text content.
Progress0 / 4 steps
1
Create the HTML content variable
Create a variable called htmlContent and set it to the string '<p>Hello, <strong>Svelte</strong> learner!</p>'.
Svelte
Hint
Use let htmlContent = ' followed by the exact HTML string and close with a single quote.
2
Add a maxLength variable
Create a variable called maxLength and set it to 20.
Svelte
Hint
Use let maxLength = 20 to create the variable.
3
Create a sliced HTML variable
Create a variable called shortHtml that slices htmlContent from the start to maxLength characters using htmlContent.slice(0, maxLength).
Svelte
Hint
Use let shortHtml = htmlContent.slice(0, maxLength) to get the sliced string.
4
Render the sliced HTML with {@html}
Inside the Svelte component, add a <div> element that renders the shortHtml variable using the {@html shortHtml} directive.
Svelte
Hint
Use <div>{@html shortHtml}</div> to render the HTML content.
Practice
(1/5)
1. What does the {@html} tag do in a Svelte component?
easy
A. It escapes HTML tags and shows them as plain text.
B. It renders a string as actual HTML inside the component.
C. It creates a new HTML element dynamically.
D. It comments out HTML code so it is not rendered.
Solution
Step 1: Understand {@html} purpose
The {@html} tag tells Svelte to treat the string as HTML, not plain text.
Step 2: Compare with normal rendering
Normally, Svelte escapes HTML tags to show them as text, but {@html} renders them as real HTML.
Final Answer:
It renders a string as actual HTML inside the component. -> Option B
Quick Check:
{@html} = renders HTML [OK]
Hint: Remember {@html} outputs HTML, not plain text [OK]
Common Mistakes:
Thinking {@html} escapes HTML instead of rendering it
Confusing {@html} with creating new elements
Assuming {@html} comments out code
2. Which of the following is the correct syntax to render HTML stored in a variable htmlContent inside a Svelte component?
easy
A. <div>{@html htmlContent}</div>
B. <div>{@html(htmlContent)}</div>
C. <div>{htmlContent}</div>
D. <div>{#html htmlContent}{/html}</div>
Solution
Step 1: Recall correct {@html} syntax
The correct syntax is {@html variableName} without parentheses or block tags.
Step 2: Check each option
<div>{htmlContent}</div> renders as plain text, B uses invalid parentheses, D uses wrong block syntax.
Final Answer:
<div>{@html htmlContent}</div> -> Option A
Quick Check:
Correct {@html} syntax = {@html variable} [OK]
Hint: Use {@html variable} without parentheses or blocks [OK]
Common Mistakes:
Adding parentheses around variable in {@html}
Using block syntax like {#html}{/html}
Not using {@html} and rendering raw string
3. Given this Svelte code:
<script>
let htmlString = '<strong>Hello</strong> <em>World</em>';
</script>
<div>{@html htmlString}</div>
What will be the rendered output in the browser?
medium
A. Hello World (plain text, no formatting)
B. <strong>Hello</strong> <em>World</em> (raw text)
C. HelloWorld (formatted text)
D. An error occurs because of unsafe HTML
Solution
Step 1: Understand {@html} rendering
{@html renders the string as HTML, so tags become real formatting.
Step 2: Analyze the string content
The string contains <strong> and <em> tags, so output will be bold and italic text.
Final Answer:
<strong>Hello</strong> <em>World</em> (formatted text) -> Option C
Quick Check:
HTML string renders as formatted text [OK]
Hint: {@html} renders tags as formatting, not raw text [OK]
Common Mistakes:
Expecting tags to show as text instead of formatting
Assuming plain text output without tags
Thinking unsafe HTML causes runtime error
4. What is the main problem with this Svelte code?
<script>
let unsafeHtml = '';
</script>
<div>{@html unsafeHtml}</div>
medium
A. It can run unsafe scripts and cause security issues (XSS).
B. Svelte automatically sanitizes the HTML, so no problem.
C. The image will not display because of invalid src attribute.
D. It will cause a syntax error because of quotes inside the string.
Solution
Step 1: Identify unsafe HTML usage
The string contains an image with an onerror event that runs JavaScript.
Step 2: Understand {@html} risks
{@html renders raw HTML, so malicious scripts can run causing XSS security issues.
Final Answer:
It can run unsafe scripts and cause security issues (XSS). -> Option A
Quick Check:
{@html with unsafe HTML = security risk [OK]
Hint: Never use {@html} with untrusted content [OK]
Common Mistakes:
Thinking Svelte sanitizes HTML automatically
Assuming syntax error due to quotes inside string
Believing image won't display due to src
5. You want to display user-generated content that may contain HTML tags safely in your Svelte app. Which approach is best?
hard
A. Wrap the user content in a <pre> tag and use {@html}.
B. Escape the user content and render it normally without {@html}.
C. Use {@html} directly on the user content to render formatting.
D. Sanitize the user content to remove unsafe tags, then use {@html}.
Solution
Step 1: Understand risks of raw {@html}
Using {@html} directly on user content risks XSS attacks if content is unsafe.
Step 2: Best practice for safe HTML rendering
Sanitize user content to remove dangerous tags/scripts, then render with {@html} for formatting.
Final Answer:
Sanitize the user content to remove unsafe tags, then use {@html}. -> Option D
Quick Check:
Sanitize first, then {@html} = safe rendering [OK]
Hint: Always sanitize user HTML before {@html} rendering [OK]
Common Mistakes:
Using {@html} directly on raw user input
Escaping content but losing formatting
Using <pre> which shows raw text, not formatted HTML
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.