--- title: 'HTML with html!' description: 'Its HTML but not quite!' comment: 'Keep this file as short and simple as possible. Its purpose is to ease the reader into components in Yew instead of providing proper API docs' --- import Tabs from '@theme/Tabs' import TabItem from '@theme/TabItem' You can write expressions resembling HTML with the `html!` macro. Behind the scenes, Yew turns it into rust code representing the DOM to generate. ```rust use yew::prelude::*; let my_header: Html = html! { Girl in a jacket }; ``` Similar to format expressions, there is an easy way to embed values from the surrounding context into the HTML by applying curly brackets: ```rust use yew::prelude::*; let header_text = "Hello world".to_string(); let header_html: Html = html! {

{header_text}

}; let count: usize = 5; let counter_html: Html = html! {

{"My age is: "}{count}

}; let combined_html: Html = html! {
{header_html}{counter_html}
}; ``` One major rule comes with the use of `html!` - you can only return 1 wrapping node. To render a list of multiple elements, `html!` allows fragments. Fragments are tags without a name, that produce no HTML element by themselves. ```rust , compile_fail use yew::html; // error: only one root HTML element allowed html! {

}; ```
```rust use yew::html; // fixed: using HTML fragments html! { <>

}; ```
We will introduce Yew and HTML further in depth in [more HTML](concepts/html/introduction.mdx).