[HTML & CSS General] Responsive CSS Flexbox with border
リスト要素をボーダー付きのボックスデザインとしてレイアウトします。
HTML は通常のリストです。
<ul class='list'>
<li class='list-item c-border-fixed'>Item 1</li>
<li class='list-item c-border-fixed'>Item 2</li>
<li class='list-item c-border-fixed'>Item 3</li>
<li class='list-item c-border-fixed'>Item 4</li>
<li class='list-item c-border-fixed'>Item 5</li>
<li class='list-item c-border-fixed'>Item 6</li>
<li class='list-item c-border-fixed'>Item 7</li>
<li class='list-item c-border-fixed'>Item 8</li>
</ul>
<li>
にボーダーを付けてみます。
.c-border {
border: solid 1px gray;
}
するとこのようにボーダーが重なった部分が太く見えてしまいます。
ブレークポイント 768px 未満では縦レイアウト。
768px から横に3つ並べます。
これを解決するために :nth-child()
で不要なボーダーを打ち消します。
.c-border-fixed {
border: solid 1px gray;
@media screen and (max-width:767px) {
&:nth-child(n + 2) {
border-top-width: 0;
}
}
@media screen and (min-width:768px) {
border-left-width: 0;
&:nth-child(3n + 1) {
border-left-width: 1px;
}
&:nth-child(n + 4) {
border-top-width: 0;
}
}
}
&:nth-child(n + 2)
2番目 [=(0)+2], 3番目 [=(1)+2], 4番目 [=(2)+2], 5番目 [=(3)+2], … 等の要素を表します。
&:nth-child(3n + 1)
1番目 [=(3×0)+1], 4番目 [=(3×1)+1], 7番目 [=(3×2)+1], 10番目 [=(3×3)+1], … 等の要素を表します。
&:nth-child(n + 4)
4番目 [=(0)+4], 5番目 [=(1)+4], 6番目 [=(2)+4], 7番目 [=(3)+4], … 等の要素を表します。
See the Pen
Responsive CSS Flexbox with border by DriftwoodJP (@DriftwoodJP)
on CodePen.