CSSの基本を知るには

455 views

CSS 言語とは…

HTML 言語で記述された要素をスクリーン(または印刷画面・他メディア)に『どのように表示するかを記述、命令するための言語』です。 一方で、表示方法を調節する以上の仕様は持ちません。
前章では HTML 言語について説明しました。 サンプルのデータをご覧になられた方は普段見ている Web サイトに比べ、味気ない白黒画面だな。と思われたはずです。 そうです、HTML 言語ができるのはコンテンツにタグ付けでマークアップし、機械にもそのコンテンツが何かを分かるよう要素にする。 それらの要素を縦に並べることだけです。 文字の色・要素のサイズ・背景・枠線・配置位置・拡大縮小 etc… それらを適用して成型されたページにする為の装飾は CSS で行います。 では、さっそくその名称と構造を見ていきましょう。

CSS の名称と構造

html の章と同様にザックリとした説明の後、実際の記述に移りますのでなんとなくのイメージを掴む程度にご覧ください。 では、早速サンプルのソースを見てみましょう。
span {
     color: red;                      → テキストの色を赤色
     background-color: yellow;        → テキストの背景色を黄色
     font-size: 24px;          → フォントのサイズを24px
     font-weight: bold         → フォントを太字
}
ファイルに記述されるソースコードは、このような見た目です。 構造とそれぞれの名称を見ていきましょう。 image-010 ※” { } “内(宣言ブロック)には、上記のように同時に複数のプロパティの記述を行うことができます。 ※ セレクター { プロパティ : (コロン) ” 値 ” ; (セミコロン) } の文法原則さえ守れば、 1 行してに記述していくこともできます。 コロン・セミコロンを必ず忘れないようにしてください。 私事ながら、結構忘れてしまい上手に動作しない…なぜ…、となることがあるので… 開発段階で有れば、改行をしながら読み取りやすい記述を行うことをお勧めします。
VScode を使用されている方は、Prettierというプラグインの導入を推奨します。 “Alt + Shift + F“で展開した状態(上記の複数行の状態)にフォーマットしてくれます。
といったところで、構造はこのようになっています。 装飾したい箇所を指定 → 装飾の種類・方法(テキスト・配置・サイズ etc…)選択 → どのように装飾する の順で記述する流れになっています。 今回の場合だと、html で<span>タグを使用した全ての span 要素内のテキストに上記の 4 つの装飾が施されますね。

余談

装飾の種類であるプロパティの種類は、かなり多いです。私がよく使う物でも30種はゆうに超えます。 そして、それぞれに既定された数種の値(キーワード)を持つものもあります。 残念ながらそれらを全て紹介することはできないので、興味のある方は専門書を購入されることをお勧めします。 ただ、構造の名称を覚えてしまえば実装したい装飾に関して、ニュアンスでネット検索することができ、 様々なWebデザイナーの方のブログ記事や解説書を見ることができます。 なので、それを可能にするための基礎知識の獲得にお力添え出来ればと思います。 それでは、次に記述ルールを見ていきましょう!

記述ルール(セレクター種類と使い分け)


セレクターの種類と使い分け

先ほどは、<span>タグに対して指定を行っていましたが、セレクターはclass属性・id属性でも指定することができます。

htmlから読み進めていただいている方は、ここで章末のid属性・class属性と繋がります。

 

image-011

 

ここで意識して欲しい考え方があります。
*Web製作・管理における”よい“ウェブサイト作りには、classセレクターを有効に活用する必要があるということです。

理由は、

  • 要素セレクターでの装飾は、場合によっては扱いづらいこと
    → 使用しているcssファイルがリンクしている全てのhtmlファイルの該当要素に予定していない装飾がされてしまう可能性がある。

  • id属性は再利用しづらいこと
    → 1つのhtmlファイル上で他の箇所にも同じ装飾を使いまわしたいが、idは1つしか使えないためできない。

と非常に使い勝手が悪いからです。

次の記事の例を見てみましょう。

 

sample_3-1
https://ezo-style.com/sample/sample-3-1.html

 

<article>
    <h1>記事のタイトル</h1>
    <div>
        <h2>サブタイトル1</h2>
        <p>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@</p>
    </div>
    <div>
        <h2>サブタイトル2</h2>
        <p>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@</p>
    </div>
    <div>
        <h2>まとめ・締め言葉</h2>  <!--  ←ここだけ色を変えたい  -->
        <p>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@</p>
    </div>
</article>

 

例として、このように”記事”ようなレイアウトを考えているとします。

記事の終わりにある「サブタイトル”まとめ・締め言葉”に見た目の緩急をつけるために色・背景色を替えよう」と思います。

 

では、まず試しにh2を純粋に指定してみましょう。

sample_3-2
https://ezo-style.com/sample/sample-3-2.html

h2 {
     color: red;          →テキストを赤色
     background-color: yellow;  →背景を黄色
}

対象にしている<h2>タグは、他でも使用されています。
よって、要素セレクターで”h2″を指定してしまうと、他のh2要素である”サブタイトル1” “サブタイトル2”も装飾されてしまいました。

 

なので、class属性を設けてclassセレクターで装飾を施します。

 

sample_3-3
https://ezo-style.com/sample/sample-3-3.html

・・・
・・・
<div>
    <h2 class="summary">まとめ・締め言葉</h2>
    <p>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@</p>
</div>

そしてcssファイルには、

.summary {
    color: red;
    backround-color: sans-serif; 
}

といった形で、”summary”というclassを設けて、それを指定した装飾を行います。
こうすることで、ピンポイントで装飾したかったh2要素を装飾することができました。
これが要素セレクターの扱いづらい点であり、classセレクターを有効利用する必要がある理由です。

 

加えて、class属性は何度も再利用できるので、
上記のarticle要素をコピーペーストして、中身のコンテンツを入れ替えるだけでレイアウトを再利用することができます。

 

sample_3-4
https://ezo-style.com/sample/sample-3-4.html

※ ソースは、ページを参照してください。

 

この時、仮にclass属性の代わりにid属性を使用したとしましょう。
id属性は、1ページに『ユニーク』な存在のため複数回利用できません
なので新たな属性とCSSファイルにその属性への記述をする必要があります。

よって、表示方法が同じものを使い回す、統一性を持たせてレイアウト保持を簡易化する面でclass属性の使用が望ましいです。

 

 

一方で、要素セレクターを使用した方がいいケースもあります。

ページ全体に対してや、大きな要素のグループに対して、ベースを整えるようなプロパティを適用すること場合は要素セレクターを使用します。

例に挙げれば、

  • ページ自体の文字の大きさは25pxにしてしまおう!
  • 背景を暗い画面にして、テキストの色は基本全て白にしてしまおう!
  • 字体を特殊な物で全てまとめてしまおう!

といった時ですね。タグごとにこれらをclassでやってしまうと一生終わりません。

 

 

ということで、異なることもありますが推奨するのは、


規模が大きい要素セレクターから記述を開始してページ全体の構成をする。

次にclassセレクターで部分的な細かな部分、とても細かい独特なものには「style属性」またはidセレクターを使用した記述を行うことを推奨します。


記述ルール(セレクターの複数指定)と色・コメントアウト


セレクターの複数指定

セレクターは種類を問わず、複数を同時に記述することができます。
例えば、h2 要素と任意の class でテキスト色を同じ色に替えたい場合、下記のように『 , (カンマ) 』で区切りながら記述します。

 

sample_3-5
https://ezo-style.com/sample/sample-3-5.html

h2, .text-red {
  color: red;
}

 

これにより、h2 要素のテキストは全て赤色になります。また、任意の要素には”text-red”の class 属性を使用することで、赤色にすることができます。
上記では2つのみですが、カンマで区切って書き続ける限り10個、20個と同時に記述するセレクターを増やせます。

 


 

『色』の値

color プロパティなどの『色』関係の値は、記述方法が複数あります。
今回は端的な説明のためにあらかじめ既定されているパラメータ値(キーワード)で配色をしていますが、実際は3パターン存在します。

  • 既定されているパラメータ値 (“red / blue / yellow etc…”といったもの)
.sample {
  color: red;
}
  • rgb 値  color: rgb (red の値 green 値 blue 値); それぞれを 0 – 255の値で指定します。
    ” 0 “が一番暗く、” 255 “が一番明るいです。なので、全て”0″だと”黒”、全て”255″だと”白”になります。
.sample-2 {
  /* 明るめの紫 */
  color: rgb(130, 50, 255);
  /* 上と同じ色で、50%の透過度 */
  color: rgba(130, 50, 255, 0.5);
}
  • 16 進数  color: #15d7e4; ”00 ~ ff” の値で指定します。
    順番は rgb 値と同様で左から2桁ずつ#rrggbbの構成です。
    “00”が一番暗く、”ff”が一番明るいです。 なので、全て “00”だと”黒” 全て”ff”だと”白” になります。
.sample-3 {
  /* 明るめの茶色 */
  color: #c17c28;
}

細かく色彩を選択する場合には、こちらを適用することになると思います。
色の選択、ソースの算出まで行ってくれるサイトも複数あるので、それらを参考に記述を行ってみてください。

 

ちなみにですが、ベースはrgb 値を使用することをおススメします。
rgba値による透過性のある配色設定を行えるからです。興味がある方は、とても簡単なので検索してみてください。

 


 

コメントアウト

コメントアウトの方法は、『 /* */ 』で挟みます。

記述方法・働きは、HTML言語のコメントアウト『<!-- --> 』と同じです。
記号が異なることに注意してください。

作業環境の準備


作業開始時のセットアップ

では、記述をを開始するための準備を説明していこうと思います。
それにあたり、CSSの記述する場所・ファイルの準備を行います。

image-003

HTML言語をご覧になられた方は、”css”というフォルダすでにを作成したと思います。
今回は、その”cssフォルダの中“に”stylesheet.css“という名前のcssファイルを作成してください。

@charset "utf-8";

作成した、stylesheet.cssをエディターで開いて、一番上にこの記述をしてください。
これだけでcssファイル自体のコーディングに向けた準備は完了です。

※ 使用する文字コードを宣言しています。

 

 

htmlファイルへ接続

cssファイルをhtmlにリンク接続しなければ何も起きないので、”stylesheet.css”を適用するためのリンクをhtmlファイルに記述します。

htmlの章から読まれた方は、sample_1-6 [https://ezo-style.com/sample/sample-2-1.html] のメタデータの設定で触れたかと思います。

 

<link rel="stylesheet" href="css/stylesheet.css">
  1. head要素内に、<link>タグで読み込みを指示します。
  2. rel属性 読み込む対象のカテゴリを規定値で記します。
    今回は、”stylesheet“に指定します。
  3. href属性 読み込むファイルへのパス(今回は相対パス)を入力してあげます。

これでcssファイルをつなげたので、cssに記述したものが反映されるように準備が整いました。

 

 

では、しっかりと反応するかの確認も含めて実際に記述を行ってみましょう。

実験的にsample_2-1に対してCSSを記述していきます。

 

HTML言語の章で使用したsample_2-1 [https://ezo-style.com/sample/sample-2-1.html] を利用して説明を進めます。
ソースをコピーペーストでそのままhtmlファイルにしてご準備下さい。

 

下記の記述をcssファイルに行ってみてください。

@charset "utf-8";
.grey-white {
    background-color: lightgrey;
    color:white;
}

sample_2-1のソースは、header要素・footer要素にclass属性をあらかじめ記述しておいたので、
上手くいけばsample_4-1のようにヘッダーとフッターが灰色地に白字で表示されると思います。

sample_4-1
https://ezo-style.com/sample/sample-4-1.html

適用されていない・表示が変わらない場合は、

  • リンクの打ち間違えやクラス名の打ち間違え
  • 不要な半角スペースによるエラー
  • ファイルの場所がずれている

などによるものなので再度確認してみてください。

 ※※ これ以降は、サンプルページごとでの説明の都合上、”stylesheet-1″ “stylesheet-2″などとリンク先のファイル名が変わっていますので、元のソースを参考にされる方は注意してください。※※

 

 

どうでしょう、正しく反映されましたでしょうか?
これで準備は終わりです。
問題なければ、次に参りましょう!

3パターンある記述場所

css 言語の記述は勿論、CSS ファイルを設けて行うのが一般的なパターンです。

ですが、他にも記述を行う方法があり、それぞれにメリット・デメリットがあります。
使い分けできると非常に便利なので見ていきましょう。

 

パターン ①   CSS ファイルに記述する(最も一般的)

先ほど(2-4 作業環境の準備)で説明したような記述場所です。

余談

スタイルシートは複数導入することも可能で、スタイルシート名には、index.html のような特別仕様のネームは存在しません。
なので、stylesheet という名前にこだわる必要はありませんので任意の名称を使用しても構いません。

ex) 作者の苗字を使用した “sasaki.css”を作成して、

<link rel="stylesheet" href="css/stylesheet.css" />
<link rel="stylesheet" href="css/sasaki.css" />
<link rel="stylesheet" href="css/hanako.css" />
<link rel="stylesheet" href="css/special.css" />

みたいな重ね掛けもできます。多少、優先度というややこしいものがありますがそれについては後ほど説明いたします。
とりあえずのところは、「後に読み込んだ物(上記で言えば”special.css”)」が優先されることをおさえおいてください。

 

 

パターン ②   STYLE”要素”の利用

html ファイルにstyle要素を設けて、その中に css の記述を行うことができます。

 

例として、一番上の sample_4-1″記事のタイトル”となっている h2 要素に装飾を施してみましょう。

下記の要素をhead 要素と body 要素の間に差し込んでみてください。

<style>
  .yellow-blue {
    background-color: yellow;
    color: blue;
  }
</style>

これはcssファイルと同意義の記述になります。
では、対象の h2 要素に class 属性を記述してあげましょう。

<article>
  <h2 class="”yellow-blue”">記事のタイトル</h2>
  <h3>サブタイトルや...</h3>
  ...
</article>

 

すると下の sample_4-2 のような表示になるはずです。

 

sample_4-2
https://ezo-style.com/sample/sample-4-2.html

 

どうでしょう、背景が黄色で青字の表示になりましたでしょうか。
このように html ソースに要素としてスタイルシートを設けて、そこに記述する方法があります。

 

 

パターン ③  ※  style”属性”の利用 ※

どの要素にもid や class を使わずに直接適用ができるstyle 属性での記述を説明します。

 

sample_4-2 の”画像”の下にある h3 要素(記事のタイトル)を例に進めていきます。

<section>
        <img src="img/sample.png" alt="写真が表示されないときに表示されるテキスト">
        <div>
            <!-- ここに『 style="background-color: yellow; color: blue;" 』と加筆-->
            <h3 style="background-color: yellow; color: blue;">記事のタイトル</h3>
            ...

sample_4-3
https://ezo-style.com/sample/sample-4-3.html

 

先ほど、style要素で指定したような表示方法に変化しましたでしょうか。
このように、セレクタ-無しで直接記述する方法もあります。

 


 

記述方法の良し悪し

 

パターン②・③は特徴として、対象のページのみに装飾をします。

style要素を使用すれば、そのページ内だけで再利用可能なセレクターを設定できます。
style属性を使用すれば、セレクター無しでピンポイントの要素に向けた装飾が可能です。

 

一方で、

効力があるのは適用ページ内だけなので、他のページにも使用したい(使い回したい) 場合には、通常のcssファイルに記述を行ってください。

 

style要素・style属性は、あくまでサイトの部分的(特定のページの特定の箇所)にだけ

必要な表示方法や装飾を施すのに特化しています。

なので、利便性と使用用途は注意をしなければなりません。

継承と「親子関係」・優先順位・後勝ち

基本的に css ファイルにひたすら記述を行っていくわけですが、ある時点で同じプロパティに対して複数の異なる値を設定してしまうことがあります。

その場合は、どのように表示されるのか疑問に思われるのではないでしょうか。
これは間違いなく記述を進めていく中で考慮しなければいけない重要なポイントです。

 

まずは、例として article 要素を対象に赤字にする装飾を施しましょう。

article {
  color: red;
}

sample_4-4
https://ezo-style.com/sample/sample-4-4.html

 

sample_4-4 のように、h3 要素の”見出し・キャッチコピー”と p 要素の文字が赤字になったかと思います。

ここに「継承」という仕組みが働いています。

 

親要素である article 要素に装飾がされたので、それの子要素らは親要素のプロパティを継承して赤色になっています。

 

継承と「親子関係」

子要素・子孫要素(子要素のさらに下階層の要素)が親のプロパティを引き継ぎ適用される仕組みです

そして、継承の対象は主に”テキスト・フォント・色”に関わるプロパティと内容を引き継ぎます。

 

なので、この親子関係に無い section 要素とその下の要素たちに変化は置きません。

では、その一方で子要素であるはずの h2 要素はなぜ先ほどの表示方法のまま継承の影響を受けていないのでしょうか。

 

これは、CSS において重複したプロパティが記述された場合に何を優先するかの「優先順位のルール」が存在する為です。

 


 

優先順位のルール

優先順位の仕組みは、セレクターに対する点数による判別の仕組みがあり、それの大小で決まるというものです。

その点数自体については詳しくは触れませんので気になる方はお調べください。

 

ということで、優先される順番は以下の通りになっています。


1. !IMPORTANT と付くプロパティ
p { color: red !important; } と記述した場合、p 要素の文字は絶対に赤色になります。
他に class や id セレクター・要素セレクターでの記述があり color プロパティが重複したとしてもこれが最優先されます。

これは、後述で説明する後勝ちのルールも無視します。
※ 書き足しや修正時に扱いづらいため、使用をあまり推奨されません。


2.STYLE 属性
style 属性で要素へ直接記述のものは、css ファイルのものより優先されます。


3.ID セレクター
4.CLASS セレクター
5.要素セレクター(別名:タイプセレクタ―)


6.全称セレクター
* (アスタリスク) ” で要素全体を対象にしたセレクター

* {
  color: blue;
}

この記述を行った場合、ページ全体の文字の色が青色になります。
が、もっとも優先順位が低いのでクラスで簡単に上書きできます。


 

この順位により、先ほどの h2 要素はclass 属性が優先され変化しませんでした。

 


class セレクターの使用が推奨されるのは、この強弱関係を把握・コントロールし、レイアウトを保持するためです。

特殊な記述を行わなければ、最も優先されるのは class になるからです。


 

※この順位には、親子関係と継承は関係ないので注意して下さい。

 

では、article 要素の class 属性を書き足して、色を元に戻してみましょう。

html には、

<article class="text-black">
  <!-- "text-black"クラスを書き足す。-->
  <h2 class="yellow-blue">記事のタイトル</h2>
  <h3>見出し・キャッチコピー</h3>
  ... ...
</article>

css には、

article {
  color: red;
}
/* この下に上書きするクラスを書き足す。 */
.text-black {
  color: black;
}

sample_4-5
https://ezo-style.com/sample/sample-4-5.html

これにより、.text-black がクラスのため優先されるので元に戻るはずです。

 


 

後勝ち

CSS における記述では、点数が同じ(同格のセレクター同志)でプロパティが重複した場合、 最も後の方(下の方に記述された新しい方)が優先 されます。

css ファイルは、上から下に読み込まれ、重複している箇所は後に読み込んだ方に上書きされるためです。

 

例えば、

.text-color-1 {
  color: red;
}
...

/* 何行かの別の記述の後 */
...
.text-color-1 {
  color: blue;
}

この場合、”text-color-1″というクラスに対して color プロパティが重複して指定されています。
この時、最も後述である”blue”の方が適用され、文字の色は赤色ではなく青色になります。

 

 

親子関係と後勝ち

親要素(class=”1st”) + 子要素(class=”2nd”)の場合、
子要素は”1st”クラスを継承しますが、同格のセレクターである”2nd”クラスが後述なので”2nd”が優先されます。

<style>
    .1st {
        color: red;
    }
    .2nd {
        color:blue;
    }
</style>

<div class="1st">
    <p>継承した1stの色である"red(赤色)"になる</p>
    <p class="2nd">1stを継承しているが、その後述で2ndに上書きされるので"blue(青色)"になる</p>
    <div class="2nd">
        <p class="1st">最も下に記述されているクラスのため、1stが継承されその上書きの2ndが継承され、
                        さらにそれが1stに上書きされます。</p>
    </div>
</div>

というように、css ファイルのみだけでなく、html ファイルにおいても後に読み込まれるクラスが優先されます。CSS”言語として”の仕様ということになりますかね。

 

なので、1つの大きな要素のグループごとにネストの深い方に行けばいくほど、ネストを組む=親要素より下に記述される
ということになり、親要素 → 子要素 → さらにその子要素となっていてもしっかりとそれぞれのクラスはそれぞれに適用されることになります。

 

少し、実験をしてみましょう。先ほどのsample4_4-5を参考に書き足していきます。

<article class="text-black">
    <h2 class="yellow-blue">記事のタイトル</h2>
    <h3 class="text-red">見出し・キャッチコピー</h3> <!--ここ"text-red"を書き足します。-->
    <p>文章文章文章文章文章文章文章...
    ...
.text-black {
    color: black;
}
/* "text-red"クラスを書き足す。 */
.text-red {
    color: red;
}

sample_4-6
https://ezo-style.com/sample/sample-4-6.html

赤字に変化したでしょうか?

 

といった具合にこの強弱関係の仕様が一番、css内で理解するのに時間がかかる面倒な部分です。

しかし、逆にいうと押さえておきたい基礎はここでおしまいです。
この先は、ほぼ間違いなく使用するプロパティについて説明していきます。

width と padding / border / margin

数にすれば何百種類とあるプロパティですが、間違いなく css を使用する人が触るものであり、
ページのレイアウトに絶対関わるプロパティについて説明をしていきたいと思います。

 

とりあえずよく使うプロパティを使用しながら、サンプルページを作成いたしましたので見てみてください。

sample_5-1
https://ezo-style.com/sample/sample-5-1.html

 

使用している全てのプロパティをここには記さないので、ソースを見てみてください。
中でも重要なもののみ、こちらで抜粋して説明していきます。

 


 

『 width 』

width プロパティは、表示領域の横幅を設定します。

body {
  width: 1000px;
}
div {
  width: 800px;
  margin: 0 100px;
}

この場合だと、一番大きい大元の body 要素が 1000px となります。
よって、ページ全体のレイアウトとして、横幅は 1000px のカラムページのような見た目になります。
また、そので div 要素が両辺に 100px の間隔を取った(左右から 100px ずつ真ん中に寄った)表示領域を持ちます。

image-012

 


 

『 padding / border / margin 』

これらは、上記のコンテンツを中心に3層の空間で設けられています。下記を見てみてください。

image-013

sample_5-2
https://ezo-style.com/sample/sample-5-2.html

実際にページを構成したサンプルになります。構成内容とソースを説明しているので、確認してみてください。

 


 

ここで押さえておきたいこと!

 

1.width の幅には、padding と border が含まれていないこと

例として、ページのベースになるカラムの幅を 1000px にしようとします。

body {
    width: 1000px; → 880pxで合計1000px?
    /* padding(marginも): (top) (right) (bottom) (left);
       padding: (top) (right&left) (bottom);
       padding: (top&bottom) (right&left);
       padding: (all); と4パターンの記述方法があります。
    */
    padding: 0px 50px; /*左右に50pxのpadding*/
    border: 10px solid black;
}

としてしまうと、1000px の幅に加えて左右に 50px の padding と 10px の border ができ、結果的な横幅が 1000+50×2+10×2=1120pxになってしまいます。
なので、きっちりと全てを含めて 1000px にするには 1000-50×2-10×2=880px と逆算して、width を 880px と設定をする必要があります。

 

っていうのは、面倒ですよね。その時に便利なプロパティに”box-sizing“というものがあります。

box-sizing プロパティ

box-sizing: content-box; /*こっちはデフォルトの仕様です。上記の算出状態ですね。*/
box-sizing: border-box; /*これを設定すると、『borderまでをwidthの範囲に含む』算出をしてくれます。*/

body {
    box-sizing: border-box;
    width: 1000px; → 880pxに調整する必要がない。
    padding: 0px 50px; /*左右に50pxのpadding*/
    border: 10px solid black;
}

このように算出方法を切り替えてあげることで、width の設定に対して padding と border の幅を内包的に計算してくれます。

 


 

2.margin は、あくまで『要素間の”余白”』であること

margin は要素の外側に設ける他の要素との空間の設定です。

 

例えば、下記のような同格の兄弟要素同士が存在したとします。

<section>
  <!-- 上に40pxのmargin -->
  <div class="margin-60">
    <p>文章文章文章</p>
  </div>
  <!-- 下に40pxのmargin -->
  <!-- 上に60pxのmargin --> <!--合計100pxの隙間が空くのか?-->
  <div class="margin-40">
    <p>文章文章文章</p>
  </div>
  <!-- 下に60pxのmargin -->
</section>

そしてクラスは、

margin-60 {
  margin: 60px 0px;
}
margin-40 {
  margin: 40px 0px;
}

上記の場合、2 つの div 要素は縦に並びます。

そして、その上下にそれぞれ 60px ずつと 40px ずつで margin を設定しています。
ここで気になるのは、要素の間の合計で 100px の margin が div 要素間にできるかです。
実際は 60px しか余白はできません。

margin が重なる場合、数値の大きい方のみ適用され、同じ場合には片方のみ適用されます。

リセットCSS

少々話が脱線しますが先ほどのページで説明した、特にpadding / marginプロパティはタグにあらかじめ初期値が設定されています。

これは、使用しているブラウザーに組み込まれています。

 

例えば、sample_2-2などに戻ってもらうと分かりますが、これらに対してCSSを記述していないのにも関わらず、要素間と左側の余白が一定に保たれています。これには、ブラウザの初期値が使用されています。

ということは、そのままタグを素で使用すると、ブラウザごとに大きくも見栄えが異なったり少なからずの誤差が出る可能性があるということです。

 

そこで、 『リセットCSS』 といわれるものが存在します。

何をするかというと、コーディング前にブラウザごとの誤差を限りなく減らしてくれるように設計されたスタイルシート(通称:リセットCSS)を導入します。

こちらのサイトhttps://webdesign-trends.net/entry/8137から人気な無料のソースをダウンロードできるので、cssファイルに保存してhead要素にリンクを書き足します。

<link rel="stylesheet" href="reset.css">
<link rel="stylesheet" href="stylesheet.css">
<link rel="sytlesheet" href="next.css">

注意点として、このlinkタグにも勿論、優先順位・『後勝ち』が優先されます。

なので、イメージとしてはリセットCSSで一度まっさらにして、上書きするような形でコーディングしていく流れになります。
こうすることでブラウザ間でも差異の少ないレイアウトを製作することができます。

順番を逆にすると、せっかく作成したファイルにリセットが上書きされて、真っ新になってしまいます。

ブラウザーの違いに影響されず、どれでも見え方が統一されたレイアウトを組むのは重要です。
それほど導入も難しくないので、使用することをお勧めいたします。

レスポンシブ WEB デザインとメディアクエリ

ユーザーが利用しているデバイスの px 数(画面サイズ)を「ビューポート(Viewport)」 と呼びます。

スマホ・タブレット・パソコンなど、異なるビューポートに合わせて表示の方法が変わり、
それぞれのデバイスに見えやすいになっているデザインを レスポンシブ Web デザインと呼びます。

これに対応していないページを例に挙げるとすれば、width:1000px でしかページの幅を設定していないものなどです。
この場合、1000px 以下のビューポートのデバイスでは見切れますし、拡大縮小の手間、縮小したらテキストが極端に小さく読めないなどとなります。

 

ということで、レスポンシブな WEB デザインを作成するために使用する CSS の機能が『メディアクエリ』と呼ばれるものです。

 


 

メディアクエリ

メディアクエリの概要は、「条件を指定して、その条件に当てはまるときに別途設定した装飾を反映する」というものです。

例えば、スマホだと 576px 以下での表示方法という宣言をメディアクエリで行い、その装飾を別途記述しようします。

@media (max-width: 576px) {
}

元の条件設定はこうです。これに書き足しを行っていきます。

.text_red-to-blue {
  color: red;
}
.width-500-to-800 {
  width: 500ox;
}
@media (max-width: 576px) {
  .text_red-to-blue {
    color: blue;
  }
  .width-500-to-800 {
    width: 800;
  }
}

メディアクエリ内にその条件を満たしたときの装飾を1段ネストしてひたすら記述していく形になります。

上記の text_red-to-blue クラスであれば、付与された箇所は 576px 以上の時はテキストが赤色で、
576px 以下という条件を満たしたとき(画面が小さいとき)、テキストが青色になります。

このような表示の条件とその場合の装飾を設ける仕組みが、メディアクエリです。

そして主にレスポンシブのために使用するメディアクエリは2種類です。

 

下記を css ソースに差し込みます。あとは、” { } “の内側に施す装飾の記述を通常通りに行います。

@media (max-width:576px) { /*576px以下の時*/
    任意の装飾
    ...
}
/* 「max-width」の場合は、そのpx数まで≒「以下」のときに適用 */

@media (min-width:576px) { /*576px以上の時*/
    任意の装飾
    ...
}
/* 「min-width」の場合は、そのpx数まで≒「以上」のときに適用 */

となっています。どちらも用途は同じなので、”以上・以下“のイメージが着きやすく使いやすく、記述の流れで組み込みやすい方を利用してみてください。

 

実際にどれくらい変わるのか、どのように変わるのか見てみましょう。sample_5-1に下記の条件を加えてみました。

@media (max-width:576px) {
    body {
        width: 450px;
    }
    .wrapper {
        margin: 2rem auto 0;
    }
    .block-under576 {
        display: block;
    }
    .none-under576 {
        display: none;
    }
}

sample_5-3
https://ezo-style.com/sample/sample-5-3.html

リンクのsample_5-3を開いて、ウィンドウ幅を縮めてみてください。
ある横幅(576px)を境にそれ以下のビューポートになると、すべてが縦配置になると思います
このようにしてデバイスごとに表示方法を変えて見やすくなっているものをレスポンシブWebデザインといいます。

 



 

これにて、CSSについての説明を終了します。
本書では勝手な都合上、網羅していないのですが『displayプロパティ』という強力なものもあるので、
手の込んだものを将来的に製作したい方は、参考書を購入されることをお勧めします。

しかしながら、構造と検索方法を理解すれば、プロパティは見つかりますし、提供されているソースを応用することはそれほど難しくないです。
その足掛かりに本書がお力添えできればと思います。

Share this Article

CSSの基本を知るには

Or copy link

CONTENTS