「楽しいイベントいっぱいだよ」のセクション、<section class="event"> 部分をレスポンシブにコーディングしていきます。
見出し部分は、今までに作ってきたクラスを使うだけでも、かなり形になります。
index.html
<section class="event">
<div class="container section-padding">
<h2 class="text-white text-center">
楽しいイベントいっぱいだよ
</h2>
<div class="text-center">
<img src="images/line@2x-8.png" width="400" height="6" alt="">
</div>
<p class="text-white text-center">
いつ訪れても楽しいズーロッパ東京。
</p>
</div>
</section>
ブラウザで見てみると、h2タグの下余白が広すぎますね。
CSSでここだけ調整しましょう。
style.css
h2{
margin-bottom: 0.25rem;
}
スマホ幅での表示は、これでOKです。
タブレット幅、PC幅も見出し部分のレイアウトは変わりません。
変更があるのは、見出し(h2)のフォントサイズだけ。
それぞれのメディアクエリ内で、フォントサイズを上書きしましょう。
style.css - @media (min-width: 600px) { } 内
h2{
font-size: 28px;
}
style.css - @media (min-width: 1024px) { } 内
h2{
font-size: 32px;
}
ブラウザ幅を変更して、それぞれのCSSが効いているか確認してください。
このセクションのメインである、イベント情報がそれぞれカードのようなデザインで表示されている部分を作っていきます。
まず、それぞれの画面幅でどんな変更があるか確認してみましょう。
このデザインの場合、1つ1つのカードはどの画面幅でも同じです。
変更されるのはカードの並び方。
タブレット幅以上で横に並ぶので、flexコンテナで全体を囲っておくと良さそうですね。
さらに、タブレット幅以上でカードを横並べにする際、隣のカードとの間に余白が入ります。
余白を付ける方法はいくつかありますが、今回は簡単に余白をつけるための要素で囲もうと思います。
イメージは下図の、赤線で囲った「card-wrapper」クラスです。
ここまでを、HTMLとして書き起こします。
カードは出来あたったものをコピーしたほうが楽なので、とりあえず1つだけで良いです。
index.html
<section class="event">
<div class="container section-padding">
<h2 class="text-white text-center">
楽しいイベントいっぱいだよ
</h2>
<div class="text-center">
<img src="images/line@2x-8.png" width="404" height="5" alt="">
</div>
<p class="text-white text-center">
いつ訪れても楽しいズーロッパ東京。
</p>
<!-- ここからカード並び -->
<div class="flex-container">
<artilce class="card-wrapper">
<div class="card">
</div>
</artilce>
</div>
</div>
</section>
イベント情報が載っているカード部分を作っていきましょう。
まずは、カードのベース部分。
必要なスタイル指定は、以下の3つです。
赤文字の“影をつける”は一旦置いておいて、簡単なところからCSSを書いてみます。
style.css
.card{
background-color: #FFFFFF;
padding: 10px;
}
ドロップシャドウのような影は、CSSのbox-shadow プロパティを使うと表現できます。
box-shadow プロパティでは、影の位置、大きさ、色など6つの値を半角スペースで区切って設定できます。
必須の2つ以外は省略の可能。
値の設定に迷ったら、デザインデータを見てみましょう。
Illustratorの設定が、そのまま使えるところもあります。
影がついているアイテムを選択した状態で、アピアランスパネルを見てください。
「ドロップシャドウ」をクリックして、編集パネルを開きます。
以下の3つは、box-shadowプロパティの値にそのまま使えます。
style.css
.card{
background-color: #FFFFFF;
padding: 10px;
box-shadow: 2px 3px 3px;
}
ブラウザで見てみましょう。
カードに影が付きました。
色の濃さが気になる方は、以下のように“影の色”を追加してください。
rgbaを使って透明度を記述すると、うっすら影がかかった見え方になります。
style.css
.card{
background-color: #FFFFFF;
padding: 10px;
box-shadow: 2px 3px 3px rgba(0, 0, 0, 0.4);
}
CSSでの色の指定方法については、下記講座で詳しく解説しています。
カード内は大きく5つのブロックに分かれています。
画像から概要まではシンプルなので、一気に作っていきましょう。
★に使われているオレンジ色は、詳細はこちらボタンの背景色と同じ。
Webサイトのキーカラーの可能性が高いので、他の場所でも使えるように「text-orange」クラスと命名しました。
概要はシンプルに「card-description」クラスとします。
index.html
<artilce class="card-wrapper">
<div class="card">
<img src="images/event1@2x-8.png" width="629" height="378" alt="猫パーク">
<a href="#">
<h3>猫パークに行こう</h3>
</a>
<div class="text-orange">
★★★
</div>
<p class="card-description">
情に棹させば流される。智に働けば角が立つ。どこへ越しても住みにくいと悟った時、詩が生れて、画が出
</p>
</div>
</artilce>
※img要素のwidthとheightは、画像サイズをそのまま使っています。
この段階で、ブラウザで表示すると以下のように表示されます。
作成したクラス以外に、タイトル(h3見出し)などのスタイル指定も要りますね。
一気にCSSを書いていきましょう。
style.css
.text-orange{
color: #F15A24;
}
.card a{
color: #0071BC;
}
.card h3{
font-size: 24px;
margin: 0.5rem 0 0 0;
}
.card-description{
color: #808080;
font-size: 14px;
}
カード最下部、投稿者と投稿日時が表示されている部分を書いていきましょう。
投稿者名・日にちはフォントサイズが12pxと小さいので、全体を囲うdivタグに「card-footer」クラスを新規追加します。
横並び配置はヘッダーで使った 「flex-container」+「flex-all-row」クラスが使えますね。
card-footerクラスをセレクタに、display:flexと指定しても構いません。
index.html
<artilce class="card-wrapper">
<div class="card">
<img src="images/event1@2x-8.png" width="629" height="378" alt="猫パーク">
<a href="#">
<h3>猫パークに行こう</h3>
</a>
<div class="text-orange">
★★★
</div>
<p class="card-description">
情に棹させば流される。智に働けば角が立つ。どこへ越しても住みにくいと悟った時、詩が生れて、画が出
</p>
<div class="card-footer flex-container flex-all-row">
<div class="card-author">
<img src="images/michan@2x-8.png" width="26" height="26" alt="michan">
<a href="#" >
michan
</a>
</div>
<div class="card-date">
2023/05/16
</div>
</div>
</div>
</artilce>
style.css
.card-footer{
font-size: 12px;
}
.card-footer .card-date{
margin-left: auto;
}
ブラウザで表示を確認します。
画像と名前がガタついてますね。
画像と文字を並べて表示する際、画像に対して、垂直方向の揃え方を指定するvertical-alignプロパティを設定すると、位置を揃えることが出来ます。
やってみましょう。
style.css
.card-author img{
vertical-align: middle;
}
見え方が、かなり良くなりました。
vertical-alignは、テキストや画像などの内容の垂直方向(上下方向)の揃え位置を指定するプロパティです。
適用できるのはインラインレベルの要素( img、span、aなど)とテーブルセルにのみな点に注意してください。
今回のカード下部はalign-itemsとjustify-contentプロパティを使って整えることも出来ます。
HTML&CSSでつくるWebサイト制作入門を先に受講されている方にとっては、こちらの方が設定しやすいかもしれません。どちらの方法でも間違いではありません。お好きな方で設定してください。
justify-contentプロパティでの指定例は、見本フォルダの中のindex-04-flex.html+style-04-flex.cssをご確認ください。
カード部分のレイアウトが整ったら、他3枚のカードも作っていきましょう。
<artilce class="card-wrapper"> ~ </artilce>までをコピー・アンド・ペーストして、画像とテキストを打ち替えてください。
カードを増やすと、下図のようにカード同士がくっついて表示されます。
カードがそれぞれ離れて表示されるよう、CSSで余白を加えます。
style.css
.card-wrapper{
margin-top: 2rem;
}
これで、スマホ幅表示のコーディングは完成です。
タブレット幅、PC幅でのカード並びを設定していきます。
まず、最初に考えていた通りに、タブレット幅のCSSを書いてみましょう。
style.css - @media (min-width: 600px) { } 内
.card-wrapper{
width: 50%;
padding-left: 15px;
padding-right: 15px;
}
ブラウザで表示を確認してみましょう。
カードが2つ横並びにならず、折り返されているはずです。
これは.card-wrapperの横幅が、親要素の50%+15px+15pxと計算されているためです。
コンテナの半分以上のサイズになるので、flex-wrapで折り返されているんですね。
padding=内側の余白なのに、widthと別計算されるとCSSを書くのが面倒。
そこで使うのが、CSSのbox-sizingプロパティです。
box-sizingプロパティは、borderとpaddingをwidthとheightに含めるか否かを指定します。
値はデフォルト値のcontent-box(含めない)、border-box(含める)の2つのみ。
「box-sizing: border-box;」を指定しておいたほうが、要素のレイアウトには便利ですね。
「box-sizing: border-box;」の指定は、使いたい要素、クラス毎に書くことも出来ます。
ですが、サイト全体でルールが共通していたほうが分かりやすいですよね。
こうした場合、HTMLのすべての種類の要素に適用できる全称セレクタ(ユニバーサルセレクタ)を使って書きます。
全称セレクタ(ユニバーサルセレクタ)は*。
CSSファイルの一番上に、以下のように書いてみてください。
style.css
*{
box-sizing: border-box;
}
.card-wrapper部分にもCSSが効いて、カードが2枚横並びになります。
PC幅での表示は、カード4枚を横に並べます。
.card-wrapper の幅を25%に指定するだけでOKです。
style.css - @media (min-width: 1024px) { } 内
.card-wrapper{
width: 25%;
}
これでイベントセクションのコーディングは終了です。
お疲れ様でした。
無料ビデオ講座のお知らせ
Skillhub [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。