複数のアイテムを交互に表示する方法
今回は、「複数アイテムを交互に表示する方法」について解説していきます!
See the Pen
Untitled by webis (@webis-co)
on CodePen.
複数アイテムを交互に表示する実装は、最近のコーポレートサイトでも良く使われています。
もし分からない人がいたら、当ブログを機にマスターしましょう!
目次
複数アイテムを交互に表示する方法
早速画像のような「複数アイテムを交互に表示する方法」について、HTML・CSSの順で解説していきます!
それではいってみよう!
HTML
まずHTMLコードからです。
<div class="items">
<div class="item">
<div class="item__box">
</div>
<div class="item__text">
<h2>タイトルが入ります。</h2>
<p>
タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。
</p>
</div>
</div>
<div class="item">
<div class="item__box">
</div>
<div class="item__text">
<h2>タイトルが入ります。</h2>
<p>
タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。
</p>
</div>
</div>
<div class="item">
<div class="item__box">
</div>
<div class="item__text">
<h2>タイトルが入ります。</h2>
<p>
タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。
</p>
</div>
</div>
<div class="item">
<div class="item__box">
</div>
<div class="item__text">
<h2>タイトルが入ります。</h2>
<p>
タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。タイトルに関する文章が入ります。
</p>
</div>
</div>
</div>
「.items」を親要素に指定し、その中で子要素である「.item」を4つ用意しました。
CSS
次はCSSコードです。
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
img {
max-width: 100%;
height: auto;
vertical-align: bottom;
}
/* ここから */
body {
padding: 100px 20px;
}
.items {
max-width: 1100px;
margin: 0 auto;
}
.item {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 70px;
}
.item:nth-child(even) {
flex-direction: row-reverse;
}
.item__box {
flex-basis: 48%;
background-color: red;
height: 300px;
}
.item__text {
flex-basis: 48%;
}
.item__text h2 {
font-size: 2rem;
margin-bottom: 40px;
}
.item__text p {
font-size: 1..5rem;
line-height: 1.8;
}
◎1行目~53行目
まずはリセットCSSを書いて、無駄なデフォルトのスタイルを消します。
◎61行目~64行目
「display: flex;」で要素を横並びにしました。
そして「align–items: center;」で上下中央寄せに。
「justify–content: space–between;」で両端に広げます。
最後に「margin–bottom: 70px;」を指定して、アイテムの下に余白を持たせました。
◎73行目~75行目
このパートが、アイテムを交互に表示させる上で、一番重要なコードです。
.item:nth-child(even) {
flex-direction: row-reverse;
}
itemに対して「nth–child(even)」を指定することで、偶数番目のitemに「flex-direction: row-reverse;」のスタイルが適応されます。
「even」が偶数、そして「odd」が奇数番目の要素にスタイルを適応させることができます。
だからitemを交互に表示させることができる!
反対向きにしたいitem1つ1つに対して、「flex-direction: row-reverse;」を付ければ要素を交互に表示することはできる。
しかし余計なコードが増えてしまい、面倒になる。
そこで初めから「even」や「odd」のどちらかを指定しておくことで、itemが増えた場合でも自動でitemを交互に表示させることができます!
僕も初めは1つ1つのitemに「flex-direction: row-reverse;」を付けていましたが、かなり効率が悪かったです。
◎77行目~85行目
itemの子要素である「item__box」と「item__text」のサイズを、「flex–basis: 48%;」に指定しました。
◎87行目~95行目
テキストのフォントサイズや余白を調整したりしました。
これで複数のアイテムを交互に表示させることができました!
まとめ
以上が、「複数のアイテムを交互に表示する方法」でした!
最近のWEBサイト制作で良く使う実装方法なので、是非習得してみてください。




