dlの中にdivを入れるのは問題ありません。これを使うと、こちらのようなレイアウトを1つのdlだけで実現できます。
PCサイズでは1行ごとに左右に並び、スマホサイズでは縦1列に並ぶレイアウトです。
このレイアウトは意外と難しく、2つのdlを左右に並べてしまうと、スマホで1列にしたときに左のdlが上、右のdlが下になってしまいます。
1行ごとに折り返すのためには、1つのdlでまとめる必要があります。
ソースコードの例
HTML
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | < div class = "clearfix" > < dl class = "definition_list" > < div > < dt >項目1</ dt > < dd >内容1</ dd > </ div > < div > < dt >項目2</ dt > < dd >内容2</ dd > </ div > < div > < dt >項目3</ dt > < dd >内容3</ dd > </ div > < div > < dt >項目4</ dt > < dd >内容4</ dd > </ div > < div > < dt >項目5</ dt > < dd >内容5</ dd > </ div > < div > < dt >項目6</ dt > < dd >内容6</ dd > </ div > </ dl > <!-- /.definition_ist --> </ div > |
CSS
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | dl.definition_list{ display : flex ; flex-wrap : wrap ; justify-content : space-between; text-align : left ; } dl.definition_list div{ width : 48% ; margin : 0 ; padding : 0 ; } dl.definition_list dt{ float : left ; width : 80px ; padding : 10px 0 ; border-top : solid 1px #A5A5A5 ; font-size : 12px ; font-weight : bold ; } dl.definition_list dd{ float : left ; width : calc( 100% - 80px ); padding : 10px 0 ; border-top : solid 1px #A5A5A5 ; font-size : 12px ; } /* 768px以下 */ @media only screen and ( max-width : 48em ) { dl.definition_list{ display : block ; } dl.definition_list div{ width : 100% ; }dl.definition_list dt{ font-size : 10px ; } dl.definition_list dd{ font-size : 10px ; } } /* floatがあるのでclear */ .clearfix::after { display : block ; visibility : hidden ; clear : both ; height : 0 ; content : "" ; } |
実際の表示
このソースを実際に表示させるとこのようになります。スマホ(横幅768px以下)では1列になります。
- 項目1
- 内容1
- 項目2
- 内容2
- 項目3
- 内容3
- 項目4
- 内容4
- 項目5
- 内容5
- 項目6
- 内容6
このような表示になります。
dtとddを横並びにするのにfloatを使っているので、全体をdivで囲い、after要素で最後にclearを入れています。
よく使うけど意外と難しい、という感じの組み方だと思いますので、ご紹介挿せていただきました。