HTML
CSS
いよいよ大詰めです!
今まで学んだことをフル活用していきましょう!
ただ,すべて自分でコーディングできればいいですが,そうもいかないと思うので,まずは見ながら自分の手でコーディングすることをやってみましょう!
そうしていくうちに,だんだんとパターンのようなものが分かってくるものです.
今まで学んできたプロパティたちが,お互いにどう作用しあうのかを体感していきましょう!
アクセスしてみてください!
自分のgithub.io
を以下のフォルダ構成にします.
index.html
about.html
style.css
index.css
about.css
icon.png
qiita.png
以下はすべてのページ (HTML) の初期テンプレートとなります.
一旦index.html
にコピペしてください.
以降はindex.html
を編集しているものとしてとらえてください.
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="description" content="○○のHomeページです">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="theme-color" content="#333" />
<link rel="stylesheet" href="https://unpkg.com/modern-css-reset/dist/reset.min.css" />
<link rel="stylesheet" href="styles/style.css">
<title>○○</title>
</head>
<body>
<header>
<!-- header の内容を書く -->
<!-- 基本的に近い回し -->
</header>
<main>
<!-- main コンテンツの内容を書く -->
</main>
<footer>
<!-- footer の内容を書く -->
<!-- 基本的に近い回し -->
</footer>
</body>
</html>
CSSリセットとして,modern.css
を今回は使っていきます.
デフォルトで適用されているフォントではなく,好きなフォントを使っていきたい.
Google Font などのCDNで簡単に導入できるものを今回紹介します.
今回は以下を選択します.
以下は,Roboto
での例ですが,すべての⊕をとりあえず選択しておきましょう!
M PLUS 1p
も同様にすべて選択でOKです.
すべての ⊕ 選択が終わったら,右上のアイコンをクリックします.
Use on the web
の項目を link
から @import
に切り替えます.
スタイルタグの示してあるところがあると思うので,@import
の内容だけコピーします.
正しく選択できていたら,以下と同じ内容になると思います.
@import url('https://fonts.googleapis.com/css2?family=M+PLUS+1p:wght@100;300;400;500;700;800;900&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');
この一文を,style.css
の最上部にコピペします.
これで,body 要素内に含まれるすべての文書が,以下のフォントが適用されます.
body {
font-family: 'Roboto', 'M PLUS 1p', sans-serif;
}
font-family
では,指定したフォントが順にWebのフォントとして採用されます.
つまり,Roboto
フォントが使用可能な言語だった場合,Roboto
がまず採用され,日本語のように Roboto
が使えない場合,一つ後ろの M PLUS 1p
が使用可能か検討し,使えるなら日本語用として採用されます.
それでも使えなかった場合は,sans-serif
が採用されます.
基本的に,Webページを作るときはデザイン案を書いて,それに従ってコーディングを行っていきます.
今回はそういう時間を取れない代わりに,配色だけ決めましょう.
ColorHuntやColorDropなどのサイトで好きな配色を決めてもいいですし,構想がある方はそれでも良いです!
配色は主に三つの要素からなるといわれています.
「たった3色とは少ない!」と思う方もいるかもしれませんが,同じ色でも,明るめ
,暗め
という方向に色を増やすことができます.
WEBサイトの配色は役割別に3つあり、それぞれに、ベースカラー、メインカラー、アクセントカラーと呼びます。各々の比率をベースカラー70%、メインカラー25%、アクセントカラー5%の割合にすると、美しい配色に仕上げることができます。
引用:https://www.m-hand.co.jp/design/4002/
あとで,自分の好きな色に変えてもらっていいのですが,今回の講座では以下の通りです.
#333333
#3f3f3f
)#dada1f
#9a9a1f
)#fafa1f
)#8f8ffa
テキストの色は,背景色に伴って選ばなければいけません.
今回,背景色をベースカラーとするため,文字色は#dddddd
あたりにします.
真っ白にすると,まぶしく感じるので,色合いを少しだけくすませます.
このような色を覚えておくのはとても大変です.
なので,覚えなくていいように定義してしまいます.
styles
フォルダに,root.css
ファイルを作成します.
内容を以下のようにします.
:root {
--base: #333;
--base_light: #3f3f3f;
--main: #dada1f;
--main_light: #fafa8f;
--main_dark: #9a9a1f;
--acc: #8f8ffa;
--text: #ddd;
}
接頭辞に--
をつけることでカスタムプロパティを定義できます.
:root
は CSS の擬似クラスで,文書を表すツリーのルート要素を選択するので,実質<html>
要素と同等ですが,疑似要素なのでこちらの方が詳細度が高いです.
参考:CSSカスケ―ディングスタイルシート > :root
カスタムプロパティの値を読み取るためには,CSSファイル内でroot.css
ファイルをインポートし,var(--base)
のようにして値を指定することができます.
CSSの
var()
関数は,他のプロパティの値の一部に代わってカスタムプロパティの値を挿入できるものです.
参考:https://developer.mozilla.org/ja/docs/Web/CSS/var
まずは,root.css
ファイルを読み込みます.
フォントのインポートの下の行に
@import url('./root.css');
を追加します.
body
の色を,変えてみましょう!
body {
font-family: 'Roboto', 'M PLUS 1p', sans-serif;
background-color: var(--base);
}
こんな感じで使います!
ページヘッダーを作りこんでいきましょう!
ページヘッダーはすべてのページで共通なので,スタイルの宣言は style.css
に書きます.
まずは,どんなヘッダーにするか決めます.
本来は自分でデザインするのですが,時間の都合上以下のようなものをゴールにします.黒い部分がヘッダーです.
index.html
に飛ぶHome
に触れるとindex.html
に飛ぶAbout
に触れるとabout.html
に飛ぶ???
は自分で好きなページを作ってもらうので一旦保留80px
15px
50x50(px)
上左右: 30px
のパディングまずは,必要なマークアップを揃えましょう!
header
要素内をマークアップします.
<header>
<div class="icon_wrapper">
<a href="./index.html">
<img src="img/icon.jpg" alt="icon">
</a>
</div>
<nav class="right_content">
<a href="./index.html">Home</a>
<a href="./about.html">About</a>
<a href="#">????</a>
</nav>
</header>
ここで,nav
要素とは,div
のようなブロックレベル要素で,その要素内がナビゲーションであることをブラウザに伝えます.
スタイルの扱いとしてはdiv
と同じとように考えればOK.
また,いい感じのアイコンがない人は,以下にアクセスしてアイコンをダウンロードし,仮置きしておいてください.
後で好きな画像に置き換えればOKです.
名前はicon
,拡張子はjpg
のものをimg
フォルダにダウンロードすれば書き換えは必要ないですが,それ以外の名前,拡張子の人はsrc="img/icon.jpg"
を書き換えてください.
ダウンロードがめんどくさい人は,src="https://pictogram2.com/p/p0146/6.png"
でもいいです.
style.css
に記述していきます.
.icon_wrapper {
width: 50px;
height: 50px;
background-color: #fff;
border: 1px solid var(--main);
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
overflow: hidden;
}
アイコンは円形(border-radius: 50%;
)になります.
しかし画像自体は正方形なので,はみ出し分を見えなくする(overflow: hidden;
)ことでいい感じになります.
border
の色の部分で,カスタムプロパティの値(#dada1f
)を読み取っています.
header {
position: sticky;
top: 0;
right: 0;
left: 0;
min-height: 80px;
padding: 30px 30px 0 30px;
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
background-color: black;
}
background-color: black;
は後々消しますが,CSSの適用範囲が分かりやすいようにするために,色を付けます.
右に配置するコンテンツなので,.right_content
です.
.right_content {
display: flex;
flex-wrap: wrap;
}
display: flex;
と flex-wrap: wrap;
で画面のサイズ変化にも対応しています.
ナビゲーションの文字色と文字間のスペースを宣言します.
a {
text-decoration: none;
}
.right_content a {
font-size: 1.2em;
font-weight: 600;
color: var(--main);
}
.right_content a:not(:nth-child(n + 3)) {
padding-right: 15px;
}
text-decoration: none;
で a
要素にデフォルトでついている下線
を消します.
a:not(:nth-child(n + 3))
のセレクターの意味を説明します.
まず:not()
でa
要素のうち()
内の条件を満たさないものにスタイルを当てると宣言します.
そして,:nth-child(n + 3)
のn
には0以上
の任意の数が入ると想像してください.
この場合,0+3=3,0+1=4,…となっていきます.
要素のうち,3番目以降のものに対してスタイルが充てられます.
以上のことから,a:not(:nth-child(n + 3))
の意味は,
「a要素のうち,3番目以降のa要素 でないもの にスタイルを宣言する」
つまり,
「a要素のうち,1番目と2番目にスタイルを宣言する」
となります.
なので,1番目と2番目の要素の「右側」だけに「padding-right: 15px
」が効くということです.
3番目のa
要素(???の部分)の右側にはpadding-right: 15px
は効いていません.
少し難しいですが,いろいろと使いこなすと表現の幅が広がります!
ただ,やれる事が多すぎてこの講座では紹介はこれだけにとどめます.
さらに詳しく知りたい方は,疑似クラス
で調べてください.
:not()
:https://developer.mozilla.org/ja/docs/Web/CSS/:not
:nth-child()
:https://developer.mozilla.org/ja/docs/Web/CSS/:nth-child
疑似クラス
:https://developer.mozilla.org/ja/docs/Web/CSS/Pseudo-classes
最後に,header
のbackground-color: black;
を消せば完成です!
こんな感じ!
今回作るフッターは本当にお飾り程度(けど,あると締まる)です.
内容もほとんどないですが,footer
要素内に以下をマークアップしてください.
<footer>
<p>© 2022. ○○. All rights reserved.</p>
</footer>
○○
の部分は自分の名前やペンネームを記載してください.
これで,このページの持ち主を明示できます.
ただ,日本ではいらないみたいな話もありますので,お飾り程度と思ってもらっても構いません.
footer {
height: 30px;
display: flex;
justify-content: center;
color: var(--main);
font-weight: 200;
font-size: 14px;
background-color: black;
}
background-color: black;
は後々消しますが,CSSの適用範囲が分かりやすいようにするために,色を付けます.
このままだと,こんな感じになります.
これは,ヘッダーとフッターの間のコンテンツ(main
)が空っぽだからです.
メインコンテンツの高さの最小を決めてあげることでこれに対処します.
メインが収まるための枠を作ります.
変わりません.
最小の高さを,以下の式にします.
つまり
こうすることで,「メイン内の最小高」と「ヘッダー」・「フッター」の高さを足すと,画面いっぱいになるように設定できます.
ただし,iOS の Safariでは,100vh(画面の表示領域いっぱいの高さ)
を指定しても,検索バーが考慮されないため正しく表示領域の値(vh)が使えません.
そこで,100svh(検索バーを考慮した表示領域)
という新しめの単位があります.
こちら「も」使います.
main {
min-height: calc(100vh - 110px);
min-height: calc(100svh - 110px);
}
これは,CSSのフォールバックという仕組みを使っています.
これはCSSで計算をするときに用いる関数です.
calc()
の()
内に式を入れます.
svh
という単位はSafariで定義されている単位で,PCのChrome等には定義されていない単位です.
なので,min-height: calc(100svh - 110px);
の計算ができない(iOS Safari以外でページを開いている)時は,2行目の計算が行われず,min-height: calc(100vh - 110px);
が適用されます.
svhの参考:
CSSの新しい単位「lvh」「svh」これでiOSのSafariで100vhがビューポートの高さではない仕様に対応できる
Devツールで見てみるとこんな感じです.(PCのChrome)
footer
の background-color: black;
を消して完成です.
ここまでで作ってきたHTMLファイルはすべてのページ(index.html
,about.html
)で共通なので,別ファイルに退避しておきます.
index.html
と同じ階層に,tmp.html
を作成して,作成したHTMLファイルをコピペします.
将来的にページを増やしたい時など,このテンプレートをコピペして,それをもとに作っていくことができます.
.gitignore
ファイルを同じ階層に作成してください.
そして内容を以下の通りにしてください.
tmp.html
このファイルの存在自体を知っておくのは大事なことです!
(大体のWebフレームワークの自動生成プロジェクトに含まれている)
これで,tmp.html
ファイルがコミットに含まれなくなります.
(あまり意味の無いファイルはコミットに含めたくない)
ここまでで,HTMLファイルのテンプレートとstyle.css
を作成してきました.
Indexページ
とAboutページ
を次から編集していきます.