こんにちは!セミマサです。
今回はフレックスボックスを使って↓のようなカードデザインを作ってみました。HTMLとCSSをまとめていきたいと思います。
今日もwebでセミが鳴く
瀬見マサキの個人サイトです。ブログを書いたり自作ゲームを公開したりしています。
デモサイト
今回のデモサイトはこちらになります。
HTML
1 2 3 4 5 6 7 8 9 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 |
<section> <div class="card-box-wrap"> <a href="#" class="card-box"> <img src="img/img1.png" alt="card-1"> <div class="card-text"> <h2>タイトル</h2> <p>ここに内容が入ります</p> </div> <time><i class="fas fa-clock"></i>2019.07.17</time> </a> <a href="#" class="card-box"> <img src="img/img2.png" alt="card-2"> <div class="card-text"> <h2>タイトルタイトルタイトルタイトルタイトル</h2> <p>ここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入ります</p> </div> <time><i class="fas fa-clock"></i>2019.07.17</time> </a> <a href="#" class="card-box"> <img src="img/img3.png" alt="card-3"> <div class="card-text"> <h2>タイトルタイトルタイトルタイトルタイトルタイトルタイトル</h2> <p>ここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入ります</p> </div> <time><i class="fas fa-clock"></i>2019.07.17</time> </a> <a href="#" class="card-box"> <img src="img/img4.png" alt="card-4"> <div class="card-text"> <h2>タイトルタイトルタイトルタイトルタイトルタイトルタイトルタイトルタイトル</h2> <p>ここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入りますここに内容が入ります</p> </div> <time><i class="fas fa-clock"></i>2019.07.17</time> </a> </div> </section> |
カード部分のHTMLです。
CSS
1 2 3 4 5 6 7 8 9 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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
.card-box-wrap{ display: flex; justify-content: center; align-items: center; flex-direction: column; padding: 2% 5%; } .card-box{ display: flex; width: 100%; flex-direction: row; justify-content: center; align-items: flex-start; padding: 12px; border:solid 1px #ccc; border-radius: 8px; margin-bottom: 24px; position: relative; cursor: pointer; box-shadow: 0 5px 10px -5px #ccc; transition: ease-in-out .2s } .card-box:hover{ opacity: .7; transform: translateY(-4px); box-shadow: 0px 5px 15px 0px #ccc,0 0 2px 2px #ddd; } .card-box img{ width: 40%; } .card-text{ display: flex; flex-direction: column; width: 60%; margin-left: 12px; } .card-text h2{ margin-bottom: 12px; } .card-box time{ position: absolute; bottom: 5%; right: 2%; } @media screen and (max-width:768px){ .card-text p{ display: none; } .card-text h2{ margin-bottom: 0; } } @media screen and (max-width: 480px) { .heading{ font-size: 1.2rem; } .card-text h2{ font-size: 0.9rem; } .card-text p{ display: none; } .card-box time{ font-size: 0.7rem; } .card-text h2{ margin-bottom: 0; } } |
今回のCSSです。メインとなる.card-boxの要点を解説します!
・.card-boxは横並びのフレックスボックスです。
・align-itemsの指定をflex-startにして中身(画像と.card-text)を上に寄せています。
・box-shadowとtransform: translateYを利用してマウスホバー時にフワッとした動きをつけています。
・time要素を絶対配置するためにpositionにrelativeを指定しています。※time要素の時計はfontawesomeを使っています。
おわりに
フレックスボックスを使うことでお洒落なカードデザインも簡単に作ることができますね!