CSS入門
CSSはとても簡単で、視覚で効果がわかるのでとっつきやすい言語です。このページを読めば今日からCSSが書けます。
このページでは、はてなブログなどHTMLが完成されていてCSSだけを書きたい人を対象にしています。なのでHTMLの知識がなくても大丈夫です。
CSSとは
CSSとは、簡単にいえばウェブサイトの見た目を設定する言語です。
Cascading Style Sheets (CSS)とは、HTML や XML (XHTML・SVGなどを含む)で記述された文書の体裁や見栄えを表現するために用いられるスタイルシート言語です。CSSは、要素が画面上で(あるいは紙や音声といった別のメディア上で)どのように表現されるのかを定義します。
現在多くのウェブサイトでは、文書構造はHTML、見た目(スタイルといいます)はCSS、動的なコンテンツ(外部データの読み込みや自動で文書構造を変える)はJavaScriptというように役割ごとに言語が使われています。
CSSの根本的な理解にはHTMLの知識が必要ですが、それはむしろCSSを扱っていくうちにだんだんわかってくるでしょう。このページでは必要なHTML知識もその場で簡単に説明しています。
CSSの基本
CSSは、HTMLで書かれた文書の任意の箇所の見た目を指定するものです。
たとえば、このようなHTMLがあります。
<p>こんにちは</p>
こんにちは
この文字を赤くしてみましょう。
<p>こんにちは</p>
p { color: red }
こんにちは
これがCSSです。どうなっているのか説明していきます。
基本の文法
CSSの文法はとてもシンプルです。どんな場合でもこのように記述します。
スタイル対象 { スタイル内容 }
これをスタイルしたい箇所の数だけひたすら並べていくだけです。
スタイル対象 { スタイル内容 } スタイル対象 { スタイル内容 } スタイル対象 { スタイル内容 }
一般的なプログラミング言語のように変数があったり分岐があったり...という複雑な文法は一切なし。すべてこれだけです。簡単そうでしょう?
それでは具体的に「対象」と「スタイル内容」の書き方に進みます。いよいよCSSを実際に書けるようになります。
スタイル対象の指定の仕方
タグの種類で指定する
CSSではHTML内の要素に対してスタイルを設定します。要素とは< >
〜〜</ >
で囲ってある部分のことです。この< >
を「タグ」といいます。タグはその中身(<p>
、<div>
など)によって、それぞれp
タグ、div
タグなどといった種類に分かれています。
先ほどの例を見てみましょう。
<p>こんにちは</p>
p { color: red }
こんにちは
ここでは、p
タグで挟まれた要素(p
要素と一般的に呼びます)を対象に指定しています。
下のサンプルではタグの種類ごとに違うスタイルを適用しています。
<p>こんにちは</p> <div>こんばんは</div> <span>さようなら</span>
p { color: red } div { color: blue } span{ color: green }
こんにちは
さようなら
要素が入れ子になっている場合、親要素にスタイルを適用すると、中の要素全てにスタイルが適用されます。
<section> <p>こんにちは</p> <div>こんばんは</div> </section> <span>さようなら</span>
section { color: red }
こんにちは
さようなら
クラス/idで指定する
それではこのように同じタグの要素が複数ある場合はどうでしょうか
<p>こんにちは</p> <p>こんばんは</p> <p>さようなら</p>
p { color: red }
こんにちは
こんばんは
さようなら
タグで指定すると、同じタグの要素全てに適用されてしまいます。
同じタグの要素について別々にスタイルをしたいときは、「クラス」か「id」を使います。
「クラス」「id」とはどちらもHTML内の要素に個別につける名前のことです。
違いは「クラス」は同じ名前を複数の箇所につけられるのに対し、「id」は同じ名前は1箇所にしか使えないということです。
どちらもCSSにおいてはそんなに扱いは変わりません。
HTMLのタグ(< >
)内には、タグ名に続けてクラス名やid名を指定できます。
<div class="クラス名" id=" id名">~~~~</div>
一般的なウェブサイトではほとんど全ての要素にクラス名もしくはid名が付いているので、クラスやidによって対象を指定すればピンポイントでスタイルを適用できます。
<p class="morning">こんにちは</p> <p class="evening">こんばんは</p> <p id="bye">さようなら</p>
p.morning { color: red } p.evening { color: blue } p#bye { color: green }
こんにちは
こんばんは
さようなら
p.morning
とは「クラスがmorning
のp
要素」、
p#bye
は「idがbye
のp
要素」という意味になります。
上ですこし触れた通りクラスは同じ名前を複数の箇所につけられるので、クラスで指定した場合は複数の箇所を一気にスタイルできます。
<p class="greeting">こんにちは</p> <div class="greeting">こんばんは</div>
.greeting { color: red }
こんにちは
.greeting
は「クラスがgreeting
の要素」という意味です。このようにタグの種類を指定しないでクラスのみで指定すると、同じクラスを持つすべての種類の要素にスタイルを適用します。
idは同じ名前は1箇所しかないので、これはあてはまりませんね。つまり、p#bye
と書いても#bye
と書いても同じことです。
どこの部分がどういうクラス名やid名なのかは自分で作ったHTMLならわかっていますが、はてなブログのように最初からHTMLが作られている場合は調べないとわかりません。
はてなブログについてはこのページにまとまっています。
theme-plain.hatenablog.com
基本的な対象の指定方法はこれでOKです。次はスタイル内容の書き方をみていきましょう。
スタイル内容の書き方
ここまででスタイル対象の指定方法を覚えました。スタイル内容は、そのスタイル対象に具体的にどういうスタイル(色を赤くする、サイズを大きくする...など)を適用するかを書く部分です。このスタイル内容のことを「プロパティ」といいます。
具体的な書き方はこうなります
プロパティ名 : 値
プロパティの種類はたくさんあります。これはCSSを書いていくうちにだんだん覚えてくるので大丈夫です。あとでいくつかよく使うプロパティを載せておくので、最初はそれを見ながらすこしずついろいろなプロパティを使ってみるといいです。
たとえば下の例では、color
がプロパティ名でred
が値です。
p { color: red }
これでCSSのひと単位がまるまる書けるようになりました。あとはこれをひたすら並べるだけです。
p { color: red } div.myname { font-size: 100% } #blog-title { background-color : orange }
といった具合ですね。
ちなみにCSSではスペースや改行は無視されます(実はスペースを使った文法もあるのですが、今は考えなくていいです)。
なので、下のような書き方でもOKです。ぜんぶちゃんと動作します。
p { color: red } p { color : red } p{color:red} p { color : red }
ところで、ひとつの対象に複数のプロパティを指定したいときもあります。
p { color: red } p { font-size: 100% }
上の書き方でダメなわけではないですが、冗長です。こういうときは下のようにまとめられます。
p { color: red ; font-size: 100% }
;
で区切ればいいんですね。このセミコロンですが、プロパティ同士の間にしか書いてはいけないわけではありません。下のように書いてもOKです。
p { color: red ; font-size: 100% ; } p { color: red ; }
実は僕はプロパティがひとつだけのときも必ずこのセミコロンは付けています。あとでプロパティを追加するときにセミコロンを忘れてエラーを起こさないためです。
代表的なプロパティの種類
よく使うプロパティを紹介します。なお、プロパティ一覧はこちらのウェブサイトが便利です。
www.htmq.com
色に関するプロパティ
CSSでは色は下のいずれかの書き方で表現します。
・カラーネーム(例:red
)
・16進数カラーコード(例:#ff0000
)
・rgbカラーコード(例:rgb ( 255, 0 ,0 )
)
カラーコードは馴染みがないと思うので、最初はこちらのサイトからコピペでいいでしょう。
www.htmq.com
color
color
は文字の色を指定するプロパティです。なので文字が入っていない要素に対して指定してもなにも起こりません。
<p>こんにちは</p>
p { color: red }
こんにちは
background-color
background-color
は背景の色を指定するプロパティです。
<p>こんにちは</p>
p { background-color: red }
こんにちは
長さや大きさに関するプロパティ
長さや大きさを指定するには、「単位」が必要になります。ぼくらだって「1cm」とか「1マイル」とか「1尺」とか言ってくれないとわかりませんよね。
長さや大きさの単位はいくつか種類があるのですが、よく使うものを紹介しておきます。
px
em
rem
」という単位を使います(厳密には相対単位ですが実質的に絶対単位のように使えます)。%
box-sizing
やposition
というプロパティを理解していないと使いにくいです。vw
/vh
vw
は画面幅を100とした長さ、vh
は画面高を100とした長さになります。たとえば1vw
は画面幅の1%ということになります。レスポンシブのレイアウトなどに便利です。width/height
width
は幅の長さ、height
は高さを指定するプロパティです。インライン要素には使えません。
<a>インライン要素</a> <div>ブロックレベル要素</div>
a { background-color: red ; width: 50% ; height: 5em } div { background-color: red ; width: 50% ; height: 5em }
margin/padding
margin
は周囲との間隔(外側の余白)、padding
は内側の余白を指定するプロパティです。margin
はインライン要素には使えません。
<div class="ma">marginを設定</div> <div class="pa">paddingを設定</div> <div class="ma pa">両方を設定</div>
.ma { background-color: red ; margin: 2em } .pa { background-color: red ; padding: 2em }
このようにmargin(もしくはpadding): 2em
のように設定すると、上下左右全ての方向に同じ値が適用されます。以下のように書くと、上下左右ばらばらの値を指定できます。
(ここからmargin
を例にとっていますが、padding
も同様です)
margin: 2em 0 5px 4vw
順番に 上 右 下 左 です。上から右方向に一回転ですね。
ちなみに、
margin: 0 2em
のように書くと 上下 左右 になります。
ある方向の値だけ指定したい、というときはmargin-top
margin-right
margin-bottom
margin-left
というプロパティを使います(padding
も同様)。
<div class="ue">上方向marginを設定</div> <div class="sayuu">左右方向marginを設定</div> <div class="barabara">上下左右ばらばらのmarginを設定</div>
div {background-color: red } .ue {margin-top: 2em } .sayuu {margin: 0 2em } .barabara {margin: 2em 0 5px 4vw }
文字に関するプロパティ
font-size
文字の大きさ。px
%
などで指定します。
<p>こんにちは</p>
p { font-size: 200% }
こんにちは
font-weight
文字の太さ。light
regular
bold
heavy
black
などで指定します。が、そんなに太さの種類を取り揃えてあるフォントはそんなにないので、だいたいはregular
bold
くらいしか出番がありません。regular
のみのフォントもけっこうあります。
<p>こんにちは</p>
p { font-weight: bold }
こんにちは
font-style
文字のスタイル。normal
italic
oblique
のどれかで指定します。
<p>こんにちは</p>
p { font-style: italic }
こんにちは
text-decoration
文字の装飾。none
underline
overline
line-through
のどれかで指定します。
<p class="nom">こんにちは</p> <p class="und">こんにちは</p> <p class="ove">こんにちは</p> <p class="lin">こんにちは</p>
p.nom { text-decoration: none } p.und { text-decoration: underline } p.ove { text-decoration: overline } p.lin { text-decoration: line-through }
こんにちは
こんにちは
こんにちは
こんにちは
font-family
フォントの種類の指定。ウェブサイトの雰囲気はフォントでかなり変わるので、大事ですね。
使えるフォントはそのページを見ている人のデバイスにインストールされているフォントです。...いやそんなの知るかいということになりますね。ページを訪れる全ての人のデバイスにインストールされている保証のあるフォントなんてありません。じゃあどうすればいいか。
・メジャーなフォントを使う
英字ならHelveticaやFutura、Arial、Times、日本語ならメイリオあたりを指定しておけばだいたいどんな環境からみられても大丈夫です。
・WEBフォントを使う
WEBフォントを使えば、どんな環境に対しても同じフォントを表示できます。このブログのトップページのロゴはWEBフォントを使っています。
Google Fontsなどのサイトからウェブページにインストールして使います。
fonts.google.com
Google Fontsの使い方は、
好きなフォントを選んでボタン → 下の方にでてくるボックスからEMBED → STANDARD の中にある<link href=~~~~~>
を自分のページのHTMLの<head>~~~</head>
の中に貼ればOKです。
<p class="fut">Hello</p> <p class="cen">Hello</p> <p class="mei">こんにちは</p>
p.fut { font-family: 'Futura' } p.cen { font-family: 'Century' } p.mei { font-family: Meiryo, sans-serif }
Hello
Hello
こんにちは
このページでは代表的かつ今すぐに使い始められるような簡単なプロパティのみ紹介しました。CSSを始めるにはこれだけで十分だと思います。これだけでかなりスタイルできますよ。
ステップアップしてもっといろいろなスタイルをしてみたくなったら、こちらのサイトのプロパティ一覧が便利です。
www.htmq.com
中級編:セレクタの使い方
これまでこのページではCSSをこんなかんじで書いてきました。
p { color: red }
このp
(スタイル対象)の部分のことを「セレクタ」といいます。スタイル対象をセレクトするわけです。
セレクタにはいろいろな書き方があり、うまく使うと効率よくスタイル対象をセレクトできます。
複数選択(複数セレクタ)
スタイル対象を,
で区切ると複数の対象に同じスタイルを適用できます。
<p>こんにちは</p> <div>こんにちは</div>
p, div { color: red }
こんにちは
子孫要素を選択(子孫要素セレクタ)
ある要素の子要素に対してスタイルを適用したい場合、このようにスペースで区切って書きます
親要素 子要素 { color: red }
このとき、スタイルが適用されるのは子要素だけです。また、下のように「ある要素の子要素の子要素の...」というようにもできます。このときスタイルが適用されるのは最後の子要素だけです
親要素 子要素 子要素 子要素 { color: red }
<div> <ul class="fruits"> <li>スイカ?</li> <span> <li>みかん</li> <li>りんご</li> </span> </ul> <ul class="vegetables"> <li>いちご?</li> <span> <li>にんじん</li> <li>トマト</li> </span> </ul> </div>
ul.fruits li { color : red } ul span { background-color : pink } div ul.vegetables span li { font-weight : bold }
- スイカ?
- みかん
- りんご
- いちご?
- にんじん
- トマト
直下の子要素を選択(子要素セレクタ)
さきほどのスペースで区切る方法では階層的に入れ子になっている全ての要素(子孫要素といいます)にもスタイルが適用されました。
この子孫要素にはスタイルを適用しない書き方があります。
親要素 > 子要素 { color: red }
このように>
で区切ります。
先ほどのスペースで区切る方法と組み合わせてたとえば下のように書くと、「A要素直下のB要素内の(子孫要素を含む)全てのC要素」をセレクトします。
A > B C { color: red }
子孫セレクタのときと同じサンプルで違いをみてください。
<div> <ul class="fruits"> <li>スイカ?</li> <span> <li>みかん</li> <li>りんご</li> </span> </ul> <ul class="vegetables"> <li>いちご?</li> <span> <li>にんじん</li> <li>トマト</li> </span> </ul> </div>
ul.fruits > li { color : red } ul > span { background-color : pink } div > ul.vegetables > span > li { font-weight : bold }
- スイカ?
- みかん
- りんご
- いちご?
- にんじん
- トマト
color: red
の指定に違いがでています。ul.fruits
直下のli
だけをセレクトしているので、<span>〜〜</span>
の中には効果が及んでいません。
全ての要素を選択(ユニバーサルセレクタ)
全ての要素をセレクトするには*
を使います。
*{ color: red } /*ページ内の全ての要素を選択*/ A > *{ color: red }/*A直下の全ての要素を選択*/
その他いろいろなセレクタ
ここで紹介したセレクタだけで困ることはほとんどありませんが、他にもいろいろなセレクタがあります。機会があれば挑戦してみましょう。
www.htmq.com
スタイルの優先順位
ユニバーサルセレクタであっても必ずしもすべてに適用されるわけではありません。CSSには「スタイルの優先順位」があります。こちらのページで詳しく解説しています。
www.htmq.com
絶対に優先させたい設定には!important
を使いましょう。ただし、使いすぎは禁物、というか最終手段にとっておくべきです。
おまけ:コメントの付け方
おまけといっても大事なことです。CSSではコードの中に、動作に影響しない(コンピュータには無視される)コメントを書くことができます。
p /*コメント*/{ color/*コメント*/: red;/*コメント*/} /*コメント*/
このようにコメントはどこにでも書けます。/*
と*/
で挟んだ部分がコメントになります。改行しても大丈夫です。
p { color: red } /* 複数行にわたるコメント */ p { color: red }
コンピュータはコメント内は全て無視するので、一時的に無効にしたいコードをコメント内にいれてしまうという方法があります。これは「コメントアウト」といって、プログラミング全般でよく使われる手法です。
p { color: red } /* p { color: red } */