sit in a circle and chat happily

CSS 7日目

投稿日:2021-11-01
更新日:2022-03-24
HTML・CSS

第16章・続:セレクタの種類

疑似クラス:特定の状態や位置を付加

最初の要素

最初の要素を意味する疑似クラス

セレクタ:first-child {
  プロパティ名: 値;
}

★「セレクタ」と「:」は空白を空けずに記述する

HTML
<ul class="group1">
  <li>1番目の項番</li>
  <li>2番目の項番</li>
  <li>3番目の項番</li>
  <li>4番目の項番</li>
</ul>
.group1 li:first-child {
  color: #f00;
}
.group1 li:first-child {
  border-top: solid 1px #333;
  color: #f00;
}
.group1 li:first-child {
  border-top: solid 1px #333;
  color: #f00;
}

■リストの上下全行に線を入れる場合

.group1 li {
  border-bottom: solid 1px #333;
}


.group1 li:first-child {
  border-top: solid 1px #333;
}

最後の要素

セレクタ:last-child {
  プロパティ名: 値;
}
.group1 li:last-child {
  color: #f00;
}
HTML
<ul class="group1">
  <li>1番目の項番</li>
  <li>2番目の項番</li>
  <li>3番目の項番</li>
  <li>4番目の項番</li>
</ul>

〇番目の要素

■〇番目の要素を意味する疑似クラス

セレクタ:nth-child(数値) {
  プロパティ名: 値;
}
HTML
<ul class="group1">
  <li>1番目の項番</li>
  <li>2番目の項番</li>
  <li>3番目の項番</li>
  <li>4番目の項番</li>
  <li>5番目の項番</li>
  <li>6番目の項番</li>
</ul>

半角スペースで区切ると「子孫セレクタ」(group1 li)

.group2 li:nth-child(3) {
  color: #f00;
}

■倍数の要素を意味する疑似クラス

セレクタ:nth-child(数値n) {
  プロパティ名: 値;
}
HTML
<ul class="group1">
  <li>1番目の項番</li>
  <li>2番目の項番</li>
  <li>3番目の項番</li>
  <li>4番目の項番</li>
  <li>5番目の項番</li>
  <li>6番目の項番</li>
</ul>
.group2 li:nth-child(3n) {
  color: #f00;
}

【応用】〇番目の項目

.group4 li:nth-child(3n-1) {
  background-color: #ccc;
}
3の倍数の1つ下の行に背景色

奇数要素を意味する疑似クラス

セレクタ :nth-child(odd) {
  プロパティ名: 値;
}
HTML
<ul class="group1">
  <li>1番目の項番</li>
  <li>2番目の項番</li>
  <li>3番目の項番</li>
  <li>4番目の項番</li>
  <li>5番目の項番</li>
  <li>6番目の項番</li>
</ul>

偶数要素を意味する疑似クラス

セレクタ :nth-child(even){
  プロパティ名: 値;
}

奇数に文字色

.group2 li:nth-child(odd) {
  color: #f00;
}

※「odd」「even」行ごとに背景色を変えて見やすくするときによく使われる

.group3 li:nth-child(even) {
  background-color: #ccc;
}
偶数に背景色
.group5 p:last-child {
  margin-bottom: 0;
}
group5内のpの最後だけに下外余白なし

※前回授業の「*」「>」の応用

「group5」の「すべての要素」の内「子要素のみ」で「最初の要素」に定義する
 (孫要素には反映させない)

.group5 > *:first-child {
  margin-top: 0;
}

疑似クラス:リンクのスタイルを定義

リンクのスタイルを定義

■リンクの基本スタイル

a{
プロパティ名: 値;
}

■リンクの上にマウスカーソルが乗った時(ホバー時)のスタイルを定義
 ※「:hover」はa要素以外にも使用できる

a:hover{
プロパティ名: 値;
}

★必ず基本デザインの「a要素セレクタ」より下に記述する

★link → visited → hover → active の順で書く
   (ただし「hover」以外はあまり使わない)

元の状態

↑ リンクの基本スタイルを定義する

今回は「明るい青」「下線なし」

a {
  color: #2196f3;
  text-decoration: none;
}
「明るい青」「下線なし」

ホバー時「下線あり」にする

a {
  color: #2196f3;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}
カーソルを合わせると「下線あり」

表示方法を定義する:display

リンクのスタイルではインライン要素であるa要素に幅と高さを設定するために使用する

display: 表示方法の値 ;
代表的な値解説・記述例
none非表示
blockブロックレベル表示
・改行される
・幅/高さを指定できる
inlineインライン表示
・改行されず横並び
・幅/高さを指定できない
inline-block置換インライン表示
・改行されず横並び
・幅/高さを指定できる
flex【flex表示】flexコンテナを生成
grid【grid表示】gridコンテナを生成
display

透明度を定義:opacity

この値は子孫要素に継承されないが、不透明度の効果は子孫要素に及ぶ

opacity: 不透明度の値 ;
初期値解説・記述例
10(透明)~1(不透明)までの数値
opacity

変化の時間を定義:transition

疑似クラス「:hover」や「:active」等によってスタイルに変化が起きるときの時間を定義する(どのくらいの時間をかけて変化させるか)

transition: 対象プロパティ 時間 変化の種類 遅延 ;
transition: 対象プロパティ 時間 ;
初期値解説・記述例
対象プロパティall変化を適用するプロパティを指定する
all:すべてのプロパティで変化あり
none:すべてのプロパティで変化なし
CSSプロパティ名:指定したプロパティだけ変化あり
    例)color
時間0変化の時間を秒「s」ミリ秒「ms」で指定する
    例)3s
変化の種類easeキーワードから変化の種類を指定する
ease:開始時と終了時ゆっくり
linear:開始時から終了時まで一定
ease-in:開始時ゆっくり、終了時早く
ease-out:開始時早く、終了時ゆっくり
ease-in-out:開始時と終了時かなりゆっくり
遅延0変化が始まるまでの時間を秒「s」ミリ秒「ms」で指定する
    例)3s
transition

★「-(ハイフン)」始まりのclass名は、基本デザインにバリエーションをつける際に使用する
バリエーションを「モディファイア」と呼ぶことが多い

  <div class="group2">
    <a class="btn -type1" href="menu1.html">ボタン</a>
    <a class="btn -type2" href="menu1.html">ボタン</a>
    <a class="btn -type3" href="menu1.html">ボタン</a>
    <a class="btn -type4" href="menu1.html">ボタン</a>
  </div>

リンクでボタンを作成

★ボタンのデザインは必ず「a要素」に対して行う!!

例)150pxの幅を持つボタンを作りたい

.btn {
  width: 150px;
}
変化がない・・・

インライン要素には「幅」「高さ」を指定できないので
displayプロパティに以下(のどちらか)を設定する

「display: inline-block;」:横並び
「display: block;」:改行して横並び

.btn {
  display:  inline-block;
  width: 150px;
}
「display: inline-block;」を指定することで、幅を持たせられた
/* リンクをボタン化 */
/* 基本デザイン */
.btn {
  display:  inline-block;
  width: 150px;
  background-color: #2196f3;
  color: #fff;
  text-align: center;
  padding: .5em 2em;
  border-radius: 10px;
  margin: .3em;
}
折り返しても重ならないように余白等も設定して
ボタンぽい基本デザインが完成

さらにホバー時の設定「opacity」でちょっと透明になるようにする

.btn:hover {
  opacity: .7;
}

デザインにバリエーションをつくる

変更のなさそうな要素を残して基本デザインを作る

/* リンクをボタン化 */
/* 基本デザイン */
.btn {
  display:  inline-block;
  text-align: center;
  padding: .5em 2em;
}

.btn:hover {
  text-decoration: none;
}

★セレクタは「ボタンかつタイプ1」を意味する「.btn.-type1」を記述
 「.btn」「.-type1」の間には空白を入れない
※セレクタの間に「半角スペース」が入ると子孫セレクタになってしまう

/* バリエーション */
/*
背景色:青
文字色:白
枠線(破線)
角丸
枠線の外に余白が欲しい⇒影をぼかさずにつける
*/
.btn.-type2 {
  background-color: #2196f3;
  color: #fff;
  border: dashed 1px #fff;
  border-radius: 10px;
  box-shadow: 0 0 0 5px #2196f3;
  margin: .5em;
}

box-shadowを有効活用する

/*
背景色:白
文字色:黒
枠線:しっかりめ
影:黒
角丸
ホバー時背景色をゆっくり変化
*/
.btn.-type3 {
  background-color: #fff;
  color: black;
  border: solid 3px black;
  box-shadow: 3px 3px black;
  border-radius: 10px;
  margin: .5em;
  transition: background-color 1s,color 1s;
}

.btn.-type3:hover {
  background-color: greenyellow;
}

「transition」複数定義する場合は「,(カンマ区切り)」で設定できる
 ※今回は「背景色」と「文字色」を設定

縦方向の中央揃え

◆1行限定で高さが決まっている場合
 heightとline-heightに同じ数値を指定する

◆複数行で高さが決まっている場合
 display: flex;
align-items: center;

◆高さを決めずに上下余白同じ値を指定する

ボタン作成:おさらい

練習問題
<body>
  <div class="test">
    <a href="#" class="btn">PUSH!</a>
  </div>
.test {
  margin: 20px;
}

.btn {
 /*縦の中央揃え その1*/
  display: flex;
  justify-content: center;
  align-items: center;

  /* 縦の中央揃え その2
 display: inline-block;
  text-align: center;
  line-height: 45px; */

  width: 135px;
  height: 45px;
  background-color: #fff;
  color: #000;
  font-size: 1.6rem;
  font-weight: 700;
  text-decoration: none;
  cursor: pointer;
  border: solid 2px #000;
  transition: background-color .3s,color .3s;
}

.btn:hover {
  background-color: #000;
  color: #fff;
}
カテゴリー