CSS によるスタイリング
この章では教材の「CSS」「CSS による配置」の内容を扱っています。
1. ブロックレベル要素とインライン要素
問題 1
以下の点について、ブロックレベル要素とインライン要素の挙動の違いを確認してみましょう。見た目だけでなく、開発者ツールを用いて値がどうなっているか調べてみましょう。
width
,height
の設定が反映されるかどうか。margin
の設定が反映されるかどうか。padding
を設定するとどのように表示されるか。font-size
を設定し、width
,height
を設定しないとき、要素の大きさはどうなるか。
解説
解答例
以下に示したコードの CSS プロパティの値を変えてみて、挙動を調べてみましょう。
- ブロックレベル要素は
width
,height
の値を設定できますが、インライン要素はできません。 - ブロックレベル要素は
margin
を上下左右に設定できますが、インライン要素は左右しか設定できません。 - ブロックレベル要素に上下の
padding
を設定すると、余白が他の要素に被らないように縦の位置が調整されます。一方、インライン要素に上下のpadding
を設定した場合、要素の縦の位置 が調整されず他の要素に被って表示されます。 - ブロックレベル要素の
height
やインライン要素のwidth
,height
の初期値は、中身の要素の大きさによって決まるので、font-size
を変更することで大きさが変化します。また、開発者ツールで値を調べてみると、インライン要素の大きさは文字の大きさと同じになるのに対し、ブロックレベル要素のheight
はfont-size
の 1.5 倍になることがわかります。
index.html
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>Title</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="block">block</div>
<span class="inline">inline</span>
</body>
</html>
style.css
.block {
background-color: lightcoral;
width: 100px;
height: 50px;
margin: 10px;
padding: 30px;
font-size: 30px;
}
.inline {
background-color: lightblue;
width: 100px;
height: 50px;
margin: 10px;
padding: 30px;
font-size: 30px;
}
問題 2
以下のように、div
要素の中に div
要素を配置するとどのように表示されるでしょうか。span
要素の中に span
要素を配置した場合はどうでしょうか。また、上に挙げた CSS プロパティを外側の要素にのみ設定するとどうなるか調べてみましょう。
index.html
<body>
<div class="box1">
A
<div class="box2">B</div>
C
</div>
</body>
解説
解答例
-
画像のように、
div
要素の場合は縦方向に、span
要素の場合は横方向に挟まるように表示されます。 -
CSS プロパティの一部は、親要素のものが継承されます。例えば
font-size
は、外側の要素に設定した値が自動的に内側の要素にも反映されます(もちろん、手動で別の値を設定することも可能です)。一方、margin
やpadding
などは反映されません。以下のような CSS ファイルを作成して、挙動を調べてみましょう。style.css.box1 {
background-color: lightcoral;
width: 100px;
height: 100px;
margin: 10px;
padding: 30px;
font-size: 30px;
}
.box2 {
background-color: lightblue;
}
2. フレックスボックスとグリッド
次のようなウェブサイトを作成してみましょう。
- メニューバーを flexbox で再現してみましょう。
- 記事の部分は grid で適度な間隔を開けて配置してみましょう。
以下発展課題です。
- 記事・ロゴ・ナビゲーションボタン(ABOUT など)はクリックできるようにしてください。ただし
button
タグは使わないでください。記事は写真も文字も黒い枠もすべてクリックできるようにしてください。 - ナビゲーションボタンにカーソルを合わせると以下のように色が徐々に(0.1 s で)変わるようにしてください。
- 記事の画像は以下からダウンロードしてください。 download
解答例
解答例
index.html
<header>
<a class="logo" href="#"> ut.<span>code</span>(); </a>
<ul class="nav">
<li class="nav-about">
<a class="link" href="#">ABOUT</a>
</li>
<li>
<a class="link" href="#">BLOG</a>
</li>
<li>
<a class="link" href="#">CONTACT</a>
</li>
</ul>
</header>
<h1>最近の記事</h1>
<div class="board">
<article class="article1">
<a href="#">
<img src="image.jpg" width="400px" />
<div href="#" class="title">大会に参加しました!</div></a
>
</article>
<article class="article2">
<a href="#">
<img src="image.jpg" width="400px" />
<div href="#" class="title">ハッカソンをしました!</div></a
>
</article>
<article class="article3">
<a href="#">
<img src="image.jpg" width="400px" />
<div href="#" class="title">タイピングしてみた</div></a
>
</article>
<article class="article4">
<a href="#">
<img src="image.jpg" width="400px" />
<div href="#" class="title">Reactを使おう</div></a
>
</article>
</div>