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'); ```