CSS ja verkko

CSS mesh-liukuväri: näin rakennat sen säteittäisistä kerroksista

CSS:ssä ei ole mesh-gradient()-funktiota. Tässä kerrostamistapa, joka jäljittelee sitä vakuuttavasti, sumennus ja rakeisuus, jotka viimeistelevät sen, ja milloin kuva tai shader on parempi valinta.

GradientlyVahvistettu Gradiently-tili··4 min lukuaika
Kansi: August Basin · GR·Y97R·RQ

Lyhyesti

  • CSS:ssä ei ole omaa mesh-liukuvärifunktiota, joten CSS mesh -liukuväri rakennetaan pinoamalla useita säteittäisiä liukuvärejä tasaisen pohjavärin päälle.
  • Jokainen kerros on oma värilammikkonsa omassa kohdassaan, joka häipyy läpinäkyväksi, ja päällekkäisyydet luovat meshin pehmeän, moneen suuntaan kulkevan sekoituksen.
  • Pseudoelementin sumennussuodatin pehmentää lammikoita vielä lisää, ja himmeä kohinakerros piilottaa juovittumisen.
  • Staattiset kerrostetut liukuvärit piirtyvät kevyesti, mutta suuret sumennukset ja animoidut kerrokset piirtyvät usein uudelleen, joten ne kannattaa pitää hitaina, pieninä tai valinnaisina.
  • Kun suunnitelma tarvitsee monta värikohtaa, vääntyneitä muotoja tai sujuvaa liikettä koko ruudulla, viety kuva, video tai WebGL-shader on yleensä parempi työkalu.
Tällä sivulla

CSS mesh -liukuväri on tausta, jossa väri sekoittuu useaan suuntaan yhtä aikaa, ikään kuin pigmenttilammikot olisivat imeytyneet toisiinsa. CSS:ssä ei ole mesh-funktiota, ja SVG:lle luonnostellut mesh-liukuvärit eivät koskaan päätyneet selaimiin, joten verkkoversio on jäljitelmä: kolmesta viiteen radial-gradient()-kerrosta pinottuna tasaisen värin päälle, kukin häipyen väriin transparent. Huolella tehtynä se on riittävän lähellä, ettei kukaan erota eroa, painaa muutaman sata tavua ja pysyy terävänä kaikissa kooissa.

Jos haluat teoriaa ensin, eli mikä mesh on ja miksi se tuntuu orgaaniselta, lue mesh-liukuvärit. Tämä opas käsittelee sen rakentamista koodilla.

Miten kerrostamistapa toimii

Jokainen kerros on yksi värikohta. Sen paikka on at-arvo, sen ulottuvuus on häipymämatka ja sen voimakkuus on värin alfa. Koska background-imagen ensimmäinen liukuväri piirretään päälle, järjestyksellä on täällä vähemmän merkitystä kuin luulisi: jokainen kerros on enimmäkseen läpinäkyvä, joten ne sekoittuvat päällekkäisissä kohdissa. Pohjan background-color näkyy kaikkialla, minne yksikään lammikko ei yllä.

Yhden meshin neljä värikohtaa, kukin yksinään laivastonsinisellä pohjalla. Pinottuina ne sekoittuvat yhdeksi kentäksi.
css
.mesh {
  background-color: #0b1026;
  background-image:
    radial-gradient(circle at 15% 20%, rgb(124 58 237 / 0.85), transparent 55%),
    radial-gradient(circle at 85% 25%, rgb(236 72 153 / 0.75), transparent 50%),
    radial-gradient(ellipse at 60% 90%, rgb(6 182 212 / 0.7), transparent 60%),
    radial-gradient(circle at 25% 80%, rgb(245 158 11 / 0.55), transparent 45%);
}
Koko pino. Muuta yhtä at-arvoa, ja koko sommitelma tasapainottuu uudelleen.

Vaihe vaiheelta: rakenna oma CSS mesh -liukuväri

  1. 1

    Valitse pohja

    Valitse tasainen väri, joka näkyy lammikoiden välissä. Tummilla pohjilla lammikot hehkuvat, vaaleilla ne tuntuvat vesiväreiltä. Pohja on myös varavärisi, jos liukuvärit eivät toimi.

  2. 2

    Valitse kolmesta viiteen toisiinsa sopivaa väriä

    Naapurisävyt sekoittuvat puhtaasti. Vastakohdat, kuten sininen ja oranssi, kohtaavat harmaana tahrana. Mutaiset liukuvärit selittää miksi ja miten sen voi välttää.

  3. 3

    Sijoita lammikot keskustan ulkopuolelle

    Työnnä pisteitä kohti kulmia ja reunoja ja anna ainakin yhden olla osittain laatikon ulkopuolella, esimerkiksi at 110% 0%. Keskitetyt lammikot näyttävät maalitaululta.

  4. 4

    Vaihtele ulottuvuutta ja voimakkuutta

    Anna yhdelle värille suurin häipymä ja korkein alfa, jotta se johtaa. Pidä korostus pienenä ja heikompana. Yhtä suuret lammikot näyttävät mekaanisilta.

  5. 5

    Sekoita parempaan väriavaruuteen

    Lisää in oklab jokaiseen kerrokseen, esimerkiksi radial-gradient(in oklab circle at 15% 20%, ...), missä se on tuettu. Päällekkäisyydet pysyvät kirkkaampina kuin sRGB:ssä.

  6. 6

    Viimeistele rakeisuudella

    Suuret pehmeät häivytykset juovittuvat monilla näytöillä. Himmeä kohinapeite korjaa sen ja tuo painetun tunnun; katso alla.

Pehmeämmät sekoitukset sumennuksella

Säteittäiset häivytykset ovat pehmeitä, mutta niiden muodot ovat selvästi pyöreitä. Sumennus pehmentää ympyrät orgaanisemmiksi. Laita kerrokset pseudoelementille, sumenna se ja tee siitä ylisuuri negatiivisella inset-arvolla, jotta sumennetut reunat eivät häipyisi sivuun. isolation: isolate pitää negatiivisen z-indexin komponentin sisällä.

css
.mesh {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: #0b1026;
}

.mesh::before {
  content: "";
  position: absolute;
  inset: -15%;
  z-index: -1;
  background-image:
    radial-gradient(circle at 20% 25%, #7c3aed, transparent 40%),
    radial-gradient(circle at 80% 30%, #ec4899, transparent 35%),
    radial-gradient(circle at 55% 85%, #06b6d4, transparent 40%);
  filter: blur(48px);
}
Sumennettu mesh pseudoelementillä. Teksti .meshin sisällä pysyy terävänä, koska vain pseudoelementti sumennetaan.

Rakeisuuden lisääminen CSS mesh -liukuväriin

Rakeisuus tekee kaksi työtä. Se rikkoo leveissä, vähäkontrastisissa häivytyksissä näkyvät portaat ja antaa pinnalle tuntuvan, filmimäisen laadun, joka saa liukuvärit näyttämään harkituilta oletusarvojen sijaan. CSS:ssä tavallinen lähde on SVG:n feTurbulence-suodatin pienenä taustakuvana, kerrostettuna päälle matalalla peittävyydellä. Koko tekniikka on oppaassa CSS-kohinatekstuuri ja suunnitteluperustelut oppaassa rakeiset liukuvärit.

Ilman rakeisuutta

  • Näkyviä renkaita tummilla alueilla monilla näytöillä
  • Pinta näyttää tasaiselta näytön väriltä
  • Näyttää mallipohjan oletukselta

Himmeän rakeisuuden kanssa

  • Portaat rikkoutuvat ja katoavat
  • Pinta näyttää paperilta, filmiltä tai painetulta
  • Tuntuu tarkoitukselliselta ja viimeistellyltä

Mesh-liukuvärin animointi

Liukuvärin paikkoja ei voi animoida sellaisenaan, mutta rekisteröidyt mukautetut ominaisuudet voi. Määrittele jokainen liikkuva koordinaatti @property:lla, käytä sitä liukuvärin sisällä ja animoi ominaisuutta. Pidä liike hitaana ja kytke se pois niiltä, jotka pyytävät vähennettyä liikettä.

css
@property --x1 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 15%;
}

.mesh {
  background-color: #0b1026;
  background-image:
    radial-gradient(circle at var(--x1) 20%, rgb(124 58 237 / 0.85), transparent 55%),
    radial-gradient(ellipse at 60% 90%, rgb(6 182 212 / 0.7), transparent 60%);
  animation: drift 20s ease-in-out infinite alternate;
}

@keyframes drift {
  to { --x1: 55%; }
}

@media (prefers-reduced-motion: reduce) {
  .mesh { animation: none; }
}
Yksi lammikko ajelehtii yläreunaa pitkin. Lisää toinen ominaisuus jokaista liikutettavaa koordinaattia kohti.

Tämän animaation jokainen ruutu piirtää koko taustan uudelleen. Pienellä kortilla se on vähäpätöistä, koko ruudun hero-alueella se kannattaa mitata. Opas animoitu liukuväri käsittelee halvempia vaihtoehtoja, kuten ylisuuren kerroksen liikuttamisen transformilla.

Milloin käyttää kuvaa tai WebGL:ää

TapaSopii parhaitenVaro
Kerrostetut CSS-liukuväritStaattiset taustat, kortit, hero-alueet kolmella tai viidellä värilläPyöreältä näyttävät lammikot, juovittuminen ilman rakeisuutta
CSS sumennuksellaPehmeämmät, orgaanisemmat staattiset kentätUudelleenpiirron hinta, jos animoidaan tai koko muuttuu usein
Viety kuva (AVIF tai WebP)Monimutkaiset meshit, joissa on monta pistettä tai maalauksellisia muotojaTiedostopaino ja kiinteä rajaus jokaiselle formaatille
VideosilmukkaRikas liike hero-alueellaTiedostokoko, automaattisen toiston säännöt, vähennetty liike
WebGL-shaderKoko ruudun, virtaava, vuorovaikutteinen liikeKoodin monimutkaisuus, akun kulutus, varavaihtoehdot
Valitse kevein työkalu, joka vielä näyttää oikealta.

Shaderit käsitellään oppaassa WebGL-liukuvärit. Välimuoto on suunnitella tausta kerran elävänä materiaalina ja viedä se: Gradientlyn Markit ovat mesh-tyyppisiä materiaaleja, joissa on väri, rakeisuus, valo ja liike, ja niillä tehty suunnitelma viedään PNG- tai JPEG-kuvana tai saumattomana videosilmukkana, jonka kesto on viidestä kolmeenkymmeneen sekuntia.

August Basin

GR·Y97R·RQ

August Basin

Katso tämä Mark
Mark: värilammikot, materiaali ja rakeisuus piirrettynä elävästi kerrosten jäljittelyn sijaan.

Usein kysyttyä

Voiko mesh-liukuvärin tehdä pelkällä CSS:llä?

Ei natiivisti, mutta kolmen tai viiden läpinäkyväksi häipyvän säteittäisen liukuvärin pinoaminen pohjavärin päälle antaa vakuuttavan meshin. Sumennus ja kohinakerros viimeistelevät sen.

Montako säteittäistä liukuväriä CSS meshiin tarvitaan?

Kolme tai viisi riittää yleensä. Vähemmän näyttää yksinkertaiselta hehkulta, enemmän muuttuu herkästi mutaiseksi ja vaikeammin tasapainotettavaksi.

Miksi CSS mesh -liukuväri näyttää mutaiselta?

Vastakkaiset sävyt kohtaavat sRGB:ssä harmaan kautta. Käytä naapurivärejä, vähennä päällekkäisyyttä tai lisää in oklab jokaiseen kerrokseen.

Onko CSS mesh -liukuväri huono suorituskyvylle?

Staattinen on kevyt. Kustannukset kasvavat suurilla sumennussuodattimilla ja animaatiolla, koska tausta piirtyy uudelleen joka ruudulla.

Tukeeko SVG mesh-liukuvärejä?

Mesh-liukuvärit luonnosteltiin SVG 2:een, mutta selaimet eivät koskaan toteuttaneet niitä, joten verkossa niitä jäljitellään kerroksilla, käytetään kuvaa tai renderöidään WebGL:llä.

Jaa tämä opas

Kirjoittanut GradientlyVahvistettu Gradiently-tili

Gradientlyn tiimi. Gradiently on Markien ympärille rakennettu suunnittelutyökalu: eläviä liukuvärejä, joiden ansiosta kaikki suunnittelemasi näyttää omaltasi.

Katso profiilimme