<p style="color: red;">インラインスタイル</p>
HTMLにスタイルを充てる方法です。
<p>
タグの文字色を赤にしてください。<p>pタグの内容</p> <span>spanタグの内容</span>
p { color: red; }
タグセレクターのようにHTMLタグを直接指定すると
されてしまいます。
意図する場所だけにスタイルを充てるためにクラスセレクターを使うクセを付けておきましょう。
(場合に応じてタグセレクターを使用することもあります)
hello-wrapper
クラスがついた要素の文字色をオレンジ色にしてください。<p class="hello-wrapper">pタグの内容</p> <span>spanタグの内容</span>
.hello-wrapper { color: orange; }
「,」(カンマ)でクラスを繋いで複数のクラスにスタイルを適用する事ができます。
.goodbye
クラスと.hello
クラスが付いた要素の文字色をグレーにしてください。<p class="goodbye">pタグの内容</p> <span class="hello">spanタグの内容</span>
.goodbye, .hello { color: gray; }
もっともよく見かけるセレクターの種類です。
HTMLタグの入れ子をした状態で細かく指定できることが大きなメリットです。
.hello-wrapper
クラスの子要素の .hello
クラスが付いた要素の文字色をグリーンにしてください。<div class="hello-wrapper"> <p class="goodbye">pタグの内容</p> <span class="hello">spanタグの内容</span> </div>
.hello-wrapper .hello { color: green; }
今までのクラスセレクターは、class="xxx"
や .xxx
で記述していましたが、IDセレクターは若干違います。
クラスセレクターとの違いは同じID名を他のタグでは使うことはできません。
そのためクラスセレクターと違って使い勝手が悪いのでIDセレクターはあまり使いません。
(筆者はJavaScriptのセレクターとして使用することが稀にあります)
id-selector
のIDが付いた要素の文字色を水色にしてください。<div id="id-selector">IDセレクタで文字の色を変える</div> <!-- 2回目のこのIDセレクターは使用不可 --> <div id="id-selector">IDセレクタで文字の大きさを変える</div>
#id-selector { color: skyblue; }
※ id名は同じ要素に対して複数のid名を指定することはできません。
<div id="test test2">これは無効です</div>
すべてのHTML要素を対象に共通のCSSプロパティを指定したい場合のプロパティです。
* { color: blue; }
上述した
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>セレクタの練習</title> <style> /* ここにスタイルシートを書く */ </style> </head> <body> <div> <p class="hello">こんにちは</p> </div> <p style="color: pink;">こんばんは</p> <p id="id-selector">はじめまして</p> <p class="goodbye">さようなら</p> <div class="hello-wrapper"> <div class="hello">こんにちは</div> </div> </body> </html>
クラスセレクターを利用する際にルールや注意点があります。
.hello {...} .Hello {...} .こんにちは {...} .hello-goodbye {...} .hello_goodbye {...} .hello8 {...} .8hello {...} /* NG */
下記のHTMLを用意して、それぞれのCSSを試してみましょう。
<section class="news-area"> <ul class="news-area-main"> <li>メインニュース1</li> <li>メインニュース2</li> <li>メインニュース3</li> </ul> <div> <ul class="news-area-sub"> <li>サブニュース1</li> <li>サブニュース2</li> <li>サブニュース3</li> </ul> </div> </section>
「メインニュース1〜3だけ」を水色にする設定をしてみましょう。
下記の「よくない例」ですとサブニュース1~3も水色になってしまいます。
>
を利用することによって、.news-area
の直ぐ下層にある <ul>
の中の <li>
という指定方法になります。
/* よくない例 */ .news-area ul li { color: #skyblue; } .news-area > ul li { color: #skyblue; }
下記のコードの結果、メインニュース2と3の文字がピンクになります。
<li>
を +
で繋げることによって2番目の <li>
を指定するようになります。
.news-area .news-area-main li + li { background-color: pink; }
例として、2番目のナビゲーションから左側に margin-left: 10px;
を適用させたイメージです。
すべてのナビゲーションの左側に margin-left: 10px;
させてしまうと一番左側にも10pxの余白ができてしまってデザイン通りにはならないと思います。
そういった時にこのテクニックは有効です。
まずこちらのHTMLを用意してください。
<ul class="main-menu"> <li><a href="#">メニュー1</a></li> <li><a href="#">メニュー2</a></li> <li><a href="#">メニュー3</a></li> <li><a href="#">メニュー4</a></li> <li><a href="#">メニュー5</a></li> <li><a href="#">メニュー6</a></li> <li><a href="#">メニュー7</a></li> <li><a href="#">メニュー8</a></li> <li><a href="#">メニュー9</a></li> <li><a href="#">メニュー10</a></li> <li><a href="#">メニュー11</a></li> </ul>
擬似クラスには、いろいろな種類があります。
急いですべて覚える必要はないので、こういう種類があるとだけ覚えておいてください。
/* カーソルが乗っている要素 */ .main-menu li a:hover { background-color: red; text-decoration: none; } /* 最初の要素 */ .main-menu li:first-of-type { background-color:#faa; } /* n番目の要素 */ .main-menu li:nth-of-type(2), .main-menu li:nth-of-type(3) { background-color:#afa; } /* 最後の要素 */ .main-menu li:last-of-type { background-color: #aaf; } /* 奇数の要素 */ .main-menu li:nth-of-type(odd) { background-color:#faf; } /* 偶数の要素 */ .main-menu li:nth-of-type(even) { background-color:#ffa; } /* 3の倍数の要素 */ .main-menu li:nth-of-type(3n) { background-color:#aff; } /* 3の倍数プラス1の要素 */ .main-menu li:nth-of-type(3n+1) { background-color:#aff; }
要素の上にマウスのポインタを要素の上に置いたときに実行されるクラスです。
リンクを作成するaタグと一緒に使われることが多い擬似クラスです。
<a class="button" href=#>Button</a>
.button { color: #fff; background-color: #3a3a3a; text-decoration: none; padding: 20px; } .button:hover{ color: #000; background-color: #c9c9c9; }
https://codepen.io/cotton/pen/WNNQJqm
セレクターには詳細度というものがあり、セレクターの設定によって詳細度が変化し、セレクターの詳細度によって優先されるスタイルが上書きされます。
<div> <p class="menu">こんにちは</p> </div>
div .menu { color: orange; } div p { color: skyblue; } p { color: palegreen; }
指定方法 | 例 | 点数 |
---|---|---|
タグのstyle属性 | style="color: orange;" | 1000点 |
ID | #hoge | 100点 |
クラス | .hoge | 10点 |
要素名 | ul | 1点 |
擬似クラス | :first-child | 1点 |
全称セレクター | * | 0点 |
例 | 計算 | 合計点 |
---|---|---|
style="" | 1000(style属性) | 1000点 |
#hoge | 100(ID属性) | 100点 |
li.color.label | 1(要素名)+ 10(クラス属性)+ 10(クラス属性) | 21点 |
table tr td.color | 1(要素名)+ 1(要素名)+ 1(要素名)+ 10(クラス属性) | 13点 |
h1 div + span | 1(要素名)+ 1(要素名)+ 1(要素名) | 3点 |
li:last-child | 1(要素名)+ 1(擬似クラス) | 2点 |
※ただし、クラスを10個以上付ければID属性の詳細度を超える訳ではないので注意してください。
(10個以上の点数は無視されると考えてください)