Several components in the Obsidian API, such as the [[Settings]], expose _container elements_: ```ts import { App, PluginSettingTab } from "obsidian"; class ExampleSettingTab extends PluginSettingTab { plugin: ExamplePlugin; constructor(app: App, plugin: ExamplePlugin) { super(app, plugin); this.plugin = plugin; } display(): void { // highlight-next-line let { containerEl } = this; // ... } } ``` Container elements are `HTMLElement` objects that make it possible to create custom interfaces within Obsidian. ## Create HTML elements using `createEl()` Every `HTMLElement`, including the container element, exposes a `createEl()` method that creates an `HTMLElement` under the original element. For example, here's how you can add an `<h1>` heading element inside the container element: ```ts containerEl.createEl("h1", { text: "Heading 1" }); ``` `createEl()` returns a reference to the new element: ```ts const book = containerEl.createEl("div"); book.createEl("div", { text: "How to Take Smart Notes" }); book.createEl("small", { text: "Sönke Ahrens" }); ``` ## Style your elements You can add custom CSS styles to your plugin by adding a `styles.css` file in the plugin root directory. To add some styles for the previous book example: ```css title="styles.css" .book { border: 1px solid var(--background-modifier-border); padding: 10px; } .book__title { font-weight: 600; } .book__author { color: var(--text-muted); } ``` > [!tip] > `--background-modifier-border` and `--text-muted` are [CSS variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties) that are defined and used by Obsidian itself. If you use these variables for your styles, your plugin will look great even if the user has a different theme! 🌈 To make the HTML elements use the styles, set the `cls` property for the HTML element: ```ts const book = containerEl.createEl("div", { cls: "book" }); book.createEl("div", { text: "How to Take Smart Notes", cls: "book__title" }); book.createEl("small", { text: "Sönke Ahrens", cls: "book__author" }); ``` Now it looks much better! 🎉 ![[styles.png]] ### Conditional styles Use the `toggleClass` method if you want to change the style of an element based on the user's settings or other values: ```ts element.toggleClass("danger", status === "error"); ```