<details>
タグはHTML5.1で追加されたタグで、コンテンツを開閉できるウィジェットを生成します。
概要
<details>
<summary>日程</summary>
2019年4月1日(月)開場:13:00
</details>
日程
2019年4月1日(月)開場:13:00<details>
の中には1つの<summary>
タグ、そしてフローコンテンツに分類されるbody内で使われるほとんどの要素を置くことができます。
装飾をしてみる
detailsを開くとopen
という属性が付されるので、それを利用してCSSでカスタマイズしてみます。
装飾をしてみたテスト
CSSでアニメーションを付けてみました。
...
何も書くことがない!!
...
何も書くことがない!!
<details id="designed">
<summary>タイトル(サマリー)</summary>
<div class="details_content">
ここに中身
</div>
</details>
summary {
outline: none;
cursor: pointer;
}
/*デフォルトの三角を消す */
summary::-webkit-details-marker {
display:none;
}
/* 疑似要素で三角を付ける */
summary::before {
display: inline-block;
content: "▶";
margin: 0 .3em 0 0;
transform: rotate(0deg);
transition: .2s transform ease;
}
details[open] summary::before {
transform: rotate(90deg);
}
.details_content {
background: #f5f5f5;
padding: 16px;
border-radius: 2px;
}
details[open] .details_content{
animation: .8s details_content ease;
}
@keyframes details_content {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
今のところ、detailsタグ自体にはアニメーションを掛けられないので、中にdivを配置してそこにアニメーションを掛けることになります。
summaryをクリックしてコンテンツを閉じると、高さがすぐ0になってしまうので、閉じるときのアニメーションを付けることはできません。閉じるアニメーションがなくても不自然にならないよう、アニメーションの装飾は最低限に留めたほうがいいかもしれません。
まとめ
detailsタグはHTMLのみでコンテンツの開閉という動きを、WEBサイトにつけることができるので魅力的ですね。
HTMLでマークアップをする以上意味を考えなければならないので、単にコンテンツを開閉させたいのであれば、JavaScriptで実装する方が手っ取り早いと思います。