Skip to content
This page has been auto-translated and may contain errors.View in English

色と背景

docs.scrimba.com

ボタンを特定の青にしたいとします。デザインファイルから色を見つけて、#1b2130をスタイルシートに貼り付けると機能しますが、これらの文字が何を意味するのか、また色を少し明るくするにはどうするのかが分かりません。CSSの色は、その下にあるいくつかのシステムを学ぶまで、暗号化されたコードの山に見えます。色を読むことができ、背景に色を塗ることができれば、ページのビジュアルキャラクターのほとんどはあなたの手の中にあります。

色を指定する

CSSでは、同じ色を複数の方法で書くことができます。最も簡単なのは**キーワード**です。ブラウザが既に知っている平易な英語の名前です。

css
.tag {
  color: rebeccapurple;      /* コードを使わない名前付きの色 */
}

これらの名前は約140個あり、簡単な作業には便利ですが、実際のデザインにとっては圧倒的に不足しています。他の方法では、どんな色でも記述することができます。16進数コード#に続く6文字で、rgb()は赤、緑、青を量で混ぜます。どれも正確な色を指しており、キーワードは一般的なものへのショートカットです。

css
.tag {
  color: #1b2130;            /* 同じ暗い紺を16進数コードで書いたもの */
}

CSSで色を書くには4つの方法があり、それぞれ異なるシステムを通じて同じ色を記述します。rebeccapurpleのような**キーワードは固定の名前です。#1b2130のような16進数コード**は赤、緑、青を6文字に詰め込みます。rgb()関数はこれら3つのチャネルを0~255の数値として設定します。そしてhsl()は色相、彩度、明度で色を記述します。

css
.badge {
  color: #1b2130;                 /* 16進数:赤、緑、青それぞれ2文字 */
  color: rgb(27, 33, 48);         /* 赤、緑、青の量として同じ色 */
  color: hsl(219, 28%, 15%);      /* 色相、彩度、明度として同じ色 */
}

これらの3行はすべて同じ暗い紺を塗ります。手動で色を選ぶときは**hsl()**を使用してください。これは人が理由付けできる記述のように読めますが、16進数とrgbはほとんどコピーペーストするだけの数値です。

CSSは色をキーワード、16進数コード、rgb()、またはhsl()として受け入れ、最初の3つはすべてsRGB空間(何十年もの間、スクリーンが使用してきた標準的な色空間)にアクセスします。16進数コードはbase-16です。#1b2130は赤1b、緑21、青30で、各ペアは00ff(10進数では0~255)の値です。rgb()は同じ3つのチャネルを平易な10進数で書きます。どちらも人間が理由付けをするのに向いていません。色を「少し明るく」する場合、3つの数値を同時に調整する必要があり、方向が明確ではないからです。

css
.badge {
  color: #1b2130;               /* base-16:1b赤、21緑、30青 */
  color: rgb(27 33 48);         /* 同じチャネル、10進数、モダンなスペース区切り構文 */
  color: hsl(219 28% 15%);      /* 色相219度、彩度28%、明度15% */
}

hsl()を優先してください。その3つの軸は、それぞれ独立して調整できる1つのことにマップされます。色相は色相環上の0~360の位置、彩度は色がどれだけ鮮やかか、明度がどれだけ明るいかです。ホバー状態を少し暗くしたいですか?明度を数パーセント下げて、他の2つはそのままにしておきます。この単一の読みやすい軸は、パレットを構築するために使用するカスタムプロパティできれいに合成される理由です。そこでは1つの色相を保つかもしれず、一連の陰影全体で明度のみを変動させます。

Juno色を指定する 同じ色はrebeccapurpleのようなキーワード、#1b2130のような16進数コード、またはrgb()で書くことができます。キーワードはすぐに使用できますが、約140個しかないため、ほとんどの実際の作業ではコードを使用します。この段階ではまだ16進数コードを目で読もうとしないでください。正確な値をコピーすることは完全に正常です。
Juno色を指定する キーワード、16進数、rgb()hsl()はすべて異なるシステムを通じて同じ色を指定しています。色を自分で選ぶときはhsl()を使用してください。色相、彩度、明度は実際に理由付けできるものだからです。16進数とrgb()はデザインからコピーする値用であり、手で調整するものではありません。
Juno色を指定する キーワード、16進数、rgb()はすべて異なる記法を通じてsRGBにアクセスします。hsl()は同じ色を、一度に1つ移動できる3つの軸に変換します。それが優先される全理由です。より暗いホバーは1つの数値(明度)であり、3つの調整されたものではありません。カスタムプロパティからパレットを構築して、スケール全体で明度を変動させる瞬間から報われます。

透明度

時々、透光性のある色が必要な場合があります。背後にあるものが少し見えるようにです。これは**透明度**であり、アルファと呼ばれる4番目の値を追加します。0は完全に透明で、1は完全に不透明です。

css
.overlay {
  background-color: rgb(27 33 48 / 0.5);   /* 紺色ですが、半分透明 */
}

終わりの/ 0.5は「半分の不透明度」を意味します。opacityと呼ばれるプロパティもあり、テキストを含むグローバル要素全体をフェードします。

css
.faded {
  opacity: 0.5;              /* 要素全体をフェード、1つの色ではなく */
}

その違いは重要です。アルファは1つの色のみに影響しますが、opacityは要素のすべてをフェードさせます。

色を透光性にするには、**アルファ**値を追加します。0は不可視で、1は不透明です。rgb()hsl()の両方がスラッシュの後にこれを受け取り、16進数コードは終わりに2つの追加文字としてそれを持つことができます。

css
.overlay {
  background-color: rgb(27 33 48 / 0.5);    /* 半透明の紺 */
  background-color: hsl(219 28% 15% / 0.5); /* hsl経由で同じもの */
  background-color: #1b213080;              /* 同じまた:80は大体50%のアルファ */
}

アルファとopacityプロパティの間に重要な区別があります。アルファは1つの色を部分的に透明にするだけです。opacityは、テキスト、その枠線、任意の子を含む要素全体を単一のユニットとしてフェードします。アルファで1つの色をフェード、opacityで全体の要素をフェード。背景だけを柔らかくしようとしたときにテキストが薄くなった場合、アルファが必要な場所でopacityに到達しました。

**アルファ**は色の4番目のチャネルで、0(完全に透明)から1(完全に不透明)で、その1つの色の値に属しています。モダンなrgb()hsl()はスラッシュの後にこれを受け取り、16進数は4番目のバイトとして受け取るため、#1b21308080/ffでの紺色、大体50%です。アルファが色に存在するため、背景を半透明にしながらテキスト、枠線、その他のすべてを完全に不透明に保つことができます。

css
.overlay {
  background-color: hsl(219 28% 15% / 0.5);  /* このフィルのみが半透明 */
  color: white;                              /* テキストは完全に不透明なまま */
}

opacityは類似して見える別のツールです。要素全体の透明度を設定し、要素とそのすべての子孫をページ上のグループとしてコンポジットすることによってそれを行います。2つの結果がアルファには持たないものがあります。まず、1未満のopacityは新しいスタッキングコンテキスト(重複する要素がどのように順序付けられるかのための自立したレイヤー)を確立し、これは何が何の上に座るかを変更できます。次に、フェードが終了したグループに適用されるため、フェードされた親内のソリッドな子を復元することはできません。1つのフィルまたは1つの枠線のみが透光性である場合、その色でアルファを使用して、opacityは放置します。

Juno透明度 色に4番目の値を追加して透光性にします。0は不可視で、1は不透明で、/ 0.5のようなものは中間です。そのアルファは1つの色のみに触れます。別のopacityプロパティは、テキストを含めて全体の要素をフェードするため、背景をより柔らかくしたいだけの場合はアルファを選びます。
Juno透明度 アルファは単一の色の透明度で、rgb()またはhsl()ではスラッシュの後に、または2つの追加の16進数文字として書かれています。opacityプロパティはより単純なバージョンです。これは要素全体とその子を同時にフェードさせます。テキストが予期せず薄くなったのは、アルファが正しい呼び出しであった場所でopacityを使用しました。
Juno透明度 アルファは色に存在するため、半透明なフィルはソリッドなテキストと枠線に影響を与えません。opacityは要素全体とその子孫をグループとしてコンポジットするため、子はフェードされた親内でソリッドなままにはなれず、新しいスタッキングコンテキストを静かにスピンアップします。要素全体がフェードされたい場合を除き、アルファに到達します。

背景色と画像

background-colorプロパティは、要素の背後の領域を埋め、その枠線に到達します。名前を付けることができるどの色でも使用できます。

css
.hero {
  background-color: hsl(219 28% 15%);   /* コンテンツの背後に固体の紺 */
}

background-imageで要素の背後に画像を配置し、url(...)でファイルをポイントすることもできます。

css
.hero {
  background-image: url("mountains.jpg");
  background-size: cover;               /* 画像をスケールして領域全体を埋める */
}

background-size: coverは画像をスケールしてボックスを完全に埋め、オーバーフローをクロップします。ほとんどの場合、これが必要な設定です。空白のギャップはありません。

background-colorはコンテンツの背後の領域を塗り、パディングボックスを枠線の端に埋めます。その色の上に、background-imageurl(...)で画像をレイヤーすることができます。色の上にレイヤーされるため、背景色が画像の下に表示され、透明な部分を通じて表示され、画像の読み込み中に表示されます。

css
.hero {
  background-color: hsl(219 28% 15%);   /* 表示を通じて、最初に読み込む */
  background-image: url("mountains.jpg");
  background-size: cover;               /* ボックスを埋め、オーバーフローをクロップ */
  background-position: center;          /* 画像の中央を視野に保つ */
  background-repeat: no-repeat;         /* 1つのコピー、タイルしない */
}

3つのプロパティが画像の位置を制御します。background-sizeは通常cover(ボックスを埋め、こぼれたものをクロップ)またはcontain(全画像を内部に収める。ギャップを残す可能性)です。background-positionは画像がクロップされるときどの部分が視野に保たれるかを決定し、centerが安全なデフォルトです。background-repeat: no-repeatは小さな画像がボックス全体にタイルするのを防ぎます。

background-colorは要素の背景領域を埋めます。デフォルトではパディングボックスであり、色はパディングの外側の端に到達し、枠線で停止します。background-imageはその色の上に塗ります。写真画像の下に固体のbackground-colorを保つ価値があります。画像が読み込まれている間、またはリクエストが失敗した場合に表示されるフォールバック。透明な領域を通じて表示されるため、画像の音に近いものを選択して、ページの素地の閃光を避けます。

css
.hero {
  background-color: hsl(219 28% 15%);   /* フォールバックと読み込み時間の埋め */
  background-image: url("mountains.jpg");
  background-size: cover;               /* カバー:ボックスを埋め、オーバーフローをクロップ */
  background-position: center;          /* クロップを中央に固定 */
  background-repeat: no-repeat;
}

サイジングの選択は実際のトレードオフです。coverは両軸のボックスを埋めるように画像をスケールし、こぼれたものをクロップするため、何も空白のままではありませんが、画像の一部は失われます。containは全画像が収まるまでスケールし、クロップされませんが、ボックスは覆われていないストリップを表示できます(background-colorはそれらを埋めます)。background-positioncoverの下で最も重要です。クロップから何の領域が生き残るかを決定するため。centerは安全ですが、ポートレートは顔をフレーム内に保つためにtopが必要な場合があります。クリスプな非写真フィルの場合、グラデーションもbackground-imageとしてカウントされることに注意してください。次のセクションではこれを使用しています。

Juno背景色と画像background-colorは要素の背後のスペースを埋め、background-image: url(...)は代わりに画像をそこに置きます。background-size: coverで画像を組み合わせて、ボックス全体を埋めて間隙を残さないようにしてください。その組み合わせは、初期段階で到達したいものの大部分をカバーしています。
Juno背景色と画像 背景画像は背景色の上にレイヤーされるため、画像が読み込まれている間は色を下に保ちます。coverはボックスを埋めてオーバーフローをクロップしますが、containは全画像を収めるかもしれませんがギャップを残します。background-positionはクロップされるときどの部分が見えるかを決定します。画像が実際にタイルされたくない限り、no-repeatを追加してください。
Juno背景色と画像 どの写真の下にもbackground-colorを保ちます。それは読み込み中のフォールバックで、透明な領域を通じて表示されます。covercontainは埋めてクロップ対フィットとおそらくギャップであり、background-positioncoverの下でのみ利益を得ます。そこではそれがクロップから何が生き残るかを選択します。デフォルトではcenterに固定し、画像の特定の部分がフレーム内に留まる必要がある場合のみ移動します。

グラデーション

**グラデーション**は1つの色から別の色への滑らかなブレンドです。CSSはそれを画像の一種として扱うため、background-colorではなくbackground-imageに入ります。

css
.banner {
  background-image: linear-gradient(hsl(219 28% 15%), hsl(219 40% 35%));
}

これは最初の色を上から2番目の色を下にブレンドします。2つ以上の色をリストでき、方向を変更できます。

css
.banner {
  background-image: linear-gradient(to right, hsl(340 80% 55%), hsl(30 90% 60%));
  /* 上下ではなく左から右にブレンド */
}

画像ファイルは不要です。ブラウザはブレンドを描画します。

**グラデーション**は生成された画像であり、これがlinear-gradient()background-colorではなくbackground-imageに入る理由です。最初の引数は方向、次にブレンドする色のリストです。方向を省略するとトップから下に実行されます。

css
.banner {
  background-image: linear-gradient(
    to right,                    /* 方向:左端から右端 */
    hsl(340 80% 55%),            /* 開始色 */
    hsl(30 90% 60%)              /* 終了色 */
  );
}

radial-gradient()は同じように機能しますが、直線に沿ってではなく、中心点から放射状にリングでブレンドします。それはソフトな光やスポットライト効果のためのツールです。

css
.spotlight {
  background-image: radial-gradient(hsl(0 0% 100%), hsl(219 28% 15%));
  /* 明るい中央から暗い端へフェード */
}

グラデーションは背景画像であるため、同じbackground-imageプロパティの下で、実画像と他のグラデーションと積み重なり、カンマで区切られています。

グラデーションは生成された画像であり、url(...)と同じサイジングおよびレイヤールールに従ってbackground-imageに存在します。linear-gradient()はオプションの方向を最初に取得します(to right、または135degのような角度)。次に、ブレンドするカラーストップのリストです。ストップに明示的な位置を与え、色がどこに正確に着地するかを制御します。これは2つのストップが同じポイントで関わるときにグラデーションをハードストライプにします。

css
.banner {
  background-image: linear-gradient(
    135deg,                      /* 角度:0degは上、90degは右 */
    hsl(340 80% 55%) 0%,
    hsl(30 90% 60%) 100%
  );
}

radial-gradient()は中央から外側へブレンドし、その停止の前にオプションの形状とサイズを取得します。両方とも画像のあらゆる意味で、カンマで区切られたbackground-imageの下にレイヤーされます。早いグラデーションは後のものの上に塗られます。これは、半透明なグラデーションが写真上のティントになる方法です。

css
.hero {
  background-image:
    linear-gradient(hsl(219 28% 15% / 0.6), hsl(219 28% 15% / 0.6)),  /* 上の暗いティント */
    url("mountains.jpg");                                             /* 下の写真 */
  background-size: cover;
}

hsl()は直接明度を公開するため、同じ色相の2つのストップグラデーション、2つの明度値間はクリーンで制御可能なフェードを与えます。これはhslを選択することが16進数をオーバーパフォーム する別の場所です。

Junoグラデーション グラデーションは色間の滑らかなブレンドであり、CSSはそれを画像と数えるため、background-imageに入ります。linear-gradient()は直線でブレンドし、デフォルトではトップから下へ、または方向を変更するためにto rightを追加します。ファイルは不要。ブラウザがブレンド自体を描画します。
Junoグラデーションlinear-gradient()radial-gradient()は両方とも生成された画像であり、background-imageに属しています。Linear は方向付けられた直線に沿ってブレンドし、Radial はエルプ中央からリングで外側へブレンドし、光の良い。画像であるため、カンマで区切られたbackground-imageの下に複数積み重ねることができます。
Junoグラデーション グラデーションは画像であり、位置を取得し、1つのbackground-imageの下にレイヤーされ、background-sizeに従います。正確なフェードまたはハードストライプのためにカラーストップに明示的な位置を与え、写真上に半透明なグラデーションをurl(...)積み重ねて、2番目の要素なしで写真をティントします。2ストップhsl()同じ色相で2つの明度値間のフェードはコントロールするクリーンな種類です。

適応して読みやすい色

1つの有用なキーワードはcurrentColorです。要素のテキスト色を表すため、枠線やアイコンはテキストに自動的に一致できます。

css
.chip {
  color: hsl(219 28% 15%);
  border: 2px solid currentColor;   /* 枠線がテキスト色と一致します */
}

後でテキスト色を変更すると、枠線は独自の変更なしに従う必要があります。

もう1つ念頭に置いておくべきこと:テキストがその背景から目立つことを確認してください。暗いテキストの暗い背景は読みにくく、薄いグレーの白はめまいがします。テキストと背景の明るさに明確な違いがあることを目指してください。

currentColorは要素の独自のcolor値に解決されるキーワードであり、枠線、アウトライン、SVGアイコンはテキスト色を繰り返さずに追跡できます。テキストを一度設定すると、currentColorに結びついているすべてがそれで更新されます。

css
.chip {
  color: hsl(219 28% 15%);
  border: 2px solid currentColor;   /* 色に従う、重複した値なし */
}

注視するプロパティは**対比**です。テキストとその背景の明るさの差です。低対比は読みにくく、アクセシビリティガイドラインはボディテキストの最小比率を設定します。ここがhsl()が再び現れる場所です。明度が独自の軸であるため、色相を保ち、テキストと背景の明度を十分に離して合法的を保つことができます。3つのチャネルを一度に推測することなく。

currentColorは要素の計算されたcolorに解決されます。これにより、枠線、アウトライン、ボックスシャドウ、SVGfillをテキスト色に結びつけるの軽量な方法があります。どの値のように継承されるため、コンテナのcolorを設定することは、currentColorを参照するすべての子孫に単一のソース色をカスケードするため、コンポーネントを1つの宣言からテーマする清潔なパターンです。

より難しい制約は**対比であり、相対的な輝度における前景と背景の測定された差です。アクセシビリティ標準であるWCAG**(ウェブコンテンツアクセシビリティガイドライン)は、通常のボディテキストには4.5~1の最小比率を設定し、大きなテキストには3~1を設定します。その比率の下のテキストは低ビジョンだけでなく、多くの人にとって読みにくいです。hsl()はそれを打つのを助けます。明度は別の軸であり、色相と彩度を保ち、2つの明度値のみを移動して、盲目的に6つのチャネルを突つくのではなく、ペアがパスするまで移動できます。それは推論への援助であり、等明度色がまだ真の輝度計算に失敗できるため、保証ではありません。チェッカーで最終的な比率を確認してください。

この段階で知る価値がある2つのこと。backgroundショートハンドは多くの背景プロパティを一度に設定し、1つのルールはbackground-sizebackground-positionの後に来ることです。スラッシュで区切られて。background: url("bg.jpg") center / cover no-repeat。そしてCSSはhsl()を超えた色関数を持つようになりました。oklch()のような、sRGBが表現できるよりも広いスクリーン上の色に到達します(より広い色域;スクリーンが表示できる色の範囲)。まだそれらが必要ではありませんが、より新しい関数の存在を知っていることは、デザインシステムがsRGBが表現できるより活気に満ちた色のために到達する際にそれらを認識することを意味します。これを読みやすいタイポグラフィとペアリングすると、テキストは意味をすべての読者に運びます。

Juno適応して読みやすい色currentColorは要素のテキスト色をコピーするキーワードであり、枠線がテキストと一致し、後で変更した場合に従うことができます。その先、テキストを読みやすく保ちます。背後にあるものよりも明らかに明るいまたは暗いことを確認してください。低対比がページが読みにくい最も一般的な理由です。
Juno適応して読みやすい色currentColorは枠線、アウトライン、アイコンをテキスト色に結びつけるため、1か所で設定します。対比(テキストと背景の明るさギャップ)を注視してください。アクセシビリティルールはボディテキストの最小値を設定するため。hsl()で明度値をプルして離すことは、そのギャップを十分に広く保つ確実な方法です。
Juno適応して読みやすい色currentColorは継承されるため、1つのコンテナのcolorは、それを参照するすべての子孫にテーマを与えます。WCAGはボディテキストに4.5~1を望み、hsl()はそれに到達するために明度のみを移動することを可能にしますが、等明度は実際の輝度チェックに失敗できるため、ツールで検証してください。backgroundショートハンドはサイズを位置の後にスラッシュで置き、oklch()のような新しい関数が存在して、デザインが必要な場合は、より広い色域のために存在することを覚えておいてください。