CSSだけで開閉するツリー
Ads

Result
以前「CSSでフォルダツリーを作る」を書きましたが今回は開閉するタイプです。
お察しの通りですがdetailsタグで実装されています。
css
.tree {--spacing: 1.5rem;--radius: 10px;}.tree li {display: block;position: relative;padding-left: calc(2 * var(--spacing) - var(--radius) - 2px);}.tree ul {margin-left: calc(var(--radius) - var(--spacing));padding-left: 0;}.tree ul li {border-left: 2px solid #ddd;}.tree ul li:last-child {border-color: transparent;}.tree ul li::before {content: "";display: block;position: absolute;top: calc(var(--spacing) / -2);left: -2px;width: calc(var(--spacing) + 2px);height: calc(var(--spacing) + 1px);border: solid #ddd;border-width: 0 0 2px 2px;}.tree summary {display: block;cursor: pointer;}.tree summary::marker,.tree summary::-webkit-details-marker {display: none;}.tree summary:focus {outline: none;}.tree summary:focus-visible {outline: 1px dotted #000;}.tree li::after,.tree summary::before {content: "";display: block;position: absolute;top: calc(var(--spacing) / 2 - var(--radius));left: calc(var(--spacing) - var(--radius) - 1px);width: calc(2 * var(--radius));height: calc(2 * var(--radius));border-radius: 50%;background: #ddd;}.tree summary::before {content: "+";z-index: 1;background: #696;color: #fff;line-height: calc(2 * var(--radius) - 2px);text-align: center;}.tree details[open] > summary::before {content: "−";}調整が必要ですがネストが深くなっても動作しました。
html
<ul class="tree"><li><details open><summary>Giant planets</summary><ul><li><details><summary>Gas giants</summary><ul><li>Jupiter</li><li>Saturn</li></ul></details></li><li><details><summary>Ice giants</summary><ul><li>Uranus</li><li>Neptune</li></ul></details></li></ul></details></li></ul>
classは親のみ。
via
詳しい解説は以下をご参照下さい。
Tree views in css
recommend
cssTailwindからインスピレーションを得たスクロールアニメーション
Result See the Pen Untitled by kachibi...
cssテキストにリアルな影を与える
Result See the Pen Simple Skewed Text ...
cssposition: sticky;でtableを下スクロール時はヘッダ、横スクロール時は最左を固定
Result See the Pen A Simple Responsive...
cssテキストにマウスホバーすると下線が囲い線に変化するアニメーション
Result See the Pen SVG Border Animatio...

