radial-gradient()
: 円形グラデーション CSSの設定値
このページで解説するコードの実行結果。
10
20
30
40
50
60
70
80
90
100
100
100
100
100
100
100
100
100
100
100
90
80
70
60
50
50
50
50
50
50
このページの説明は、以下のコードから始める。
<div class="sample"></div>
radial-gradient()
関数の概要
background
プロパティにradial-gradient()
関数を設定すると、円形なグラデーションになる。
※ 注意: background
プロパティにしか設定できない。 background-color
プロパティにも、color
プロパティにも設定できない。
複数の色はカンマ「,
」で指定する。
.sample { background-image: radial-gradient( red, yellow ); }
上図の中心がred
、4つの角がyellow
であり、その間をグラデーションしている。
さて、yellow
の後ろに(カンマではなく)スペースでつなげて50%
と書くと「内側の円をred
とyellow
で分け」、「外側の円はyellow
」になる。
.sample { background-image: radial-gradient( red, yellow 50% ); }
25%
にすると、さらに赤い円は縮まる。
.sample { background-image: radial-gradient( red, yellow 25% ); }
次に、red 50%
とする。(yellow
には無指定)
この場合、赤い円は大きくなる。
.sample { background-image: radial-gradient( red 50%, yellow ); }
red 75%
とすると、さらに大きく。
.sample { background-image: radial-gradient( red 75%, yellow ); }
最後に両方指定した場合。
red 40%, yellow 60%
とする。
内側から「0 ~ 40%」のところはred
のみ、「60% ~ 100%」のところはyellow
のみとなる。
残った「40% ~ 60%」の領域のみがグラデーションになる。
.sample { background-image: radial-gradient( red 40%, yellow 60% ); }
下はred, yellow
のみの指定。上の結果の方が滲んでいる領域が少ない。
.sample { background-image: radial-gradient( red, yellow ); }
まとめる。sample-0-100
クラスが無指定(デフォルト)の状態。
.sample-0-10 { background-image: radial-gradient( red , yellow 10% ); } .sample-0-20 { background-image: radial-gradient( red , yellow 20% ); } .sample-0-30 { background-image: radial-gradient( red , yellow 30% ); } .sample-0-40 { background-image: radial-gradient( red , yellow 40% ); } .sample-0-50 { background-image: radial-gradient( red , yellow 50% ); } .sample-0-60 { background-image: radial-gradient( red , yellow 60% ); } .sample-0-70 { background-image: radial-gradient( red , yellow 70% ); } .sample-0-80 { background-image: radial-gradient( red , yellow 80% ); } .sample-0-90 { background-image: radial-gradient( red , yellow 90% ); } .sample-0-100 { background-image: radial-gradient( red , yellow ); } .sample-10-100 { background-image: radial-gradient( red 10%, yellow ); } .sample-20-100 { background-image: radial-gradient( red 20%, yellow ); } .sample-30-100 { background-image: radial-gradient( red 30%, yellow ); } .sample-40-100 { background-image: radial-gradient( red 40%, yellow ); } .sample-50-100 { background-image: radial-gradient( red 50%, yellow ); } .sample-60-100 { background-image: radial-gradient( red 60%, yellow ); } .sample-70-100 { background-image: radial-gradient( red 70%, yellow ); } .sample-80-100 { background-image: radial-gradient( red 80%, yellow ); } .sample-90-100 { background-image: radial-gradient( red 90%, yellow ); } div { width: 5em; /* 幅 */ height: 5em; /* 高さ */ }
<div class="sample-0-10"> 0 <br> 10 </div> <div class="sample-0-20"> 0 <br> 20 </div> <div class="sample-0-30"> 0 <br> 30 </div> <div class="sample-0-40"> 0 <br> 40 </div> <div class="sample-0-50"> 0 <br> 50 </div> <div class="sample-0-60"> 0 <br> 60 </div> <div class="sample-0-70"> 0 <br> 70 </div> <div class="sample-0-80"> 0 <br> 80 </div> <div class="sample-0-90"> 0 <br> 90 </div> <div class="sample-0-100"> 0 <br> 100 </div> <div class="sample-10-100"> 10 <br> 100 </div> <div class="sample-20-100"> 20 <br> 100 </div> <div class="sample-30-100"> 30 <br> 100 </div> <div class="sample-40-100"> 40 <br> 100 </div> <div class="sample-50-100"> 50 <br> 100 </div> <div class="sample-60-100"> 60 <br> 100 </div> <div class="sample-70-100"> 70 <br> 100 </div> <div class="sample-80-100"> 80 <br> 100 </div> <div class="sample-90-100"> 90 <br> 100 </div>
10
20
30
40
50
60
70
80
90
100
100
100
100
100
100
100
100
100
100
その2。
.sample-0-100 { background-image: radial-gradient( red , yellow ); } .sample-10-90 { background-image: radial-gradient( red 10%, yellow 90% ); } .sample-20-80 { background-image: radial-gradient( red 20%, yellow 80% ); } .sample-30-70 { background-image: radial-gradient( red 30%, yellow 70% ); } .sample-40-60 { background-image: radial-gradient( red 40%, yellow 60% ); } .sample-50-50 { background-image: radial-gradient( red 50%, yellow 50% ); } .sample-40-50 { background-image: radial-gradient( red 40%, yellow 50% ); } .sample-30-50 { background-image: radial-gradient( red 30%, yellow 50% ); } .sample-20-50 { background-image: radial-gradient( red 20%, yellow 50% ); } .sample-10-50 { background-image: radial-gradient( red 10%, yellow 50% ); } .sample-0-50 { background-image: radial-gradient( red , yellow 50% ); } div { width: 5em; /* 幅 */ height: 5em; /* 高さ */ }
<div class="sample-0-100"> 0 <br> 100</div> <div class="sample-10-90"> 10 <br> 90 </div> <div class="sample-20-80"> 20 <br> 80 </div> <div class="sample-30-70"> 30 <br> 70 </div> <div class="sample-40-60"> 40 <br> 60 </div> <div class="sample-50-50"> 50 <br> 50 </div> <div class="sample-40-50"> 40 <br> 50 </div> <div class="sample-30-50"> 30 <br> 50 </div> <div class="sample-20-50"> 20 <br> 50 </div> <div class="sample-10-50"> 10 <br> 50 </div> <div class="sample-0-50"> 0 <br> 50 </div>
100
90
80
70
60
50
50
50
50
50
50
repeating-radial-gradient()
関数
radial-gradient()
の復習。
.sample { background-image: radial-gradient( red, yellow ); }
最後のyellow
を50%
にすると、外側50%はyellow
になる。
.sample { background-image: radial-gradient( red, yellow 50% ); }
radial-gradient
をrepeating-radial-gradient
に変更すると繰り返しになる。
50%
を指定しているので、2回繰り返す。
.sample { background-image: repeating-radial-gradient( red, yellow 50% ); }
33%
を指定すると3回繰り返す。
.sample { background-image: repeating-radial-gradient( red, yellow 33% ); }
25%
を指定すると4回繰り返す。
.sample { background-image: repeating-radial-gradient( red, yellow 25% ); }
複数の色を指定
3色の色を指定する。それぞれ1/3に分ける。
.sample { background-image: radial-gradient( red, yellow, green ); }
blue
を加えて4色にする。それぞれ25%に分けられる。
.sample { background-image: radial-gradient( red, yellow, green, blue ); }
yellow 75%
と指定する。「内側の75%をred
とyellow
で半分に分け」、「残りの25%をgreen
とblue
が分ける」ことになる。
.sample { background-image: radial-gradient( red, yellow 75%, green, blue ); }
加えてred 50%
にする。内側の50%がred
、50%~75%がyellow
、残りにgreen
とblue
になる。
.sample { background-image: radial-gradient( red 50%, yellow 75%, green, blue ); }
repeating-radial-gradient
に複数指定
復習。 radial-gradient
の3色指定。
.sample { background-image: radial-gradient( red, yellow, green ); }
最後のgreen
を50%
にすると、外側50%はgreen
になる。
.sample { background-image: radial-gradient( red, yellow, green 50% ); }
radial-gradient
をrepeating-radial-gradient
に変更すると繰り返しになる。
.sample { background-image: repeating-radial-gradient( red, yellow, green 50% ); }
ちなみにrepeating-radial-gradient
を使う場合、開始と終了の色を同じにすると見た目が良い。
最後のgreen
をred
に変更してみる。
.sample { background-image: repeating-radial-gradient( red, yellow, red 50% ); }
三回繰り返すには、33%
にする。
.sample { background-image: repeating-radial-gradient( red, yellow, red 33% ); }
円/楕円
.sample { background-image: radial-gradient( red 40%, yellow 60% ); } div { height: 120px; /* 高さ */ }
楕円になる。
red
の前に「circle,
」を記述すると円になる。
.sample { background-image: radial-gradient( circle, red 40%, yellow 60% ); } div { height: 120px; /* 高さ */ }
円のサイズを小さくすると、長方形内に収まる。
.sample { background-image: radial-gradient( circle, red 20%, yellow 40% ); } div { height: 120px; /* 高さ */ }
なお、デフォルト値は「ellipse
= 楕円」である。
.sample { background-image: radial-gradient( ellipse, red 40%, yellow 60% ); } div { height: 120px; /* 高さ */ }
移動
横位置
位置をずらしてみる。まず、真ん中に小さい円を描く。
.sample { background-image: radial-gradient( circle, red 10%, yellow 15% ); }
「circle at 30px,
」と指定すると左に寄る。なお、円の大きさが変わっているが、今のところは無視する。
30px
は一番左端からの距離である。(横幅は200px
)
.sample { background-image: radial-gradient( circle at 30px, red 10%, yellow 15% ); }
横幅は200px
だから、中心は100px
。120px
だと、やや右に寄る。
.sample { background-image: radial-gradient( circle at 120px, red 10%, yellow 15% ); }
100px
だと中心。
.sample { background-image: radial-gradient( circle at 100px, red 10%, yellow 15% ); }
中心はcenter
と書くこともできる。(これがデフォルト値になっているので、無指定と同じ)
.sample { background-image: radial-gradient( circle at center, red 10%, yellow 15% ); }
「%
」で書くこともできる。(左端が0%
、右端が100%
)
.sample { background-image: radial-gradient( circle at 20%, red 10%, yellow 15% ); }
なお、circle
を省略すると、デフォルトのellipse
(楕円)になる。
.sample { background-image: radial-gradient( at 20%, red 10%, yellow 15% ); }
まとめ。(マイナス値も指定できる)
.m20 { background-image: radial-gradient( circle at -20%,red 10%, yellow 15% ); } .m10 { background-image: radial-gradient( circle at -10%,red 10%, yellow 15% ); } .p0 { background-image: radial-gradient( circle at 0, red 10%, yellow 15% ); } .p10 { background-image: radial-gradient( circle at 10%, red 10%, yellow 15% ); } .p20 { background-image: radial-gradient( circle at 20%, red 10%, yellow 15% ); } .p30 { background-image: radial-gradient( circle at 30%, red 10%, yellow 15% ); } .p40 { background-image: radial-gradient( circle at 40%, red 10%, yellow 15% ); } .p50 { background-image: radial-gradient( circle at 50%, red 10%, yellow 15% ); } .p60 { background-image: radial-gradient( circle at 60%, red 10%, yellow 15% ); } .p70 { background-image: radial-gradient( circle at 70%, red 10%, yellow 15% ); } .p80 { background-image: radial-gradient( circle at 80%, red 10%, yellow 15% ); } .p90 { background-image: radial-gradient( circle at 90%, red 10%, yellow 15% ); } .p100 { background-image: radial-gradient( circle at 100%,red 10%, yellow 15% ); } .p110 { background-image: radial-gradient( circle at 110%,red 10%, yellow 15% ); } .p120 { background-image: radial-gradient( circle at 120%,red 10%, yellow 15% ); } div { height: 50px; display: block; }
縦位置
横位置の直後にスペースで続けて縦位置を指定できる。
40% 20%
にすると、横位置は40%
(やや左寄り)、縦位置は上から20%
。
.sample { background-image: radial-gradient( circle at 40% 20%, red 10%, yellow 15% ); }
横位置とほぼ同じなので、説明は省略。
.m20 { background-image: radial-gradient( circle at center -20%,red 10%, yellow 15% ); } .m10 { background-image: radial-gradient( circle at center -10%,red 10%, yellow 15% ); } .p0 { background-image: radial-gradient( circle at center 0, red 10%, yellow 15% ); } .p10 { background-image: radial-gradient( circle at center 10%, red 10%, yellow 15% ); } .p20 { background-image: radial-gradient( circle at center 20%, red 10%, yellow 15% ); } .p30 { background-image: radial-gradient( circle at center 30%, red 10%, yellow 15% ); } .p40 { background-image: radial-gradient( circle at center 40%, red 10%, yellow 15% ); } .p50 { background-image: radial-gradient( circle at center 50%, red 10%, yellow 15% ); } .p60 { background-image: radial-gradient( circle at center 60%, red 10%, yellow 15% ); } .p70 { background-image: radial-gradient( circle at center 70%, red 10%, yellow 15% ); } .p80 { background-image: radial-gradient( circle at center 80%, red 10%, yellow 15% ); } .p90 { background-image: radial-gradient( circle at center 90%, red 10%, yellow 15% ); } .p100 { background-image: radial-gradient( circle at center 100%,red 10%, yellow 15% ); } .p110 { background-image: radial-gradient( circle at center 110%,red 10%, yellow 15% ); } .p120 { background-image: radial-gradient( circle at center 120%,red 10%, yellow 15% ); } div { width: 50px; }
内接/外接
数学で言うところの「内接」と「外接」である。
設定値 | 意味 | デフォルト |
---|---|---|
closest-side | 内接: 近い辺に接する | |
closest-corner | 近い角に接する | |
farthest-side | 遠い辺に接する | |
closest-corner | 外接: 遠い角に接する | ○ |
まず、無指定の場合(長方形の中心からずれた位置に「楕円」がある)
.sample { background-image: repeating-radial-gradient( at 30% 30%, red, yellow ); } div { height: 120px; /* 高さ */ }
.sample { background-image: repeating-radial-gradient( closest-side at 30% 30%, red, yellow ); } div { height: 120px; /* 高さ */ }
.sample { background-image: repeating-radial-gradient( closest-corner at 30% 30%, red, yellow ); } div { height: 120px; /* 高さ */ }
.sample { background-image: repeating-radial-gradient( farthest-side at 30% 30%, red, yellow ); } div { height: 120px; /* 高さ */ }
.sample { background-image: repeating-radial-gradient( farthest-corner at 30% 30%, red, yellow ); } div { height: 120px; /* 高さ */ }
円の場合
無指定の場合(長方形の中心からずれた位置に「円」がある)
.sample { background-image: repeating-radial-gradient( circle at 30% 30%, red, yellow ); } div { height: 120px; /* 高さ */ }
.sample { background-image: repeating-radial-gradient( circle closest-side at 30% 30%, red, yellow ); } div { height: 120px; /* 高さ */ }
.sample { background-image: repeating-radial-gradient( circle closest-corner at 30% 30%, red, yellow ); } div { height: 120px; /* 高さ */ }
.sample { background-image: repeating-radial-gradient( circle farthest-side at 30% 30%, red, yellow ); } div { height: 120px; /* 高さ */ }
.sample { background-image: repeating-radial-gradient( circle farthest-corner at 30% 30%, red, yellow ); } div { height: 120px; /* 高さ */ }
移動すると大きさが変わる理由
縦や横に移動すると、円の大きさが変わった。
この理由を説明する。
デフォルトではfarthest-corner
、つまり、「一番遠い角までの距離 = 100%」になる。
中心から離れると、「一番遠い角までの距離は大きく」なる。 よって、相対的な100%の距離は大きくなる。
よって、「中心から離れる」→「円が大きく」なる。
色を混ぜる
詳しくは線形グラデーションを参照。
テキトーにやってみる。
.sample { background-image: radial-gradient( circle at 20% 30%, transparent, red ); } div { width: 250px; }
lime
を加える。( カンマ「,
」でつなぐ。 )
.sample { background-image: radial-gradient( circle at 120% 75%, lime, transparent 60% ), radial-gradient( circle at 20% 30%, transparent, red ); } div { width: 250px; }
moccasin
を加える。
.sample { background-image: radial-gradient( transparent 30%, moccasin ), radial-gradient( circle at 120% 75%, lime, transparent 60% ), radial-gradient( circle at 20% 30%, transparent, red ); } div { width: 250px; }
イマイチやな。(そのうち芸術的なのに替えとく)