ので、bootstrapのアコーディオンメニューの実装等を調べた。
参考:
If you’re familiar with Bootstrap 3, cards replace our old panels, wells, and thumbnails. Similar functionality to those components is available as modifier classes for cards.
Bootstrap4ではPanelはCardに置き換わるらしい。
Basic example
By default, all the
.panel
does is apply some basic border and padding to contain some content.<div class="card"> <div class="card-block"> This is some text within a card block. </div> </div>
This is some text within a card block.
<div class="card">
で囲えばパネルになるらしい。
パネルのコンテンツは内部の<div class="card-block">
タグ内に記述するようだ。
他に、<div class="card-header">
を先頭に書くとヘッダが出力され、
<div class="card-footer">
を最後に書くとフッターが出力されるようだ。
このような感じにした。
<div class="col-md-4">
<div class="card">
<h3 class="card-header">
title
</h3>
<div class="card-block">
contents here
</div>
</div>
</div>
将来のことを考え、一緒にcard
クラスも指定している。
階層が深くてやな感じなので<div class="col-md-4">
と
<div class="card">
を一緒にできないかとおもったが、
デザインが崩れたのでもとに戻した。
<div class="row">
<div class="col-md-4 card">
<h3 class="card-header">
←なんやねんこれ→
</h3>
<div class="panel-body card-block">
contents here
</div>
</div>
</div>
<div class="card"> <div class="card-header" role="tab" id="headingOne"> <h4 class="card-title"> <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> Collapsible Group Item #1 </a> </h4> </div> <div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne"> <div class="card-block"> Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. </div> </div> </div>
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
こうすればCollapse機能が実装されるらしいが、
<div class="panel-heading" role="tab" id="headingOne">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
タグの中に知らないものが多すぎる。あとやっぱり階層深すぎ。
role 属性 は、要素が示す役割を明確にするための属性です。 例えば、
header
要素はコンテンツのheader
か、あるいはサイト全体のheader
を示すことなどができますが、 どちらのheader
であるかを明確に区別する手段はありません。 しかしながら、role 属性 の値banner
によって、コンテンツ固有のheader
ではなく、サイトの持つheader
であることを示すことができます。
role はより詳細な役割を示すための属性。
Via data attributes
Just add
data-toggle="collapse"
and adata-target
to the element to automatically assign control of a collapsible element. Thedata-target
attribute accepts a CSS selector to apply the collapse to. Be sure to add the classcollapse
to the collapsible element. If you’d like it to default open, add the additional classshow
.
data-toggle="collapse"
とdata-target
を指定することで、クリックがなされた時に自動的にdata-target
が開閉されるようになる。
余計なJSを書く必要がない。
To add accordion-like group management to a collapsible control, add the data attribute
data-parent="#selector"
. Refer to the demo to see this in action.
アコーディオンメニューで連動して他のメニューを閉じたい場合、
data-parent
属性でアコーディオンメニューを格納している親要素を指定する必要がある。
aria-expanded属性は要素の開閉の状態を示すためのWAI-ARIAの属性です。
値にはtrue/falseのboolean値を指定することができtrue(開いている状態)、false(閉じている状態)を示すことができます。
WAI-ARIA
WAI-ARIAとは、Web Accessibility Initiative Accessible Rich Internet Applicationsの略で、WAI-ARIA Overviewから引用すると…
WAI-ARIA, the Accessible Rich Internet Applications Suite, defines a way to make Web content and Web applications more accessible to people with disabilities. It especially helps with dynamic content and advanced user interface controls developed with Ajax, HTML, JavaScript, and related technologies.
訳すと、WebコンテンツおよびWebアプリケーションを障がいのあるユーザにとってよりアクセシブルにする方法を定義するもので、 特にAjaxやJavaScriptなどで作られたRIA(Rich Internet Applications)にフォーカスしたものです。
- aria-controls
- 現在の要素によってコンテンツまたは存在が制御されている要素を特定する。(例:ツリービュー、チェックボックス、タブ)
aria-labelledby属性 は要素とラベルを関連付けるWAI-ARIA属性です。
利用方法はlabel要素に対する for属性と同じで、 関連付けたい要素のid属性を aria-labelledby属性 の値として指定します。
諸々機能的には問題ないが、ラベリングしておいた方がアクセシビリティが高まるようなので利用しましょうということになった in 脳内会議。
ということで、これらを実装した結果
<div class="col-md-4" id="id_panel">
<div class="card">
<h3 class="card-header" role="tab" id="head_panel">
<a href="#body_panel"
role="button"
data-toggle="collapse"
data-parent="#id_panel"
area-expanded="false"
area-controls="body_panel">
title
</a>
</h3>
<div class="card-block collapse"
role="tabpanel"
area-labelledby="head_panel"
id="body_panel">
contents
</div>
</div>
</div>
こうなった。