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 > |