Result
PCではテーブル、スマホやタブレットではアコーディオンになるやつ。もう少し使いやすくできそうですが・・
テーブルに見えますが実際はtableタグは使われておらず、display:table;
で実装されていますのでタイトルには疑似と付けています
css
#table { display: table; width: 100%; background: #fff; margin: 0; box-sizing: border-box; } .row { display: table-row; } .cell { display: table-cell; padding: 6px; border-bottom: 1px solid #e5e5e5; text-align: center; } input[type="radio"], input[type="checkbox"] { display: none; } @media only screen and (max-width: 760px) { body { padding: 0; } #table { display: block; margin: 44px 0 0 0; } .caption { position: fixed; } .row { position: relative; display: block; border-bottom: 1px solid #ccc; } .header-row { display: none; } .cell { display: block; border: none; position: relative; height: 45px; line-height: 45px; text-align: left; } .primary:after { content: ""; display: block; position: absolute; right: 20px; top: 18px; z-index: 2; width: 0; height: 0; border-top: 10px solid transparent; border-bottom: 10px solid transparent; border-right: 10px solid #ccc; } .cell:nth-of-type(n + 2) { display: none; } input[type="radio"], input[type="checkbox"] { display: block; position: absolute; z-index: 1; width: 99%; height: 100%; opacity: 0; } input[type="radio"]:checked, input[type="checkbox"]:checked { z-index: -1; } input[type="radio"]:checked ~ .cell, input[type="checkbox"]:checked ~ .cell { display: block; border-bottom: 1px solid #eee; } input[type="radio"]:checked ~ .cell:nth-of-type(n + 2), input[type="checkbox"]:checked ~ .cell:nth-of-type(n + 2) { background: #e0e0e0; } input[type="radio"]:checked ~ .cell:nth-of-type(n + 2):before, input[type="checkbox"]:checked ~ .cell:nth-of-type(n + 2):before { content: attr(data-label); display: inline-block; width: 60px; background: #999; border-radius: 10px; height: 20px; margin-right: 10px; font-size: 12px; line-height: 20px; text-align: center; color: white; } input[type="radio"]:checked ~ .primary, input[type="checkbox"]:checked ~ .primary { border-bottom: 2px solid #999; } input[type="radio"]:checked ~ .primary:after, input[type="checkbox"]:checked ~ .primary:after { position: absolute; right: 18px; top: 22px; border-right: 10px solid transparent; border-left: 10px solid transparent; border-top: 10px solid #ccc; z-index: 2; } }
PCサイトではdisplay:table;
でinput要素を非表示にし、
モニタサイズの狭いデバイスではdisplay:block;
に変更してinput要素を表示し、:checkedになったらリストを表示します
その際、data-labelというあらかじめ用意してあったカスタムデータ属性の値をcontent: attr(data-label);
で表示させてラベルとして実装します
html
<div class="row"> <input type="radio" name="expand"> <span class="cell primary" data-label="年">2014年</span> <span class="cell" data-label="名前">すいか</span> <span class="cell" data-label="色">緑</span> <span class="cell" data-label="大きさ">でかい</span> <span class="cell" data-label="金額">1000円</span> </div> <div class="row"> <input type="radio" name="expand"> <span class="cell primary" data-label="年">2015年</span> <span class="cell" data-label="名前">みかん</span> <span class="cell" data-label="色">オレンジ</span> <span class="cell" data-label="大きさ">小さめ</span> <span class="cell" data-label="金額">40円</span> </div> ・ ・ ・ </div>