とあるGitHubのレポジトリのREADMEを見ていたら
一部を折りたたんで表示するアコーディオン表示になっていたので
GitHubの仕様かと思ってたんですが、
HTML 5.1で導入されたdetails
/summary
要素によるものでした。
これを使ってGitHubのREADMEなんかで長くなってしまって重要でない部分を一部折りたたんだり、 Issuesとかでも上手く使うことで見やすくすることが出来ます。
details
/summary
使い方は
1 2 3 4 5 6 7 8 9 10 |
|
みたいに書くと
見出し部分。ここをクリック。
こんな感じになります。 きちんと動作してれば下のGif画像の様にクリックで開いたり閉じたりするはずです。
このページではdetails
やsummary
に関してJavaScriptは当ててないので
ブラウザが自動的に設定している動作になります。
なのでブラウザ依存するところがあって、 上のGifはMacのGoogle Chromeのものですが、 この仕様はEdge及びIEではまだ実装されていません。
Firefoxも49 (2016年9月20日)からなので 使える様になってのは比較的最近です。
Edgeでまだ使えないため当たり前の様に使えるものではないですが、 GitHubのコメントの様な場所で簡単なタグだけで折りたたみが実装できてしまうのは非常に 便利なので使えるところでは使いたいところです。
また、上の見出し部分ですが、ChromeやFirefoxだと 折りたたまれた上で先頭に三角印が現れていると思います。
これ、最初このブログで使ってみた所なぜかFirefoxだと現れず Chromeだと現れる状態でした。
これはCSSを全く当ててなければブラウザの機能としてFirefoxでもこの三角印が付くようになっています。
ここで印が消えてるのはCSSファイルが
article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary {
display: block; }
と言う行を含んで居るせいでした。
ここでのsummary
に関するdisplay: block
があるとFirefoxでは三角印が消えてしまうようです。
この行ですが、自分で追加したものではなく、
SASSをcompass
でコンパイルしてCSSファイルを作っていて、その最初の所で、
@include global-reset;
としてブラウザのデフォルトスタイルを調整するためのMixinを呼んだ事で最初に追加される項目です。
このファイルは定石的に呼ぶ(と思う)ので SASSを使えば入っている様なものだと思います。
summary
要素のデフォルトはdisplay: list-item;
で
これにしておけばFirefoxも三角印が出るので、
出したい場合はSASSに
1 2 3 |
|
をglobal-reset
を呼んだ後に追加して上書きしてあげれば三角印を出せます。
これは最初Firefox側のバグかな、と思ったのですが、
どうやらsummary
要素の本来の動作としてはblock
な時は三角が出ない方が正しいようで、
むしろChrome側のバグ、とのこと。
ちなみにSafariとかでもdisplay
な状態で三角印が出るので、
Firefoxだけ(?)が最先端に正しく仕様を追っている状態みたいです。
そもそもなぜglobal-reset
がsummary
のdisplay
を変更しているか分かりませんが(何らかのブラウザが違う動作する?)
影響するものとしてもsummary
に関することだけなので
このブログでは戻すようなCSSを追加してあります。
加えて、デフォルトのままだと見出し部分にカーソルを持っていっても通常の文章と見分けがつかないので
1 2 3 4 5 6 |
|
な感じのSCSSを追加して見出し上にカーソルを持っていった場合にリンクと同じ様なポインタになる様にしてあります。 CSSで追加するなら
1 2 3 4 5 6 |
|
な感じで。
もしちゃんと使うなら、用途にもよりますが開いた時の部分にインデントがある方が
開かれた部分として分かりやすいので、
summary
の下に上の例の様にdiv
要素とか置いて、そのdiv
にクラスを与えて
そのクラスをmargin-left: 10px
とか適当に左空け状態にしてあげると見やすいかと。
あと、上にあるGifはChromeのもので、これだと見出し部分をクリックした時に
要素の周りに先が現れます。
Safariでも同様に現れました。
一方Firefoxだと出ません。
これはdisplay
要素がblock
でもlist-item
でも同様でした。
微妙な謎仕様。
隠し部分ではMarkdownも使える
下のGistでは畳込んだ中でも色々とMarkdownのマークアップが使える様子を試しています。
ただし、<div>
の直下に行を空けずに書くとその行のMarkdownは無視されるので注意です。
1行空いた後からMarkdownが反映される様になります。
また、一番下の所で分かるように、
details
は入れ子が可能で多段アコーディオン表示も
これを使うと非常に簡単に作る事が出来ます。
details
内のマークアップに関してはパーサーに依存するところが結構あって、
GitHubだと上のGistでやってることは見出し部分の太文字化以外全て上手くいってますが、
このブログで使ってるKramdownで今の設定だと
コード部分以外は変換されずにそのまま出力される様な形になっていました。
まとめ
details
/summary
要素に関してはMarkdownもGitHubも直接関係ないことですが、
差し当たりすぐに使えそうなところというとGitHubでのREADMEや
コメントでの使用だと思います。
通常のサイトやブログとかだとまだEdge/IEが対応してないので それらで見る人が居ることを前提で常に開かれててもおかしくないようにしておく必要があります。
まあ、もちろんGitHubとかもEdgeとかで見る人も居るわけですが。
Edgeで使える様になればもっと一般的に使える様になると思うので早く対応して欲しい所です。
あと、やはりMarkdownで書いてる時にHTMLのタグを手で打ちたくは無いので、 GitHubの拡張とかでこの辺簡単に書ける様になると良いのですが、 その辺もEdgeとかが対応したら出来るかも。