CSSのグラデーションにノイズを追加することは可能ですか?
放射状グラデーションのコードは次のとおりです。
body {
color: #575757;
font: 14px/21px Arial, Helvetica, sans-serif;
background-color: #2f3b4b;
background: -moz-radial-gradient(center 45deg, circle closest-corner, #2f3b4b 0%, #3e4f63 100%);
background: -webkit-gradient(radial, center center, 10, center center, 900, from(#2f3b4b), to(#3e4f63));
}
その上にノイズを加え、テクスチャを与えるために何を追加しますか?
Cssには、背景に「ノイズ」を追加する現在の方法はありません。
別の解決策は、グラフィックエディターで透明なノイズpngを作成することです。次に、そのグラフィックを背景として<div>
に適用します。次に、<div>
の全領域に<body>
を配置する必要があります。これにより、ノイズのあるグラデーションが表示されます。
これは、これを実装する最も手間のかからない最良の方法です。これは純粋にCSSであり、非常に簡単に実行でき、余分なファイルはありません-何もありません。 OK、それは可能な限り最良の方法ではありませんが、非常にうまく機能し、非常に信頼性が高く(非常に古いブラウザーでテストしても失敗しません)、非常に高速にロードされます。
数か月前に見つけて、それを使用してから、このコードをコピーしてCSSに貼り付けてください。
background-image: url(data:image/png;base64,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);
次に、背景色を追加します
background-color:#0094d0;
デモ: JSFiddle
目新しさのために、データURIを使用しない純粋なCSSノイズを以下に示します(ただし、Webkitでのみ機能するようです)。
#box {
width:250px;
height:250px;
position:relative;
background-size:55px 10px;
background-repeat: repeat;
background-image: -webkit-repeating-radial-gradient(1% 21%, closest-corner, rgba(255,0,255,.5), rgba(0,255,255,.5), rgba(0,0,0,1) 1.7%), -webkit-repeating-radial-gradient(51% 51%, closest-corner, rgba(255,255,255,1), rgba(255,255,255,1), rgba(0,255,0,1) 10%);
}
#box::before {
content:'';
width:100%;
height:100%;
position:absolute;
mix-blend-mode:exclusion;
background-size:12px 22px;
background-repeat: repeat;
background-image: -webkit-repeating-radial-gradient(61% 21%, closest-corner, rgba(255,255,255,1), rgba(0,255,0,.5), rgba(3,0,255,1) 20%), -webkit-repeating-radial-gradient(91% 51%, closest-corner, rgba(255,255,255,1), rgba(255,255,1,.5), rgba(055,255,255,1) 20%);
left:0;
z-index:998;
}
#box::after {
content:'';
width:100%;
height:100%;
position:absolute;
mix-blend-mode:exclusion;
background-size:15px 13px;
background-repeat: repeat;
background-image: -webkit-repeating-radial-gradient(21% 21%, closest-corner, rgba(255,255,255,1), rgba(0,0,255,.5), rgba(3,0,255,1) 20%);
left:0;
top:0;
z-index:999;
}
<div id="box"></div>
グラデーションにノイズが必要ですか?あなたは幸運です!
Perlin noise は勾配ノイズの一種です。 SVG標準では、Perlin関数を実装する _<feTurbulence>
_ というフィルタープリミティブが指定されています。雲や大理石などの人工的なテクスチャを合成することができます。これは希望するノイズです。
_noise.svg
_という小さなSVGファイルを作成します。
_<svg
xmlns='http://www.w3.org/2000/svg'
xmlns:xlink='http://www.w3.org/1999/xlink'
width='300' height='300'>
<filter id='n' x='0' y='0'>
<feTurbulence
type='fractalNoise'
baseFrequency='0.75'
stitchTiles='stitch'/>
</filter>
<rect width='300' height='300' fill='#fff'/>
<rect width='300' height='300' filter="url(#n)" opacity='0.80'/>
</svg>
_
この図は、2つの長方形を定義しています。最初のものは単色で塗りつぶされています。 2つ目は、ノイズフィルタが適用された半透明です。 2番目の長方形は、ノイズ効果を提供するために最初の長方形にオーバーレイされます。
最初の、そして最も明白なのは、グラフィックの寸法を変更できることです。ただし、CSS _background-repeat
_プロパティを使用して要素を埋めることができるため、300×300で十分です。
フィルターのtype
属性には、フィルター関数を指定するfractalNoise
またはturbulence
を指定できます。どちらも視覚的には異なりますが、私の意見では、ノイズフィルターはもう少し微妙です。
フィルターのbaseFrequency
属性の範囲はそれぞれ0.5〜0.9で、細かいテクスチャーのコースを提供します。私の意見では、この範囲はどちらのフィルターにも視覚的に最適です。
最初の長方形のfill
は、異なるベースカラーを提供するために変更できます。ただし、後で、基本的にこの色と半透明のCSSグラデーションを組み合わせて、色も定義します。ですから、ここから白が良い出発点です。
2番目の四角形のopacity
の範囲は0.2〜0.9で、フィルターの強度を設定します。値を大きくすると強度が上がります。
この時点で、前述のオプションを微調整し、CSSを介してこのノイズグラフィックを背景画像として設定し、1日と呼ぶことができます。ただし、OPのようなグラデーションが必要な場合は、手順2に進みます。
_background-image
_ プロパティを使用して、SVGノイズグラフィックを要素の背景として設定し、 gradient をオーバーレイできます。この例では、ノイズグラフィックを身体全体に適用し、 linear gradient をオーバーレイします。
_body {
/* white to black linear noise gradient spanning from top to bottom */
background:
linear-gradient(rgba(255,255,255,.5), rgba(0,0,0,.5)),
url('noise.svg');
}
_
linear-gradient()関数は、noise.svgの上にスタックされる擬似画像を作成します。結果は、ノイズが透けて見える半透明のグラデーションです。
まず、最も明白なのは、定義されたグラデーションの色を変更できることです。ただし、グラデーションのない単色が必要な場合は、2つの終点の色を等しくします。利点は、サイト全体またはプロジェクト間でグラデーションを使用してもしなくても、同じノイズグラフィックを使用できることです。
*-gradient()
functions で作成された複数の画像は、ノイズグラフィックにオーバーレイでき、3つ以上の色パラメーターと角度を単一のグラデーション関数で指定して、あらゆる種類のクールなビジュアル。
グラデーションパラメーターの不透明度。 rgba()およびhsla()-定義された色を強調し、ノイズレベルを下げるために増やすことができます。繰り返しますが、0.2〜0.9は理想的な範囲です。
これは、高度にカスタマイズ可能で非常に軽量な(〜400バイト)ソリューションであり、任意の色またはグラデーションのノイズを簡単に定義できます。ここにはいくつかのノブがありますが、これはほんの始まりにすぎません。 _<feGaussianBlur>
_ や _<feColorMatrix>
_ など、他のSVGフィルタープリミティブがあり、追加の結果を提供できます。
はい。現在、ノイズテクスチャに対するCSSベースのアプローチはありません。ただし、(画像ベースではなく)プログラムによるアプローチに苦労している場合は、HTML5キャンバスを使用してみてください。 JavaScriptを使用してノイズを生成する方法に関するチュートリアルがここにあります-> HTML5キャンバスでのノイズの作成
ただし、Canvasアプローチを実行すると、A)JavaScriptはインタープリター言語であり、B)JSを使用したグラフィックスの書き込みは非常に遅いため、訪問者のエクスペリエンスが大幅に遅くなります。
したがって、HTML5を使用してポイントを獲得しようとしているのでない限り、私はイメージに固執します。作成が速くなり、ユーザーが読み込むのが速くなり、外観をより細かく制御できるようになります。
これは真のノイズとはみなされませんが、純粋なCSS3アプローチでは、パターンジェネレーターでよく使用される複数の繰り返し線形バックグラウンドセレクターを使用します。
以下に例を示します。
背景、角度、色のストップ、透明度の適切な組み合わせにより、合理的なノイズのような効果が得られるはずです:)
とにかく正しい方向にあなたを設定することを願っています...
CSSのみを使用してノイズテクスチャを生成することはできません(たとえそうであったとしても、コードトリックのごまかしが必要です)。この種の効果をすぐに提供する新しいCSS3プロパティはありません。より迅速な解決策は、Photoshopなどのグラフィックエディターを使用して行うことです。
radial-gradient
とdiv
が1つだけの画像なしの方法を見つけました。
まず、放射状グラデーションの例を示します。必要な座標で円を作成するとします。最初の円はx=120
y=80
、2番目の円はx=20
y=20
です。以下に記述する関数をよりよく理解するために、この例を検討できます。
.a {
border:1px solid blue;
width:500px;
height:200px;
background: radial-gradient(circle at 120px 80px, red 0px 10px, transparent 10px 100px);
}
.b {
border:1px solid red;
width:500px;
height:200px;
background: radial-gradient(circle at 20px 20px, blue 0px 10px, transparent 10px 100px);
}
<div class="a"></div>
<div class="b"></div>
数千のライングラデーション用の@mixin関数を作成します。
SCSS関数:
@mixin gradient($color, $width, $height, $noiseCount) {
$value: ();
@for $i from 1 through $noiseCount {
$gradient: radial-gradient(
circle at #{random($width)}px #{random($height)}px,
$color 0px,
$color 1px,
transparent 1px,
transparent 100%
);
$value: append($value, $gradient, comma);
}
background: $value;
}
使用法:
div {
width:400px;
height: 150px;
@include gradient(#ffad3e, 400, 150, 2500);
}
%値に従ってノイズを作成したい場合は?
このためにこの関数を使用できます。
@mixin gradient($color, $width, $height, $noiseCount) {
$value: ();
@for $i from 1 through $noiseCount {
$gradient: radial-gradient(
circle at #{(random($width * 10)) / 10}% #{random($height)}px,
$color 0px,
$color 1px,
transparent 1px,
transparent 100%
);
$value: append($value, $gradient, comma);
}
background: $value;
}
div {
width:100%;
height: 150px;
@include gradient(#ffad3e, 100, 150, 2500);
}