CSS

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

メインページ > 工学 > 情報技術 > プログラミング > CSS

目次[編集]

進捗状況の凡例

00%.svg 数行の文章か目次があります。
25%.svg:本文が少しあります。
50%.svg:本文が半分ほどあります。
75%.svg: 間もなく完成します。
100 percent.svg: 一応完成しています。

大学の教科書
自然科学: 数学 - 物理学; 古典力学 量子力学 - 化学; 無機化学 有機化学 - 生物学; 植物学 研究技術 - 地球科学 - 医学; 解剖学
語学: 日本語 英語 エスペラント 朝鮮語 デンマーク語 ドイツ語 フランス語 ラテン語 ルーマニア語
人文科学: 歴史学; 日本史 中国史 世界史 歴史観 - 心理学 - 哲学 - 芸術; 音楽 美術 - 文学; 古典文学 漢詩
社会科学: 法学 - 経済学 - 地理学 - 教育学; 学校教育 教育史
情報技術: 情報工学; MS-DOS/PC DOS UNIX/Linux TeX/LaTeX CGI - プログラミング; BASIC C言語 C++ D言語 HTML Java JavaScript Lisp Mizar Perl PHP Python Ruby Scheme SVG
小・中・高校の教科書
小学: 国語 算数 理科 社会 英語
中学: 国語 社会 数学 理科 英語
高校: 国語 - 地歴 - 公民 - 数学; 公式集 - 理科; 物理 化学 地学 生物 - 外国語 - 情報
解説書・実用書・参考書
趣味: 料理本 - スポーツ - ゲーム
試験: 資格試験 - 入学試験
その他の本: 防災 - 生活と進路 - ウィキペディアの書き方 - ジョーク集

はじめに[編集]

Wikipedia
ウィキペディアCascading Style Sheetsの記事があります。

CSS (Cascading Style Sheets) はHTML文書やXML文書に対して、文書のレイアウトや文字色などの多様なスタイルを指定するために生み出されました。

従来、HTMLのみでも文書に対して文字色の変更や背景画像を添えるなどの限定的な装飾指定は可能でしたが、HTML文書のみで完結した装飾指定は文書構造を複雑にし、また作成者によっては装飾目的で文書に誤った意味を付加することもあり、閲覧者にとってはアクセス容易性を、作成者にとってはメンテナンス性を低下させる原因となりました。

CSSを利用することによって構造と装飾を分離することが出来るため、HTML文書やXML文書の文書構造をシンプルに保つことができ、また従来のHTML文書のみで完結した装飾指定と比べても格段に豊富な装飾が可能になります。

各ブラウザによる解釈の違い[編集]

現在広く利用されているウェブブラウザMicrosoft Internet Explorer (IE) やMozilla Firefox (Firefox) 、Google Chrome、Safari(macOSのwebブラウザ)などが存在しますが、それらwebブラウザは、場合によってはまだ国際規格化されていない独自のCSS拡張や草案段階の機能を先行実装している場合があります。

例えばIEでは過去、独自にフィルタ効果を実現する機能をサポートしていました。1つのウェブブラウザで可能なスタイル指定は他のウェブブラウザでも必ず可能ということはありません。また、Firefox は過去にCSS3が草案だった時代に、IEなどに先行してCSS3を先行実装していました。

さらに国際規格化されている機能でもブラウザごとに解釈に揺れがあったり、間違った解釈がされていたり、そもそもサポートされていないといったものもあります。このため、複雑なスタイル指定をしようとすると、ひとつのブラウザで良く見えていたものが他のブラウザでは閲覧出来ないほど酷い状態になっている場合もありえます。

各ブラウザの独自拡張や先行実装の多くは実験的か、ウェブブラウザでユーザースタイルシートを適用するユーザーのためにある場合が多いため、仕事などで使うwebページを作成刷る場合などには、独自拡張や先行実装を極力使用しないように注意する必要もあります。なるべく多くのウェブブラウザで閲覧しやすいCSSの作成が求められます。


CSS以外のレイアウト[編集]

CSS3はレイアウトを記述するためのものです。ですが現実のインターネットには、HTMLのテーブル要素を用いてレイアウトを作成したりする場合もあるなど、CSSによらないレイアウトもまだネットの各所で実在しています。

また、文字色や文字フォントサイズなどは、HCSSによらずにHTMLタグ側で直接、色やサイズを指定する方法も、ブラウザ側で実装されています。

HTML4時代にはこのような色やサイズのHTMLタグによる指定の機能がHTMLの仕様でありました。しかしHTML5では、従来の文字色やフォントサイズをHTMLタグ側で記述する手法は国際規格としては非推奨になりました。しかし推奨されてないだけであり、禁止はされていないしW3Cにそんな禁止の権限も無いので、主要な各ブラウザはそれぞれの判断のもと、現状(2020年に本文を記述)ではHTMLで文字の色やサイズなどの指定をする方法をサポートしています。


※ 未分類[編集]

※ どこのサブページに入れたらいいか不明な内容を、ここに記述する。
ある程度、記述が確立したら、サブページ化してください。


たとえばCSSを使って、ページを左右2段組にしたい場合、下記コードのようにすればいい。

典型的な例である。

コード例
<!DOCTYPE html>
<html lang="ja">
<head>
    <title>CSSによるページ左右分割のコード例</title>

    <style type="text/css">

        .left {
            width: 60%;
            float: left;
            background-color: #ccccff
         }

        .right {
            width: 30%;
            float: right;
            background-color: #ffaaaa;
        }

        .kaigyo1 {
            word-break: break-all;
            overflow-wrap: anywhere;
        }

        .kaigyo2 {
            word-break: break-all;
            overflow-wrap: anywhere;
        }
    </style>
</head>

<body>

    <div class="left">
        <div class="kaigyo1">
            aaa aaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
        </div>
    </div>
    <div class="right">
        <div class="kaigyo2">
            bbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbbbbb bbbbbbbbbbbb
        </div>
    </div>

</body>
</html>


解説

floatの指定がないと、片方のブロックの下の行から、もう片方のブロックの描画を開始してしまう。なので、もし floatが無いと、左右のブロックが斜め気味に配置されてしまい、目的の配置にならない。

とにかく、左右に段組をしたい配置の場合、まず float を検討するのが良いだろう(なお、他にも方法はある)。

CSS 指定の中の word-break: break-all; overflow-wrap: anywhere; は、改行を指定するのに、実用上は、普通は必要になる。

コレが無いと、長い文章などが突き出てしまう。(特に日本語の場合、突き出やすい。)

なお、 word-break: break-all; overflow-wrap: anywhere; も効果はほぼ同じだが、ブラウザ種類ごとの互換性のため、上記コードでは両方とも記載してある。

width 幅とは横幅のこと。なお 縦幅なら height (ハイト)である。


width や height を指定する際、この場合は % (パーセント)単位でも指定が出来る。(CSS や html で入り組んだ複雑なレイアウトをしたりすると、場合によっては % 指定を受け付けないブラウザもあるが、しかしこのコード例の程度のレイアウトなら、どのブラウザでも(2020年5月4日に Firefox75 および Google Chrome84 で確認)、%表示できる。)

他にもピクセル単位(px)でwidthなどの幅を指定する方法もある。

余談だが、一般にCSSのコードは head タグの中に入れるのが普通である(入れなくても動作する)。


なお、この左右2段組のレイアウトのことを「2カラム」と言います。「カラム」とは柱のことです。

いっぽう、もし 左・中央・右 で3段構成になっていれば「3カラム」と言います。

通常のなんの左右分割もしてない状態なら、「シングルカラム」と言います。


あなたが今読んでいる「なお、この左右2段組のレイアウトのことを「2カラム」と言います。」という文章から「通常のなんの左右分割もしてない状態なら、「シングルカラム」と言います。」の文章までは、パソコン画面では、シングルカラムで表示されているだろうと思います。


CSS関数[編集]

マイナーな機能だが、CSS では実は数値計算が可能である。

ただし calc()関数を呼び出すなどして、そのカッコ内で数値計算をする必要がある。

calc()関数では、加減乗除をできる。

CSSのプロパティ指定の中で

width: calc(20% + 40%);

のように、calcの中で指定する。(なお、上記の場合、60%になる)

CSS関数による数値計算の際、演算子 + や - の前後には半角スペースの空白を入れる必要がある。(そうしないと、ブラウザが演算子として認識せず、エラーになる。)


コード例
<!DOCTYPE html>
<html lang="ja">
<head>
    <title>CSS関数のテスト</title>

    <style type="text/css">

        .left {
            width: calc(20% + 40%);
            float: left;
            background-color: #ccccff
         }

        .kaigyo1 {
            word-break: break-all;
            overflow-wrap: anywhere;
        }

    </style>
</head>

<body>

    <div class="left">
        <div class="kaigyo1">
            5555555555555555555555555555555555555555555555555555555555555555555555555555555
            5555555555555555555555555555555555555555555555555555555555555555
        </div>
    </div>

</body>
</html>
結果
ページの左端から、60%の幅までに「5555・・・」の記述が続く。


その他のCSS関数

CSS関数はいくつもあるが、比較的によく紹介されるものとして、

回数などをカウントできる counter()
minmax
attr()
色において透過度を含めた色指定 rgba()
変数を参照できる var()

などがある。

counter()については、別の節でCSSカウンターと一緒に説明する。


なお、CSS関数の知名度はマイナーであり、一般の書籍では、CSS関数を紹介していない書籍も多い。

そもそも、本来、関数などの動的処理の構築は JavaScript の担当なので、あまりCSS関数で複雑な機能の実装を行うのは好ましくないだろう。


また、マイナーな機能は、将来的に仕様変更などもされやすく、もしかしたら機能が削減などをする可能性も高い。


こういった事情があるので、CSS関数を使うなら、なるべく最低限だけ、レイアウトや簡単な画像の表示といった映像的なことがらに関係ありそうな処理にだけ、CSS関数を使うべきだろう。

画像とあまり関係なさそうな処理や、複雑な処理は JavaScript 側で行うべきだろう。


無い機能

いわゆる if文(条件分岐) や while文(繰り返し) などといった制御構造の機能は、CSSには無い。

そういった制御構造のプログラミングをしたいなら、JavaScirptを使うべきである。(webページでの動的な制御は、JavaScriptの担当である。CSSは静的なレイアウト管理の担当である。制御構造は、CSSとは管轄が違う。)


CSS変数[編集]

2015年ごろから主要なブラウザに追加されてきた新機能で、CSS変数というのがある。正確には「カスタム プロパティ」という。

2015年以降の普通のwebブラウザでも、ほぼそのまま使える(バージョンによる若干の違いの可能性はあり)。特殊なアドオンなどのインストールは不要である。


書式
        :root {
            --変数名: 値 ;
        }

といった書式で、グローバル変数を定義できる。

CSS変数により、プロパティの値を変数として定義できる。(一方、プロパティ名自体は、CSS変数では定義できない。)


コロン「:」をrootの前につけることを忘れないように。

また、変数名の前には--をつける。ハイフン2個である。

CSS変数を呼び出すには、CSS関数のvar()を使って、

var(--変数名)

の書式で呼び出せる。


コード例
<!DOCTYPE html>
<html lang="ja">
<head>
    <title>CSS変数のサンプル</title>

    <style type="text/css">

        :root {
            --hensuu: 20%;
        }

        .left {
            width: var(--hensuu);
            float: left;
            background-color: #ccccff
         }

        .kaigyo1 {
            word-break: break-all;
            overflow-wrap: anywhere;
        }

    </style>
</head>

<body>

    <div class="left">
        <div class="kaigyo1">
            fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
            ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
        </div>
    </div>

</body>
</html>


結果
左端から幅 20% まで「ffff・・・」(以下略)を表示。


  • 経緯

正式名称がカスタムプロパティなのに、なぜ『CSS変数』(英語でも"CSS Variables" という)のように『変数』と呼ばれるかというと、これには歴史的な経緯があり、もともと国債規格団体のW3Cでは仕様名が"CSS Variables (『CSS変数』)として提唱されており[1].、

2012年当時の規格では

(※ 廃止された古い仕様)
       :root {
           var-変数名: 値 ;
       }

のように変数(Variable)として宣言する場合には接頭辞に var- をつけないといけなかったという経緯があったのである。

ブラウザの実装でも、早い段階でCSS変数のサポートを導入した過去のFeirefox29 (時期は2013年の後半ごろ)でも、同様の旧仕様でサポートしていた。


その後、他社のブラウザでも同様の機能が導入されることになり、その際にW3C側での仕様の更新で、現在のカスタムプロパティの仕様に変更されたという経緯があり、その際に名称も変更した。

よってカスタムプロパティの実態は、変数である。 CSSの プロパティ値 を 変数を使って カスタムする という機能である。

CSSカウンター[編集]

基本[編集]

CSSで、呼び出し回数をカウントをする機能がある。

節のタイトルに連番などをつけたい場合に、用いることができる。

書式は

CSS側
body {
  counter-reset: 変数名;  // カウンター変数をリセット
}

連番させたいタグ::before {
  counter-increment: 変数名;    // 変数名のあとに数字を指定すると、増分の間隔を指定できる。何も数値指定しない場合は1ずつ増分
  content: counter(変数名);     // カウントする変数とその書式
}

である。

プロパティの値に、CSS関数の couter() を用いる。


コード例
<!DOCTYPE html>
<html lang="ja">
<head>
    <title>CSSカウンターのテスト</title>

    <style type="text/css">

        body {
          counter-reset: i;
        }

        h3::before {
          counter-increment: i;
          content: counter(i);
        }
        
    </style>
</head>

<body>

    <h3>はじめに</h3>
    <h3>文字表示のしかた</h3>
    <h3>算術演算</h3>

</body>
</html>


実行結果
1はじめに
2文字表示のしかた
3算術演算


書式のとおりだと、番号「1」と「はじめに」のあいだに隙間が無く、やや読みづらい。

番後の前後に文字をつけたす[編集]

そこで、 contentプロパティのところを

content: "第" counter(i) "章  ";

のようにすると、番号の前後に文字を入れることができる。空白を追加したいなら、単に引用符の内部に空白スペースをいれればいい。

<!DOCTYPE html>
<html lang="ja">
<head>
    <title>CSSカウンターのテスト</title>

    <style type="text/css">
    
        body {
          counter-reset: i;
        }

        h3::before {
          counter-increment: i;
          content: "第" counter(i) "章  "; 
        }
        
    </style>
</head>

<body>

    <h3>はじめに</h3>
    <h3>文字表示のしかた</h3>
    <h3>算術演算</h3>

</body>
</html>
実行結果
第1章 はじめに
第2章 文字表示のしかた
第3章 算術演算

増分の間隔を変更[編集]

プロパティ

counter-increment: i 2;

というように counter-increment プロパティの変数(i)のあとに数値指定すると、2→4→6 というふうに数える。つまり

第2章 はじめに
第4章 文字表示のしかた
第8章 算術演算

と表示が変わる。


つまり、

counter-increment: i;

と変数のあとに何も数値を書かない場合は、

counter-increment: i 1;

と同じ結果になる。


なお上述のiの直後の増分間隔の数値には、0 や -1 など指定できる。(Fedora32 環境での Firefox75で動作確認ずみ。)

カウントの初期値を変更[編集]

CSSの body のほうで、

counter-reset: i 10;

のように変数のあとに数値を書くことで0以外の数値から数えることができる。

何も指定しない場合、CSSでは0番から数えている。いくつか前の節で「第1章 はじめに」のように表示されるのは、最初の1回目のカウントのときに、+1したからである。


counter-increment: i -1;

のようにマイナスの数を増分間隔(インクリメント値)に指定すれば、9→8→7というふうにカウントダウン方式で数えることもできる。

コード例
<!DOCTYPE html>
<html lang="ja">
<head>
    <title>CSSカウンターのテスト</title>

    <style type="text/css">

        body {
          counter-reset: i 10;
        }

        h3::before {
          counter-increment: i -1;
          content: "のこり" counter(i) "秒  "; 
        }
    </style>
</head>

<body>

    <h3></h3>
    <h3></h3>
    <h3></h3>

</body>
</html>


表示結果
のこり 9秒
のこり 8秒
のこり 7秒


このように、最初のカウントの際、すでに増減された状態で表示されている。(なので「のこり 10秒」でなく「のこり 9秒」から表示している。)


なお、説明の簡単化のため、秒数カウントダウンのような文字表示をしたが、ブラウザで表示を放置していても、べつにカウントダウンが進行したりはしないので、誤解のないように。



このページ「CSS」は、まだ書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にトークページへどうぞ。
  1. ^ "CSS Variables Module Level 1" 2020年5月15日に確認.