Link in summary

by Kai Kubasta

HTML

<details>
  <summary>
    <a class="link" href="#">Sub page</a>
    <div class="button"></div>
  </summary>
  <ul>
    <li><a href="#">Link 1</a>
    <li><a href="#">Link 2</a>
    <li><a href="#">Link 3</a>
</details>

CSS

* {
  box-sizing: border-box;
}

body {
  font-family: sans-serif;
  padding: 2rem;
}

a:any-link {
  color: #00f;
}

a:any-link:is(:hover, :focus-visible) {
  color: #000;
}

summary {
  display: grid;
  grid-template-columns: auto 2rem;
  column-gap: 4px;
}

:is(.link, .button) {
  border-radius: 0.5rem;
}

.link {
  background-color: #eee;
  color: #00f;
  text-decoration: none;
  padding: 0.5rem;
}

.link:is(:hover, :focus-visible) {
  color: #000;
}

.button {
  font-size: 1rem;
  aspect-ratio: 1;
  display: grid;
  place-items: center;
  align-self: stretch;
}

.button:hover {
  background-color: #eee;
  cursor: pointer;
}

details:not(:open) .button::before {
  content: '↓';
}

details:open .button::before {
  content: '↑';
}