作成日:2021/04/12 更新日:2022/09/21
#8 簡単なwebサイトを作ってみよう
例えばこういったデザインのホームページを作ろうと思ったとします。 自分で作る場合はラフデザインを書くところからスタートします。紙に鉛筆書きで結構です。webブラウザで見れるように、デザインをhtmlとcssで作るにはちょっとしたポイントを 押さえれば簡単に組み立てることが可能です。
それが「枠」という考え方です。
webブラウザで表示される枠(要素)は必ず 四角い枠 で構成されます。 三角や斜めや丸といった形も画面上で表示されているように見えますが、実際は 四角い枠 に入っています。
構造は必ず 四角い枠 で構成されるということを覚えておきましょう。
#9 枠をなぞってhtmlを作る
デザインを枠線だけで表現してみると単純な構造が見えてきます。 紙と鉛筆と消しゴムを用意して、デザインから長方形だけを使って枠を書き出してみよう。 そしてこの 枠(要素) に 名前 をつけてあげましょう。枠に名前をつけるとhtml文書が出来上がる
テキストエディタでは、下の絵のようにわかりやすくするため インデント(字下げ)をつけて書いていきましょう。 今回の枠は汎用的な <div> タグを使って構文を作っていきましょう。
<html>
<head>
<title>練習</title>
<link href="css/style.css" rel="stylesheet">
</head>
<body>
body
<div>
header
<div>
logo
</div>
</div>
<div>
visual
<div>
copy
</div>
</div>
<div>
text
</div>
<div>
menu
</div>
<div>
footer
</div>
</body>
</html>
ただし枠は、汎用的なdivタグで記述しました。このままだとcssでdivセレクタを指定した際に、すべての枠にプロパティが反映されてしまいます。
divタグ(枠)に名前をつけてそれぞれのタグ(枠)に個別にプロパティが反映されるようにします。次の章で枠に名前をつけてみましょう。
#10 枠に名前をつけて個別にデザインする
cssファイルにdivセレクタを指定して、プロパティを使ってデザインする方法は理解できたと思います。しかし、divタグで囲んだ枠はcssによってすべて変更されてしまい、デザインするにはなかなか不便です。 ですので、枠の一つ一つに名前をつけ枠を個別にデザインすることで解決しましょう。
枠に名前を付けるにはdiv class="名前"といったように、タグにclass=" "という 属性タグ (タグを補足するためのタグ)を追加してダブルクオーテーションのなかに自分で決めた「名前」を指定します。
クラスはそのままの意味で、例えば学校の1年生という大きなくくりがあり、1組、2組...とかのクラスに分けるということです。 div年生のheader組、logo組のような感じですね。
htmlは構造を作るための言語なので、このように順番通り表示されていれば 問題ありません。高さや幅や色などはcssで操作します。
枠に名前をつけ、cssで枠を指定したいとき
#11 枠を中央に配置するmargin
まずは要素の“幅、高さ”と“線”の指定を行います
.header{
height:150px;
}
.logo{
width:200px;
border: 1px solid #000;
}
.visual{
height:400px;
border: 1px solid #00F;
}
.copy{
height:250px;
margin-top:50px;
border: 1px solid #000;
}
.text{
}
.menu{
}
.footer{
}
枠には2種類の幅があります
htmlでは固定した幅と変化する幅という2種類の幅があります。ブラウザ(デバイス)の画面の幅は人それぞれです。 PCだったりスマホだったり、大きい人もいれば小さい人もいます。紙の印刷物と違い人によって表示されるデザインは異なるのです。 それに対応するために幅を調整していきます。
固定した幅
この時、固定され画面のサイズが変わっても動かない幅を「枠」に指定します。例でいえば、下の赤い部分が同じサイズ(980px)で固定されています。幅が変化する枠の中に、幅が固定された枠が入るイメージです。
固定する幅のことを考えたhtmlの書き方
▼解説幅を指定した枠を、画面の中央に配置したいとき
marginプロパティを使います。margin:0 auto;と呼びます。 センタリングしたい(中央揃えしたい)要素にmarginを入れてみましょう。
.header{
height:150px;
}
.header_contents{
margin:0 auto; /* ←追加 */
width:980px;
}
.logo{
width:200px;
border: 1px solid #000;
}
.contents{
margin:0 auto; /* ←追加 */
width:980px;
}
.visual{
height:400px;
border: 1px solid #00F;
}
.copy{
height:250px;
margin-top:50px;
border: 1px solid #000;
}
.text{
}
.menu{
}
.footer{
}
.footer_contents{
margin:0 auto; /* ←追加 */
width:980px;
}
表示されない場合の間違いやすいポイント
これぐらいになると、保存してブラウザでリロードしても意図したように表示されないことがあります。だいたいは 記述ミス によるものです。
ありがちなミスとしては、
- cssで値の最後の ;(セミコロン)が→ :(コロン)になっている
- htmlのクラス名とcssのセレクタ名が違う。class="contents"なのに .cotents{ }になってる
- htmlのクラス名の付け方が class-"" とかになっている
#12 2つの枠を横並びにするflex
どんどん書き込んでいきましょう
縦並びの枠を横並びにしたいときには、2つをさらに大きな枠(wrapper)で囲ってあげ、displayプロパティをつけることで可能になります。textとmenu枠をtext_wrapperという名前をつけた枠でラッピングし、 cssではdisplayプロパティで横並びにし、justify-contentプロパティを使って中の要素を「中央揃えに配置する」と設定しています。
.text_wrapper{
height:200px;
display:flex; /* flex形式にします */
justify-content: center; /* 子要素をセンタリング */
border: 1px solid #ccc;
}
いまはdisplayプロパティや、値のflexについては「そんな事ができるんだな」程度の認識で結構です。入門2で詳しく説明します。
#13 枠だけのホームページが完成
ひとまず完成したhtmlとcss
<html>
<head>
<title>練習</title>
<link href="css/style.css" rel="stylesheet">
</head>
<body>
<div class="header">
header
<div class="header_contents">
<div class="logo">logo</div>
</div>
</div>
<div class="contents">
<div class="visual">
visual
<div class="copy">copy</div>
</div>
<div class="text_wrapper">
<div class="text">text</div>
<div class="menu">menu</div>
</div>
</div>
<div class="footer">
footer
<div class="footer_contents">
©cri
</div>
</div>
</body>
</html>
.header{
height:150px;
margin-bottom:20px;
border: 1px solid #000;
}
.header_contents{
margin:0 auto;
width:980px;
border: 1px solid #000;
}
.logo{
width:200px;
border: 1px solid #000;
}
.contents{
margin:0 auto;
width:980px;
border: 1px solid #00F;
}
.visual{
height:400px;
}
.copy{
width:300px;
height:250px;
margin-top:50px;
border: 1px solid #000;
}
.text_wrapper{
height:200px;
display:flex;
justify-content: center;
border: 1px solid #ccc;
}
.text{
width:380px;
border: 1px solid #F0F;
}
.menu{
width:360px;
border: 1px solid #0F0;
}
.footer{
height:120px;
margin-top:30px;
border: 1px solid #000;
}
.footer_contents{
margin:0 auto;
width:980px;
text-align: center;
}
このような表示になります