TIL – HTML Details Element

#TIL

Today I learned about HTML’s native accordion-like functionality, encapsulated by the details element.

I’m sorry, James. Did you just say HTML has a built-in accordion???

I know! I couldn’t believe it either. MIND BLOWN.

The HTML …


This content originally appeared on DEV Community and was authored by James Cox

#TIL

Today I learned about HTML's native accordion-like functionality, encapsulated by the details element.

Sawyer from Lost slowly removing his glasses looking at something in the distance.

I'm sorry, James. Did you just say HTML has a built-in accordion???

I know! I couldn't believe it either. MIND BLOWN.

The HTML Details Element <details> creates a disclosure widget in which information is visible only when the widget is toggled into an "open" state. A summary or label must be provided using the element.

Let's slow our roll ...

While very cool, it is far from a perfect solution, in my opinion. Support for animation is limited, and requires a decent amount of JavaScript and CSS to work correctly.

There are certainly better options in terms of design and functionality, especially if you are using a design library like Bootstrap, Material UI or something similiar.

With that said, let's see it in action!

The Accordion

The Code

import "./styles.css";

export default function App() {
  return (
    <div className="App">
      <h1>HTML Details Element</h1>
      <div className="details-wrapper">
        <details>
          <summary>
            <h2>This is an accordian</h2>
          </summary>
          <div>
            <p>... made only with HTML and a sprinkle of CSS</p>
            <ul>
              <li>First wrap your accordion in a details tag</li>
              <li>
                Then create a summary section with some sort of h1 or p content
              </li>
              <li>
                Then separately inside the details element create another
                element, like a div
              </li>
              <li>
                And if you want to style the accordion, you can create a cool
                effect
              </li>
              <li>Animation is possible, but it will require javascript</li>
            </ul>
          </div>
        </details>
      </div>
    </div>
  );
}

Breaking It Down

Start with a <details> tag.

<details>
</details>

Add a <summary> tag. Whatever you put in the summary tag is what will the user will see when the accordion is closed. You MUST have a <summary> tag for the details element, especially for accessibility purposes.

<details>
  <summary>
    // anything can go in here, but I chose an <h2>
    <h2>This is an accordian</h2>
  </summary>
</details>

Whatever you put inside the <details> element and outside the <summary> element is what will be in the expanded portion of the accordion.

It is definitely helpful to wrap your expanded-content in some sort of HTML element if you want to style your accordion.

<details>
  <summary>
    <h2>This is an accordian</h2>
  </summary>

  // I went with a <div> to reference in my CSS file
  <div>
    ...content will go here when the accordion is open
  </div>
</details>

And that's pretty much it! Of course styling is important, so let's peep that CSS:

/* only referencing the styles that pertain to the <details> element itself */

*,
*:before,
*:after {
  box-sizing: border-box;
  -webkit-tap-highlight-color: transparent;
}

summary {
  cursor: pointer;
}

summary > * {
  display: inline;
}

details > summary {
  text-align: left;
  width: 18rem;
  background-color: rgb(88, 33, 241);
  cursor: pointer;
  padding: 0.5rem 1rem;
  border-radius: 0.5rem;
}

details > summary > * {
  display: inline;
}

details > div {
  text-align: left;
  width: 18rem;
  border: 4px solid rgb(88, 33, 241);
  margin-top: 0;
  padding: 1rem;
  border-bottom-left-radius: 0.5rem;
  border-bottom-right-radius: 0.5rem;
}

details[open] summary {
  border-bottom-left-radius: 0px;
  border-bottom-right-radius: 0px;
}

summary[open] {
  border-bottom-left-radius: 4px;
  border-bottom-right-radius: 4px;
}

Not too bad, huh? If you're interested in seeing the full CSS code, it can be found here.

Conclusion

If you need a quick accordion and do not want to fiddle with a ton of JavaScript and CSS, HTML provides you a handy <details> element.

Thank you for reading and I look forward to hearing any thoughts, questions or feedback you may have!


This content originally appeared on DEV Community and was authored by James Cox


Print Share Comment Cite Upload Translate Updates
APA

James Cox | Sciencx (2021-05-14T22:04:48+00:00) TIL – HTML Details Element. Retrieved from https://www.scien.cx/2021/05/14/til-html-details-element/

MLA
" » TIL – HTML Details Element." James Cox | Sciencx - Friday May 14, 2021, https://www.scien.cx/2021/05/14/til-html-details-element/
HARVARD
James Cox | Sciencx Friday May 14, 2021 » TIL – HTML Details Element., viewed ,<https://www.scien.cx/2021/05/14/til-html-details-element/>
VANCOUVER
James Cox | Sciencx - » TIL – HTML Details Element. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2021/05/14/til-html-details-element/
CHICAGO
" » TIL – HTML Details Element." James Cox | Sciencx - Accessed . https://www.scien.cx/2021/05/14/til-html-details-element/
IEEE
" » TIL – HTML Details Element." James Cox | Sciencx [Online]. Available: https://www.scien.cx/2021/05/14/til-html-details-element/. [Accessed: ]
rf:citation
» TIL – HTML Details Element | James Cox | Sciencx | https://www.scien.cx/2021/05/14/til-html-details-element/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.