ニュースの横スクロールタイルスライダーをJSなしの純CSSで作りたい
FlexBoxを使ってみた
.spotlight-wrapper {
width: 100%;
overflow-x: auto;
}
.spotlight-wrapper .spotlight {
list-style: none;
height: 230px;
display: flex;
flex-direction: column;
flex-wrap: wrap;
justify-content: bottom;
padding: 0;
}
.spotlight-wrapper .spotlight li {
width: 220px;
height: 220px;
background: #ccc;
margin: 5px;
}
.spotlight-wrapper .spotlight li.small {
width: 105px;
height: 105px;
}
.spotlight-wrapper .spotlight li.medium {
width: 220px;
height: 105px;
/*
* Idea to fix it, but will cause
* issue if the medium tile in the
* bottom level, and there are 2 small
* tiles next to it in the top level
*/
/* & + .small + .small{
display: block;
clear: both;
justify-content: bottom;
margin-top: 120px;
margin-left: -110px;
} */
}
.spotlight-wrapper .spotlight li.red {
background: red;
}
<div class="spotlight-wrapper">
<ul class="spotlight">
<li>Tile #1</li>
<li class="small">Tile #2</li>
<li class="small">Tile #3</li>
<li class="medium">Tile #9</li>
<li class="medium">Tile #10</li>
<li>Tile #2</li>
<li class="medium red">Tile #1</li>
<li class="small red">Tile #2</li>
<li class="small red">Tile #3</li>
<li>Tile #5</li>
<li>Tile #7</li>
<li>Tile #8</li>
<li class="medium">Tile #9</li>
<li class="medium">Tile #10</li>
<li>Tile #11</li>
<li>Tile #12</li>
<li class="small">Tile #13</li>
<li>Tile #14</li>
<li>Tile #15</li>
<li>Tile #16</li>
<li>Tile #17</li>
<li>Tile #18</li>
<li>Tile #19</li>
<li>Tile #20</li>
</ul>
しかし、赤いタイルを確認すると、正しい方法で整列されていません。余白を使用して修正できますが (コメント ブロックを確認してください)、幅の広いタイルが一番下の行にあり、2 つの小さなタイルが下の行にある場合は、他の問題が発生します。次のブロック、
また、小さなタイルが 1 つしかない場合は、空きスペースが作成されます。