前回の記事では、模写コーディングの方法について、レイアウトの確認や、事前の準備をメインに紹介しました。
まだ、ご覧になっていない方は前回の記事をご覧ください!
今回記事からは実際のコーディングを行います!
※模写コーディングをやってみたいけど、HTMLもCSSも全然わからない!!という方はまずこちらの記事を先にご覧ください!!
注意!
模写コーディングしたものをそのままインターネットに公開してしまうのは著作権的な問題があるのでNGです!
条件付きで公開OKですと謳ってるサイトもありますが、特殊な例です。基本的にはNGと思っておきましょう!
模写する範囲
前回レイアウトを確認した、ヘッダー~ヒーロービュー~SERVICEセクションまでの模写を紹介します。
今回記事は、ヘッダー部分のみとし、実際のコーディングでのプロセスに寄せて、順を追ってコーディングしていきます。
次回以降でヒーロービューとSERVICEセクションまでをポイントを絞って紹介します。
使用するエディタはVSCode等、emmetの使えるもの、ブラウザはChromeを前提として進めます。

ファイル構成
まずは任意の場所に以下のような構成でファイルを作成します。
sample/
├ index.html
├ css/
│ ├ style.css
│ └ reset.css
└ image/
├ hero_image.png
├ service_code.png
├ service_wordpress.png
└ service_responsive.png
reset.css
は、ブラウザのデフォルトのスタイルを消すためのリセットCSSを入れます。
"リセットCSS"でググると、The New CSS Resetや、destyle.css等、何種類か出てきますが、基本的にはそこまでの差はありません。
任意のリセットCSSを、まるっとコピーしてreset.css
に保存してください。
image
フォルダにはヒーロービューで使う画像と、SERVICEセクションで使う画像を三つ入れてあります。
HTMLテンプレートを呼出し、CSSファイルをリンクする
index.html
を開き、emmetコマンドの!
+Tabキー
にてHTMLのテンプレートを呼び出しましょう。ついでに言語設定もlang="en"
からlang="ja"
に変更します。
<!DOCTYPE html>
<html lang="ja"><head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>
reset.css
と、style.css
を読み込む記述をします。
reset.css
を先に読み込み、ブラウザのデフォルトスタイルを消してから、スタイルを指定しなければならないので、上に記述します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./css/reset.css"> <link rel="stylesheet" href="./css/style.css"> <title>Document</title>
</head>
<body>
</body>
</html>
また、<link>
要素のhref
属性には、読込むファイルのパスを指定しますが、相対パスでの指定をしてください。
<a>
要素のhref
属性や、<img>
要素のsrc
属性等も同様ですが、css
フォルダ内やimage
フォルダ内へのパスは、基本的には相対パスを指定しましょう。
相対パスとはここではindex.html
ファイルから見た、他のファイルへのパスとなります。
同じフォルダ内でのファイル・フォルダへのパスは./
から始まり、一つ上のフォルダのファイル・フォルダへのパスは../
から始まります。
今後、サーバーへのアップロードをする場合でも、相対パスであれば、index.html
ファイルから辿った、style.css
までのパスとなるので問題なく読込むことができます。
ヘッダーのコーディング
ここから、いよいよヘッダー部分をコーディングします。
少し長くなりますが、実際のコーディングでのプロセスに寄せて、順を追ってコーディングしていきます。
HTMLのコーディング
前回の記事で確認したヘッダー部分のレイアウトをもう一度見てみましょう。
ヘッダー以下の要素のネスト(入れ子)の関係性を表わすと下のようなイメージですね。
<header class="header">
└ <div class="wrapper">
├ <h1 class="header_ttl">
└ <nav class="header_nav">
└ <ul>
├ <li>
│ └ <a>
├ <li>
│ └ <a>
├ <li>
│ └ <a>
├ <li>
│ └ <a>
├ <li>
│ └ <a>
└ <li>
└ <a>
HTMLで記述すると以下のようになります。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./reset.css">
<link rel="stylesheet" href="./style.css">
<title>Document</title>
</head>
<body>
<header class="header"> <div class="wrapper"> <h1 class="header_ttl">KATSU portforio</h1> <nav class="header_nav"> <ul> <li><a>service</a></li> <li><a>portfolio</a></li> <li><a>skill</a></li> <li><a>price</a></li> <li><a>profile</a></li> <li><a>contact</a></li> </ul> </nav> </div> </header></body>
</html>
※ナビゲーションメニューの<a>
要素のhref
属性はページ内リンクとするため、各々href="#service"
のように、各セクションのIDを指定してください。href
属性は必須指定です。ここではブログシステムの不具合で属性を付けられませんでした…
ネストしている要素はインデント(字下げ)を付けるのが分かりやすいのでオススメです。VScodeでは通常Tabキーで半角スペース4つが挿入されると思います。
ここの例では私の好みでスペース2つでインデントを付けています。
この段階では何もスタイルをあてておらず、リセットcssのみが適用されている状態なので、index.html
をブラウザで開くと以下のような感じです。
HTML側の記述はとりあえずこんな感じでいいでしょう。事前にタグ・クラス名の検討を詳細に行っておく事で、HTML記述はかなり楽になると思います。
CSSのコーディング
ここからCSSを記述してスタイルを指定するので、style.css
をエディタで開きます。
まずは文字コードの指定を記述しておきましょう。
@charset "utf-8";
ヘッダーの要素を外側から順にみていきましょう。
一番外側の.header
は幅は画面幅いっぱいで、高さは内容物次第で良さそうです。(ブロック要素の既定の動作)
ですが、上下のpadding
を指定しておかない内容物との余白がなくピッタリくっつく状態になるので指定します。
@charset "utf-8";
.header { padding: 20px 0;}
一つ内側の要素の、.wrapper
クラスは固定幅で左右中央揃えにしたいものでした。
この.wrapper
の幅を調べたいので、Chrome拡張機能のDesignerToolsで確認してみましょう。
まずは模写するWEBサイトを開きましょう。
DesignerToolsをChromeに追加している方は、下のようにツールバーにアイコンが表示されていると思うのでクリックしてください。
拡張機能にDesignerToolsがない方はリンク先から追加してください。
DesignerToolsを起動した状態でマウスカーソルを要素にかざすと、以下のように要素のサイズが表示されます。
幅は1000pxとなっていますね!
従って次のようにスタイルを指定します。
@charset "utf-8";
.header {
padding: 20px 0;
}
.wrapper { width: 1000px; margin: 0 auto;}
幅を1000px固定として、margin: 0 auto;
で左右マージンを自動化して中央揃えとなります。
ここで一旦、各ボックスがどのようになっているか背景色を付けてみてブラウザで確認しましょう。
@charset "utf-8";
.header {
padding: 20px 0;
background-color: pink;}
.wrapper {
width: 1000px;
margin: 0 auto;
background-color: gold;}
中央揃えになってますね!確認したら背景色は消去しておきましょう。
尚且つここでは、<h1>
と<nav>
は横並びにしたいのでdisplay: flex;
を追加したいところですが…
この.wrapper
クラスに左右中央揃え以外のスタイルをつけてしまうと、他のセクションで.wrapper
を使えなくなってしまいます。どうしましょう??
ここでは、新しく.header_wrap
クラスを追加することとし、そこにdisplay: flex;
のスタイルを指定することにしましょう。
一旦index.html
ファイルに戻り、次の通りwrapper
クラスのついている<div>
にheader_wrap
クラスを追加します。
...
<header class="header">
<div class="wrapper header_wrap"> <h1 class="header_ttl">KATSU portforio</h1>
<nav class="header_nav">
<ul>
<li><a>service</a></li>
<li><a>portfolio</a></li>
<li><a>skill</a></li>
<li><a>price</a></li>
<li><a>profile</a></li>
<li><a>contact</a></li>
</ul>
</nav>
</div>
</header>
...
wrapper
とheader_wrap
の間に半角スペースを入れるの忘れずに!
style.css
に戻り、追加した.header_wrap
のスタイルを新しく記述します。
@charset "utf-8";
.header {
padding: 20px 0;
}
.wrapper {
width: 1000px;
margin: 0 auto;
}
.header_wrap { display: flex; justify-content: space-between; align-items: center;}
ここまでで、見出しとメニューが左右横並びになったと思います。
次はフォントを調整します。
Chrome拡張のWhatFontでフォントを調べてみましょう。
模写するWEBサイトを開き、下記のツールバーのWhatFontのアイコンをクリックします。(WhatFontが無い方はChromeに追加して下さい)
WhatFontを起動した状態で、テキストをドラッグ・クリックすると、フォント情報が表示されます。
タイトルでは、
font-family
は"Noto Sans Jp", sans-serif
font-size
は26pxfont-weight
は700
ナビゲーションでは、
font-family
は"Noto Sans Jp", sans-serif
font-size
は16pxfont-weight
は400
同様にスタイルを記述します。
@charset "utf-8";
.header {
padding: 20px 0;
}
.wrapper {
width: 1000px;
margin: 0 auto;
}
.header_wrap {
display: flex;
justify-content: space-between;
align-items: center;
}
.header_ttl { font-family: "Noto Sans Jp", sans-serif; font-size: 26px; font-weight: 700;}.header_nav { font-family: "Noto Sans Jp", sans-serif; font-size: 16px; font-weight: 400;}
※font-family
はほとんどの場合<body>
等に指定して、ページ全体に継承して統一する使い方が多いですが、ここではとりあえずこのまま続けます。
font-family
プロパティの"Noto Sans Jp"
はWEBフォントと呼ばれるもので、フォントを読込みしなければなりません。
WEBフォントを読込むために、index.html
に戻り、<head>
内に次を追加しましょう。
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./reset.css">
<link rel="stylesheet" href="./style.css">
<link href="https://fonts.googleapis.com/css?family=Lato:400,700|Noto+Sans+JP:400,700" rel="stylesheet"> <title>Document</title>
</head>
style.css
に戻り、ナビゲーションメニューを横並びにしてしまいましょう。
@charset "utf-8";
.header {
padding: 20px 0;
}
.wrapper {
width: 1000px;
margin: 0 auto;
}
.header_wrap {
display: flex;
justify-content: space-between;
align-items: center;
}
.header_ttl {
font-family: "Noto Sans Jp", sans-serif;
font-size: 26px;
font-weight: 700;
}
.header_nav {
font-family: "Noto Sans Jp", sans-serif;
font-size: 16px;
font-weight: 400;
}
.header_nav ul { display: flex; }
ここまででこんな感じになりました。
ナビゲーションメニューのリストの間隔がないので調整しましょう。
この左右の間隔がどれくらいあるのかも、DesignerToolsで調べる事ができます。
DesignerToolsを起動し、メニューの一項目をクリックしてアクティブ状態にしてから、他の要素にカーソルをかざすと、以下のように間隔を測定することができます。
少し見づらいですが、塗りつぶしになっている数値が要素間の間隔になります。ここでは各項目の間隔が40pxであることが分かりました!
各リスト要素の左右に20pxずつ設けて、合わせて40pxとしましょう。
@charset "utf-8";
.header {
padding: 20px 0;
}
.wrapper {
width: 1000px;
margin: 0 auto;
}
.header_wrap {
display: flex;
justify-content: space-between;
align-items: center;
}
.header_ttl {
font-family: "Noto Sans Jp", sans-serif;
font-size: 26px;
font-weight: 700;
}
.header_nav {
font-family: "Noto Sans Jp", sans-serif;
font-size: 16px;
font-weight: 400;
}
.header_nav ul {
display: flex;
}
.header_nav ul li { margin: 0 20px;}
あと、今回は画像データしか載せていないので分からないですが…ナビゲーションメニューにマウスをかざすと下線が表示されます。
実際のサイト模写の時はマウスホバー時の動作も色々試してみましょう。
見出しの左枠線と一緒の色とするので、Chrome拡張のColorPickで調べましょう。
模写するWEBサイトを開き、下記のツールバーのColorPickのアイコンをクリックします。(ColorPickが無い方はChromeに追加して下さい)
ColorPickを起動すると、カーソルをかざした箇所が拡大されて、1px単位で色コードを確認できます。
色コードを確認する場所にカーソルをかざし、クリックするとピックアップした箇所が固定されるので、表示された色コードをコピーすることができます。
ここでは色コードは#FFCF65
又は、rgb(255,207,101)
のようです。この色コードをコピーして<a>
要素をホバーした時の下線に指定しましょう。
@charset "utf-8";
.header {
padding: 20px 0;
}
.wrapper {
width: 1000px;
margin: 0 auto;
}
.header_wrap {
display: flex;
justify-content: space-between;
align-items: center;
}
.header_ttl {
font-family: "Noto Sans Jp", sans-serif;
font-size: 26px;
font-weight: 700;
}
.header_nav {
font-family: "Noto Sans Jp", sans-serif;
font-size: 16px;
font-weight: 400;
}
.header_nav ul {
display: flex;
}
.header_nav ul li {
margin: 0 20px;
}
.header_nav ul li a:hover{ border-bottom: 3px solid #FFCF65;}
色コードを16進数指定する際、頭に#
を付けるのを忘れずに(よく忘れちゃいます笑)
これでヘッダーが完成です。それらしくなりました!
最終的なコードはこんな感じです。
index.html
は…
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./reset.css">
<link rel="stylesheet" href="./style.css">
<link href="https://fonts.googleapis.com/css?family=Lato:400,700|Noto+Sans+JP:400,700" rel="stylesheet">
<title>Document</title>
</head>
<body>
<header class="header">
<div class="wrapper header_wrap">
<h1 class="header_ttl">KATSU portforio</h1>
<nav class="header_nav">
<ul>
<li><a>service</a></li>
<li><a>portfolio</a></li>
<li><a>skill</a></li>
<li><a>price</a></li>
<li><a>profile</a></li>
<li><a>contact</a></li>
</ul>
</nav>
</div>
</header>
</body>
</html>
style.css
は…
@charset "utf-8";
.header {
padding: 20px 0;
}
.wrapper {
width: 1000px;
margin: 0 auto;
}
.header_wrap {
display: flex;
justify-content: space-between;
align-items: center;
}
.header_ttl {
font-family: "Noto Sans Jp", sans-serif;
font-size: 26px;
font-weight: 700;
}
.header_nav {
font-family: "Noto Sans Jp", sans-serif;
font-size: 16px;
font-weight: 400;
}
.header_nav ul {
display: flex;
}
.header_nav ul li {
margin: 0 20px;
}
.header_nav ul li a:hover{
border-bottom: 3px solid #FFCF65;
}
まとめ
こんな感じでなるべくソースコードを見ずに、拡張機能でサイズ・配色・フォント等を確認して、試行錯誤しながら実装するのが模写コーディングの流れになります。
今回の例のように、事前に確認したレイアウトから変更が生じることもあると思いますが、何度か練習すればスムーズに行けるようになります!
また、紙やデザインデータに書き出したりせずとも、頭の中で構成を考えて、そのままコーディングに…ともできるハズです!
次の記事 残りのヒーロービューとSERVICEセクションの模写のポイントを紹介します!