12 背景と文字のグラデーション

[戻る]

CSSでは、グラデーションを行えることをすでに説明しましたが、複数のグラデーション設定を重ねることで、複雑なグラデーションも実現できます。

今回は、ページの背景や、文字に対してグラデーションを行ってみたいと思います。

作成例のような rensyu12.html を作成してください。

作成例

背景と文字にグラデーション効果が施され、レイアウトや文字なども調整されています。

作成手順

  1. ベースとなるHTMLとCSSファイルを用意します。
    ここからサンプルファイルをダウンロードし、圧縮フォルダの中身を rensyu フォルダ内に保存してください。
    「右クリック」→「対象をファイルに保存」などでダウンロードできます。

    rensyu12.zip← ここからダウンロード

    圧縮フォルダの中身を取り出すと、rensyu12.htmlrensyu12.css が入手できます。
  2. とりあえず、rensyu12.html をブラウザで開いてページの内容を確認すると、以下のような状態になっています。
    サンプルとして文章と、簡単なCSSが最初から設定されている状態になっています。
  3. CSSファイル rensyu12.css をテキストエディタで開きます。
    CSSは最初、以下のようになっているので、ファイルの末尾に設定を追記していきます。
    @charset "utf-8"; /* 初期設定 */ * { box-sizing:border-box; transition: 0.3s; } html { background-size:cover; } h1,h2 { margin:0; margin-bottom:20px; font-family: Verdana, 'BIZ UDPゴシック', Meiryo, メイリオ, sans-serif; } h1 { font-size: 2em; } h2 { font-size: 1.2em; } .section { margin:1em 0 1em 2em; } /* リンク色 */ a:link { color: #0044ff; background: transparent; text-decoration: none; transition: 0.4s; } a:visited { color: #0099ff; background: transparent; text-decoration: none; } a:hover { color: #0044ff; background: #cceeff; text-decoration: underline; } /* ↓↓↓ ここから下に追記します ↓↓↓ */
  4. 背景にグラデーションを追加します。
    今回は、html要素に対して背景を設定するので、以下のようにCSS設定を行います。
    /* ↓↓↓ ここから下に追記します ↓↓↓ */ html{ background: radial-gradient(circle at left top, #ffff0088 , transparent 50% ); background-size: cover; background-attachment:fixed; }

    ここでは、背景に円形のグラデーション radial-gradient() を配置しています。
    グラデーションの中心は画面の左上 left top とし、半透明の黄色 #ffff0088 から透明 transparent へのグラデーションとしています。
    また、背景が画面全体をカバーするように設定 background-size: cover; し、画面がスクロールしても背景が移動しないように固定 background-attachment:fixed; しています。

    黄色のカラーコード #ffff0088 が、通常の6桁ではなく8桁になっていますが、これは最後の2桁が透明度を表している、特殊な書き方となっています。


    左上に、円形に広がる黄色いグラデーションが配置されました。

  5. さらにグラデーションを重ねます。複数のグラデーションを重ねるには、radial-gradient() をカンマ(,)区切りで複数記述します。
    CSSの構造は以下のようなものになるでしょう。

    複数のグラデーションの書き方
    background: radial-gradient(~), radial-gradient(~), ... radial-gradient( ~ );

    長いので改行すると以下のようになります。

    background: radial-gradient( ~ ), radial-gradient( ~ ), : : radial-gradient( ~ );

    カンマ(,)と、最後のセミコロン(;)の位置関係に注意です。

    具体的には、以下のように設定します。

    html{ background: radial-gradient(circle at left top, #ffff0088 , transparent 50% ), radial-gradient(circle at left bottom, #ff000088 , transparent 50% ), radial-gradient(circle at right bottom, #aa00ff88 , transparent 40% ), radial-gradient(circle at right top, #88ff0088 , transparent 50% ); background-size: cover; background-attachment:fixed; }

    すでに記入した radial-gradient() の後ろに3つの新しい radial-gradient() が、カンマ区切りで追加されました。

    これにより、左下 left bottom から赤い円形グラデーション、右下 right bottom から紫の円形グラデーション、右上 right top から黄緑の円形グラデーションが追加されました。


    4色のグラデーションが混ざり合っています。

  6. 背景に直接文字が重なると読みにくいので、文字のバックに白い色を付けます。
    ここでは body 要素に対して背景色をつけることにします。
    また、背景とのバランスを考えて、body の横幅などを調節します。
    body { width:70%; /* 横幅は画面の70% */ max-width: 800px; /* ただし最大横幅は800ピクセルまで */ margin:1em auto; /* 上下に1文字分の余白。左右は中央揃え */ background: white; /* 背景色を白色にする */ padding:1.5em; /* 余白を1.5文字分 */ border: solid 1px #bbb; /* 周囲にグレーの枠線を引く */ border-radius:10px; /* ついでに角を丸くする */ }

    文字の背景に白い背景が付き、max-width によって横幅がある程度の長さに制限されるようになりました。

  7. 文章のデザインを調整しましょう。
    この文章にはルビ(ふりがな)がふってあり、そのせいで行間がまちまちになっています。
    行間を広げて読みやすくし、文字の書体なども調整しましょう。

    まちまちの行間

    body { width:70%; /* 横幅は画面の70% */ max-width: 800px; /* ただし最大横幅は800ピクセルまで */ margin:1em auto; /* 上下に1文字分の余白。左右は中央揃え */ background: white; /* 背景色を白色にする */ padding:1.5em; /* 余白を1.5文字分 */ border: solid 1px #bbb; /* 周囲にグレーの枠線を引く */ border-radius:10px; /* ついでに角を丸くする */ line-height:180%; /* 行間を広くする*/ font-size: 16pt; /* 文字を大きめに */ font-family: Verdana, 'BIZ UDP明朝 Medium', Meiryo, メイリオ, serif; /* 明朝系のフォントを使う */ }

    行間と書体が調整されました。

  8. 背景だけでなく、文字に対してもグラデーションをかけてみましょう。
    今回は、h1 見出しで書かれた「蜘蛛の糸」という文字に対してグラデーションをかけることにします。
    h1{ display:inline-block; background: linear-gradient(to right, #40E0D0, #FF8C00, #FF0080); -webkit-background-clip: text; background-clip: text; color: transparent; }

    タイトル文字にグラデーションがかかりました。

以上でデザインは完成です。
CSSを使って、ちょっぴり複雑なグラデーションを実現できました。

解説

グラデーションの重ね合わせ

background プロパティに対し、radial-gradient()linear-gradient() を設定することで、円形グラデーションや、線形のグラデーションが実現できます。
さらにそれらをカンマ , で区切ってつなげることで、複数のグラデーションを重ね合わせた複雑なグラデーションを実現できます。

詳しく知りたい場合は、下記のリンクを参照してください。

radial-gradient() - MDN

linear-gradient() - MDN

background: radial-gradient( ~ ) , linear-gradient( ~ ) , : : radial-gradient( ~ ) ;

グラデーションの重ね方、位置、方向を変えれば、より複雑なグラデーションを実現できるでしょう。

グラデーションを試してみたい場合は、Gradient Generatorといったサイトもありますので、試してみてください。

ただし複数のグラデーションを重ねる場合は、手前のグラデーションが奥のグラデーションを上書きするので、半透明色を使用する必要があります。
(通常の色は不透明色なので、手前に配置されたグラデーションに完全に上書きされてしまいます)

半透明色

カラーコードで色を表す場合、通常は #ff8800 のように、2桁の16進数を、赤(R)緑(G)青(B)の3つの要素について並べ、計6桁のアルファベットと数字で表現します。

他の方法としては、rgb() 関数を使って10進数で表現する方法もあります。

#ff8800
rgb(255,136,0)
どちらも同じオレンジ色を示します。

半透明色を設定する場合、カラーコードの場合、最後にもう2桁、透明度を表す16進数を追加して、#ff880080 のように8桁とします。
また他の方法として、rgb() の代わりに rgba() 関数を使って10進数で表現する方法もあります。

#ff880080
rgba(255,136,0,128)
どちらも同じ半透明のオレンジ色です。

透明度は 00 が完全な透明で、FF(255)が完全な不透明です。
上の例のオレンジ色は、ちょうど半分透明(50%透過)の設定となります。

末尾2桁の数値を下げていくと、より透明に近くなっていきます。

#ff880040
rgba(255,136,0,64)
透明度を下げてより薄くなったオレンジ色です。

このようにCSSでは半透明色を簡単に扱えます。

<html>と<body>を活用したデザイン

昨今のサイトデザインでは、背景の上にボックスを置いたようなデザインが多く見受けられます。

見出し なんとかかんとか
本文の内容を、あーだこーだ書いてみる。これがよくあるページのデザインかどうか、本当のところは分からないが、君はこのデザインについて肯定をしてもいいし、否定をしてもいい。ともかくそういうものだと納得してくれれば幸いである。
最近よくあるページデザインの例

ちょうどこのページ自身もそんなデザインになっていますね。

こういうデザインを実現するには、通常は<body>に対して背景色などを設定し、<div>を使ってボックスを作り、横幅や余白などの設定を行って実現します。 ちょうど一つ前の練習問題では、そのような仕組みになっていました。

ですが今回の問題では、<div>を使わずに、同様のデザインを実現しています。

どうやってやったかというと、今回は <html><body>を使ったのです。上記のような設定をする代わりに、<html>に対して背景色などを設定し、<body>をボックス扱いして、横幅や余白などの設定を行って実現したのでした。

ちなみに、基本的なHTMLの構造をおさらいすると、以下のようになっています。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ページのタイトルをここに記入します</title> </head> <body> <!-- 本文ここから --> <h1>見出し1</h1> これはページの本文です。<br> サンプルテキスト <!-- 本文ここまで --> </body> </html>
HTMLの基本構造

構造をよく見ると、全体を囲う<html></html>の中に、<body></body>が入っている二重構造になっています。これはHTMLの決まりで、最初からこのようにするよう定められているのです。

<html lang="ja">
<body> : : 本文省略 </body>
</html>
ちょー簡略化したHTMLの基本構造

つまり、従来の<body><div>の2重構造で背景の上にボックスを置く構造を、<html><body>にやらせれば、同様のボックス構造を<div>を使わずに出来てしまうというわけです。

 ここがHTML
見出し なんとかかんとか
ここがBODY

<html> に対して背景色を塗り、<body>の背景を白くして中央寄せにすると、上記のようなデザインを簡単に作れます。

HTMLに特別な加工を施さなくても、普通のHTML構造のまま、最近よくあるデザインを実現できるので、ちょっと便利なテクニックというわけです。😁

文字のグラデーション

実はCSSには現時点では文字に対してグラデーションをする直接的な方法が用意されていません。
そのため、今回はやや変則的な方法で文字に対するグラデーションを実現しています。

以下にグラデーションのかけ方の詳細を解説しておきます。もしよければ参考にしてください。

まず最初に、背景に対してグラデーションをかけます。
linear-gradient() に複数の色を追加することで、右に向かって(to right)虹色のようなグラデーションをかけます。

background: linear-gradient(to right, #40E0D0, #FF8C00, #FF0080);
Quick Brown Fox

グラデーションの範囲が文字の書かれていないエリアまで広がっているので、display:inline-block; を追加して、グラデーションの範囲を狭くします。

display - MDN

display:inline-block; background: linear-gradient(to right, #40E0D0, #FF8C00, #FF0080);
Quick Brown Fox

この状態では、背景に色が塗られており、文字の色は黒のままです。

次にグラデーションの範囲を文字の範囲だけに限定するため、background-clip: text; を追加し、文字が書かれている部分にだけ背景を表示させるようにします。
ちなみに、-webkit-background-clip: text; は、ChromeブラウザやEdgeブラウザで動作させるために必要な記述です。

background-clip - MDN

display:inline-block; background: linear-gradient(to right, #40E0D0, #FF8C00, #FF0080); -webkit-background-clip: text; background-clip: text;
Quick Brown Fox

背景のグラデーションが見えなくなりましたが、文字の色は黒色のままです。
これは文字の色が黒色になっており、background-clip: text;によって背景をテキスト内に表示させるようにしても、文字の黒色が優先され、背景のグラデーションが表示されない状態となるためです。

そこで、最後に文字の色(color)を透明(transparent)にします。

display:inline-block; background: linear-gradient(to right, #40E0D0, #FF8C00, #FF0080); -webkit-background-clip: text; background-clip: text; color: transparent;
Quick Brown Fox

文字の色が除去された結果、背景色が見えるようになり、文字にグラデーションが掛かっているように見えます。

このようにして、(やや変則的な方法ではありますが)文字に対してグラデーションをかけることができます。
参考にしてください。