Czy możesz dodać szum do swojego gradientu CSS3?


Czy mogę dodać szum do gradientu w CSS?
Oto mój kod dla gradientu radialnego:
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));
}

Co bym do tego dodał, żeby na górze był szum, aby nadać mu teksturę?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jest to zdecydowanie najbardziej bezproblemowy i najlepszy sposób na zrobienie tego. To czysty CSS i bardzo, bardzo łatwe do wykonania, bez dodatkowych plików, nic. Ok, nie jest to najlepszy sposób, ale działa naprawdę dobrze, jest bardzo niezawodny (nigdy nie zawiódł podczas testowania w bardzo starych przeglądarkach) i ładuje się bardzo szybko.
Znalazłem go kilka miesięcy temu i używam go od tamtej pory, po prostu skopiuj i wklej ten kod do swojego CSS.
background-image: url(data:image/png;base64,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);

Następnie dodaj kolor tła
background-color:#0094d0;

Próbny:

JSFiddle
http://jsfiddle.net/NuRwW/1/
Źródło:

https://coderwall.com/p/m-uwvg
https://coderwall.com/p/m-uwvg
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Obecnie w css nie ma możliwości dodania „szumu” do tła.
Alternatywnym rozwiązaniem byłoby utworzenie przezroczystego szumu png w edytorze graficznym. Następnie zastosuj tę grafikę jako tło w tagu
& < div & >
. Następnie należy umieścić ten element
& < div & >
na całym obszarze
& < body & >
, co powinno nadać wygląd hałaśliwego gradientu.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


Tworzenie tekstur (szumów) za pomocą filtrów SVG & amp; Gradienty CSS
>
Potrzebujesz hałasu w swoim gradiencie? Szczęściarz!
Hałas Perlina
https://en.wikipedia.org/wiki/Perlin_noise
to rodzaj szumu gradientu. Standard SVG definiuje prymityw filtru o nazwie
<feTurbulence>
https://developer.mozilla.org/ ... lence
który implementuje funkcję Perlin. Pozwala na syntezę sztucznych tekstur, takich jak chmury lub marmur - tak, jak chcesz.

Krok 1: Zdefiniuj grafikę SVG
>
Utwórz mały plik SVG o nazwie
noise.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>

Ta figura definiuje dwa prostokąty. Pierwsza jest wypełniona jednolitym kolorem. Drugi jest półprzezroczysty z zastosowanym filtrem szumów. Drugi prostokąt jest nakładany na pierwszy, aby zapewnić efekt szumu.

Opcje SVG
>
  • Najbardziej oczywistą rzeczą jest to, że możesz zmienić rozmiar grafiki. Jednak właściwość CSS
    background-repeat
    może zostać użyta do wypełnienia elementu, więc 300x300 powinno być wystarczające.
  • Atrybut
    type
    filtru może mieć wartość
    fractalNoise
    lub
    turbulence
    , co definiuje funkcję filtru. Oba dają różne efekty wizualne, ale filtr szumów jest moim zdaniem nieco subtelniejszy.
  • Atrybut filtru
    baseFrequency
    może wynosić od 0,5 do 0,9, aby odpowiednio zapewnić nagłówek do drobnej tekstury. Moim zdaniem ten zakres jest wizualnie optymalny dla każdego filtra.
  • Pierwszy prostokąt
    fill
    można zmienić, aby zapewnić inny kolor podstawowy. Później jednak zasadniczo łączymy ten kolor z półprzezroczystym gradientem CSS, który również definiuje kolor (y). Więc biały jest dobrym punktem wyjścia.
  • krycie
    drugiego prostokąta może wynosić od 0,2–0,9 do ustawienia intensywności filtru, gdzie większa liczba zwiększa intensywność.

W tym momencie możesz dostosować wyżej wymienione parametry, ustawić ten wykres szumów jako obraz tła za pośrednictwem CSS i nazwać to dniem. Ale jeśli chcesz mieć gradient taki jak OP, przejdź do kroku 2.

Krok 2: zastosuj gradient CSS
>
Używając właściwości
background-image
, możesz ustawić grafikę szumową SVG jako tło dowolnego elementu i nakładki

gradient
https://developer.mozilla.org/ ... ts... W tym przykładzie zastosuję grafikę szumów do całego ciała i nakładki

gradient liniowy
https://developer.mozilla.org/ ... dient
.
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');
}

Funkcja linear-gradient () tworzy pseudoobraz, który jest nakładany na wierzch

noise.svg
... Rezultatem jest półprzezroczysty gradient, przez który prześwituje nasz szum.

Opcje CSS
>
  • Po pierwsze, i co najbardziej oczywiste, można zmienić niektóre kolory w gradiencie. Jeśli jednak chcesz mieć jednolity kolor bez gradientu, wyrównaj dwa kolory końcowe. Zaletą jest to, że możesz używać tej samej grafiki szumu z gradientem lub bez w całym serwisie lub między projektami.
  • Wiele obrazów utworzonych za pomocą functions
    * -gradient ()
    https://developer.mozilla.org/ ... dient , można nałożyć na grafikę szumową, a więcej niż dwa parametry kolorów i kąty można ustawić w jednej funkcji gradientu, aby zapewnić wszelkiego rodzaju fajne efekty wizualne.
  • Nieprzezroczystość parametrów gradientów - tj. rgba () i hsla () - można zwiększyć, aby uwydatnić dany kolor i zredukować szum. Ponownie, idealnym zakresem jest 0,2–0,9.


Wynik
>
Jest to wysoce konfigurowalne i bardzo lekkie (~ 400 bajtów) rozwiązanie, które pozwala łatwo wykryć szum o dowolnym kolorze lub gradiencie. Chociaż jest tu kilka pokręteł do przekręcenia, to dopiero początek. Istnieją inne prymitywy filtrów SVG, takie jak
<feGaussianBlur>
https://developer.mozilla.org/ ... nBlur
i
<feColorMatrix>
https://developer.mozilla.org/ ... atrix
które mogą dać dodatkowe rezultaty.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ze względu na nowość, oto czysty szum CSS bez użycia podanych identyfikatorów URI (chociaż wydaje się, że działa tylko w webkicie):
<div class="snippet-code">
<div class="snippet" data-babel="false" data-console="true" data-hide="false" data-lang="js">
<pre class="snippet-code-css lang-css prettyprint-override">
#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;
}

<pre class="snippet-code-html lang-html prettyprint-override">
<div id="box">
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Tak, obecnie nie ma podejścia opartego na CSS dla tekstur szumów. Jeśli jednak masz obsesję na punkcie podejścia programistycznego (zamiast graficznego), możesz spróbować użyć kanwy HTML5. Znajduje się tutaj samouczek dotyczący generowania szumu za pomocą JavaScript - & >

Hałas na płótnie
http://net.tutsplus.com/tutori ... nvas/
HTML5
Jednak korzystanie z podejścia Canvas spowoduje znacznie wolniejsze działanie dla odwiedzających, ponieważ a) JavaScript jest językiem interpretowanym, A B) pisanie grafiki przy użyciu JS jest bardzo wolne.
Więc jeśli nie próbujesz mówić o czymś za pomocą HTML5, będę trzymać się obrazu. Będzie to szybsze (dla Ciebie i dla użytkowników pobieranie) i będziesz mieć lepszy stopień kontroli nad wyglądem.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Chociaż nie kwalifikuje się to jako prawdziwy szum, czyste podejście CSS3 wymagałoby użycia kilku powtarzających się liniowo-liniowych selektorów tła, które są często używane w generatorach szablonów.
Oto kilka przykładów:

Przy odpowiednim połączeniu tła, kątów, przejść kolorów i przezroczystości powinien być osiągalny rozsądny efekt szumu :)
Mam nadzieję, że to i tak poprowadzi Cię we właściwym kierunku ...
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie jest możliwe (nawet gdyby tak było, wymagałoby to wielu sztuczek kodowania) generowanie tekstur szumu przy użyciu tylko CSS. Nie ma nowych właściwości CSS3, które zapewniają ten efekt po wyjęciu z pudełka. Dużo szybszym rozwiązaniem jest użycie edytora grafiki, takiego jak Photoshop.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Znalazłem sposób bez żadnego obrazu z
radial-gradient
i tylko z jednym
div
.
Najpierw chcę pokazać przykład z gradientem radialnym. Powiedzmy, że chcemy utworzyć okrąg o potrzebnych współrzędnych. Pierwsze kółko to
x = 120
y = 80
, drugie koło to
x = 20
y = 20
. Aby lepiej zrozumieć funkcję, którą napiszemy poniżej, możemy spojrzeć na ten przykład.
<div class="snippet-code">
<div class="snippet" data-babel="false" data-console="true" data-hide="false" data-lang="js">
<pre class="snippet-code-css lang-css prettyprint-override">
.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);
}

<pre class="snippet-code-html lang-html prettyprint-override">
<div class="a">
<div class="b">

Napiszemy funkcję @mixin dla tysięcy liniowych gradientów.
Funkcja SCS:
@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;
}

Za pomocą:
div {
width:400px;
height: 150px;
@include gradient(#ffad3e, 400, 150, 2500);
}

Wynik
https://codepen.io/dgknca/pen/mNOZqa
Jeśli chcemy stworzyć szum zgodnie z wartością%?
Możemy do tego użyć tej funkcji.
@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);
}

Wynik
https://codepen.io/dgknca/pen/aemELg

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się