Working with TinyMCE—a rich text editor (RTE) that directly interacts with the DOM and converts content into HTML—I've come to realize that HTML is more than just the basics like <div>
, <p>
, and <img>
. There are several advanced features that can significantly enhance our web development projects, improving not only functionality but also accessibility and security. Unfortunately, many of us overlook these powerful tools. That's why I've put together a list of 10 HTML features you might not be usingm but should definitely consider incorporating into your work.
1. Template Element
I've found the <template>
element incredibly useful for defining reusable HTML that isn't rendered until needed. It's great for managing dynamic content more efficiently. Since the content inside <template>
isn't displayed until invoked, it can help reduce the initial page load and improve performance.
Example:
<template id="myTemplate">
<div class="modal">
<p>Template content goes here.</p>
</div>
</template>
Security Tip: When I use the <template>
element to inject content dynamically, I always ensure that the content is sanitized to prevent XSS (Cross-Site Scripting) attacks.
2. Mark Element
To highlight important text, I use the <mark>
element. It's a simple but effective way to draw attention to key points in content. For users with assistive technologies, like screen readers, the <mark>
element helps emphasize important information within the text.
Example:
<p>The term <mark>highlighted</mark> is important in this context.</p>
Accessibility Tip: The <mark>
element is automatically announced by screen readers, so it's a good way to ensure key information isn't missed by users relying on these technologies.
3. Picture Element
When I want to ensure images are responsive and look great on all devices, I turn to the <picture>
element. It allows me to specify multiple image sources, so I can serve the most appropriate one based on the user's device. It's essential for improving load times and user experience.
Example:
<picture>
<source media="(min-width: 800px)" srcset="large.jpg">
<source media="(min-width: 400px)" srcset="medium.jpg">
<img src="small.jpg" alt="Responsive Image">
</picture>
Accessibility Tip: I always include the alt
attribute for images, ensuring that all users can understand the content, even if they cannot see the image.
4. Details and Summary Elements
To create expandable content sections, I use the <details>
and <summary>
elements. They're perfect for FAQs or collapsible sections, helping keep web pages clean and user-friendly. These elements also enhance accessibility by allowing users to control the display of additional content without relying on JavaScript.
Example:
<details>
<summary>More Information</summary>
<p>This is the hidden content that will be revealed when you click on "More Information".</p>
</details>
Accessibility Consideration: The <details>
and <summary>
elements provide a semantic way to create collapsible content, ensuring that assistive technologies correctly interpret the relationship between the summary and the details.
5. Dialog Element
The <dialog>
element is a native way to create modals without relying on external JavaScript libraries. I find it perfect for alerts, confirmation dialogs, or custom pop-ups. Beyond its ease of use, the <dialog>
element is more accessible than many custom modal implementations, as it's designed with built-in focus management.
Example:
<dialog id="myDialog">
<p>This is a modal dialog</p>
<button onclick="document.getElementById('myDialog').close()">Close</button>
</dialog>
<button onclick="document.getElementById('myDialog').showModal()">Open Dialog</button>
Accessibility Consideration: The <dialog>
element automatically manages focus when it opens, which is crucial for users navigating with a keyboard or screen reader.
6. Output Element
I use the <output>
element to display results of calculations or user interactions directly within forms. It's a straightforward way to enhance form interactivity without heavy JavaScript and ensures that assistive technologies can correctly interpret the content.
Example:
<form oninput="result.value=parseInt(a.value)+parseInt(b.value)">
<input type="number" id="a" value="0"> +
<input type="number" id="b" value="0">
= <output name="result" for="a b">0</output>
</form>
Accessibility Consideration: The <output>
element can be programmatically linked to form elements, allowing screen readers to announce the result as it changes.
7. Data Element
The <data>
element helps me associate machine-readable values with human-readable content. This is particularly useful for SEO and making content more understandable for search engines, which can then present it more accurately in search results.
Example:
<p>Price: <data value="49.99">$49.99</data></p>
Security Note: When displaying data linked to backend systems, I ensure that the data presented is sanitized and free from vulnerabilities that could expose sensitive information.
8. Meter Element
If I need to represent a measurement within a known range, I use the <meter>
element. Whether it's disk usage or progress tracking, it provides a clear, visual representation. The <meter>
element is also accessible, offering an easy-to-understand display of numeric values for all users.
Example:
<meter value="70" min="0" max="100">70%</meter>
Accessibility Tip: I always provide context around the <meter>
element, so that users with assistive devices understand what the measurement represents.
9. Time Element
To accurately represent dates and times, I use the <time>
element. This not only makes content more accessible but also enhances how search engines interpret temporal data. It's especially important for screen readers.
Example:
<time datetime="2024-08-15">August 15, 2024</time>
Accessibility Tip: Using the datetime
attribute provides a machine-readable format, which can be easily interpreted by assistive technologies.
10. Progress Element
The <progress>
element lets me display the completion progress of tasks like downloads or submissions. It's a straightforward way to offer real-time feedback to users and ensures that assistive technologies can announce progress updates.
Example:
<progress value="70" max="100">70%</progress>
Accessibility Consideration: Pairing the <progress>
element with an aria-label
or similar attribute provides context to users of screen readers about what the progress represents.
I'd love to hear how these tips help improve your workflow. Want to explore more tips and enhance your content creation experience? Check out the TinyMCE blog for insights, best practices, and tutorials, or start your journey with TinyMCE by signing up for a 14-day free trial today!
Top comments (10)
Nice, but was nicer to attach an example of each, but for sure, I'll try these tags.
A tip: while using the
<dialog>
element, you don't need to have the close button specifying an on click. Instead, just put the close button inside a<form method="dialog"> … </form>
element, and html handles it for you.Interesting ideas! Thanks for sharing :)
💫
As a blind person who knows HTML and is learning JavaScript, and who wants to code accessible software, I find this to be very helpful, and I love that you discuss accessibility.
Thanks Lanie!
❤
How would you implement
<template>
?With JavaScript, you can use
<template>
elements to swiftly generate blocks of HTML. For example:Há alguma página com essas tags empregadas pra vermos o funcionamento?