Kuidas kasutada CSS-i suhtelisi värve, et saada JavaScripti lõplik kuuskantvärv

Kuidas kasutada CSS-i suhtelisi värve, et saada JavaScripti lõplik kuuskantvärv
Kuidas kasutada CSS-i suhtelisi värve, et saada JavaScripti lõplik kuuskantvärv

JavaScriptis CSS-i suhteliste värvidega töötamise mõistmine

CSS-i suhtelised värvid annavad arendajatele rohkem stiilipaindlikkust, võimaldades neil värve dünaamiliselt muuta olemasolevate värviväärtuste alusel. Näiteks võite soovida muuta nii värvi alfa-läbipaistvust kui ka selle punaseid ja siniseid kanaleid. Selle tehnika tõttu on vedeliku disainisüsteemidel rohkem võimalusi.

Nende dünaamiliselt genereeritud andmetega JavaScriptis töötamine võib aga olla keeruline. Kui proovite kasutada getComputedStyle arvutatud värvi hankimiseks võib see teie tehtud CSS-i muudatuste parandamise asemel tagastada töötlemata stringi. See piirab lõpliku väljundvärvi programmilist manipuleerimist ja analüüsi.

Selles artiklis uurime CSS-ist täieliku arvutatud kuueteistkümnendvärvi saamise protsessi, olenemata sellest, kas see on määratletud keerukate CSS-i suhtelised värvid süntaks. Me tegeleme probleemiga, kuidas saada täpset värviväärtust, kui CSS-mootor on arvutanud RGB- ja alfakanalite suhtelised muudatused.

Uurime ka muid võimalikke valikuid, näiteks mis tahes kolmanda osapoole teeke või sisseehitatud brauseri API-sid, mis aitavad teil seda värviteavet ekstraheerida vormingus, mida saab kasutada JavaScripti koodis, et seda edasi muuta.

Käsk Kasutusnäide
getComputedStyle Pärast kogu CSS-i rakendamist hangib see käsk elemendi tegelikud arvutatud stiilid. See on kasulik dünaamiliste CSS-i väärtuste saamiseks suhtelistest väärtustest, näiteks värvist.
createElement('canvas') Kasutab a. dünaamiliseks loomiseks JavaScripti element, mida saab kasutada piksliandmete muutmiseks või teisendamiseks, näiteks CSS-i värvide muutmiseks kuueteistkümnendväärtusteks.
getContext('2d') Selle käsu abil saab skript joonistada või töötada pildiandmetega piksli tasemel, lisada värve jne, hankides 2D-joonistamise konteksti. .
fillStyle Määrab lõuendile rakendatava mustri, värvi või gradiendi. Näidetes kasutatakse seda lõuendi arvutatud värvi määramiseks enne piksliandmete ekstraheerimist.
fillRect Kasutab praegust täitmisstiili, et täita lõuendil ristkülikukujuline ala. Siin täidab arvutatud värv täiendavaks töötlemiseks 1x1 piksli suuruse piirkonna.
getImageData Selle käsuga ekstraheeritakse lõuendi piksliandmed. Seda kasutatakse fillRecti loodud 1x1 pikslis renderdatud värvi RGBA väärtuste saamiseks.
chroma Kolmanda osapoole teek värvide muutmiseks kannab nime Chroma.js. Meetod chroma() muudab arvutatud CSS-värvidega töötamise lihtsamaks, teisendades värve mitme vormingu (nt RGB ja hex) vahel.
toString(16) Teisendab täisarvu selle esituseks kuueteistkümnendsüsteemis, mis on oluline RGB väärtuste teisendamiseks kuueteistkümnendsüsteemiks. Sel juhul kasutatakse seda punase, rohelise ja sinise väärtuste segamiseks, et luua lõplik hex värvikood.
slice(1) Eemaldab stringi algmärgi. Slice(1) eemaldab arvust üleliigse algusmärgi enne kuueteistkümnendsüsteemi teisendamist, tagades kuueteistkümnendsüsteemi korrektse vormingu.

JavaScript: CSS-i suhteliste värvide kasutamine lõpliku kuueteistkümnendiku värvi eraldamiseks

Esimeses skriptis kasutasime brauseri sisseehitatud funktsioone kasutades JavaScripti CSS-is dünaamiliselt arvutatud värvide hankimiseks ja nendega töötamiseks. Peamine probleem on selles, et CSS-i suhtelised värvid võimaldab muutuva värvikanali reguleerimist, mida tavapärasemate tehnikate kasutamisel väljundis ei kuvata getComputedStyle. Me töötame välja lahenduse, kasutades a lõuend element. Võime saada täpsed RGB-väärtused, renderdades arvutatud värvi lõuendile, mille mõõtmed on 1x1 pikslit. Lõuendi API võime manipuleerida pildiandmetega pikslite tasemel, sealhulgas värvidega, teeb selle protsessi võimalikuks.

Iga piksli RGBA väärtused eraldab hankigeImageData meetod, kui värv on lõuendile kantud. Järgmisena teisendatakse need väärtused kuueteistkümnendvormingusse, kasutades arvudest stringi teisendusi ja bitipõhiseid toiminguid JavaScriptis. Siin on olulised juhised, näiteks fillRect ja getContext('2d'), vastutavad värvi genereerimise ja joonistatava pinna loomise eest. Kui me nõuame täpset värvi, mida brauser renderdab vastavalt CSS reeglid, sealhulgas kõik läbipaistvuse või värvikanalite kohandused, töötab see tehnika hästi. See on suurepärane meetod probleemi lahendamiseks ilma teisi teeke kasutamata.

Teise meetodi puhul lihtsustasime värvidega manipuleerimist, kasutades kolmanda osapoole tööriista nimega Chroma.js. Värve saab hõlpsasti teisendada erinevate vormingute vahel, kasutades Chroma.js-i, mis pakub värvidega suhtlemiseks abstraktsemat meetodit. Chroma.js tegeleb automaatselt teisendamisega hex- või muudesse vormingutesse, nagu RGB või HSL, kui arvutatud värv on DOM-ist hangitud. Kui töötate projektidega, mis nõuavad keerukamaid värvide kohandamist või vormingu teisendamist, on see lähenemisviis täiuslik. Tänu sellele on kood muutunud lihtsamaks, puhtamaks ja hõlpsamini hooldatavaks.

Ehkki vastupidisest vaatenurgast, tegelevad mõlemad strateegiad sama probleemiga. Lõpliku heksaalvärvi määramiseks kasutab esimene bitipõhiseid arvutusi ja natiivseid brauseri API-sid, samas kui teine ​​kasutab ära spetsiaalse värvitöötluspaketi võimalusi. Sõltuvalt teie projekti vajadustest saate kasutada Chroma.js-i suurema paindlikkuse ja kasutuslihtsuse tagamiseks või kasutada natiivset meetodit, et vältida sõltuvuste lisamist. JavaScript võimaldab mõlemas stsenaariumis allalaaditud hex värvi täiendavat manipuleerimist, pakkudes võimalusi dünaamilisteks stiilideks ja värvipõhisteks animatsioonideks.

Lõpliku kuueteistkümnendiku värvi eraldamine CSS-i suhtelistest värvidest JavaScripti abil

See meetod manipuleerib CSS-i suhtelisi värve, kasutades sisseehitatud brauseri API-sid ja vanilje JavaScripti.

// 1. First, grab the element whose color you want to extract
const element = document.querySelector('.my-element');

// 2. Use getComputedStyle to get the color property
let computedColor = getComputedStyle(element).color;

// 3. Create a canvas to convert the computed color to hex format
let canvas = document.createElement('canvas');
canvas.width = 1; // Small canvas, just for color conversion
canvas.height = 1;
let ctx = canvas.getContext('2d');

// 4. Set the fill style to the computed color and fill the canvas
ctx.fillStyle = computedColor;
ctx.fillRect(0, 0, 1, 1);

// 5. Extract the color in hex format using getImageData
let pixelData = ctx.getImageData(0, 0, 1, 1).data;
let hexColor = "#" +
  ((1 << 24) | (pixelData[0] << 16) | (pixelData[1] << 8) | pixelData[2])
    .toString(16)
    .slice(1); // Convert to hex and remove the alpha

console.log(hexColor); // This will log the final hex color value

Kolmanda osapoole teegi (Chroma.js) kasutamine hex-värvide teisendamiseks

See lähenemisviis tagab värvidega manipuleerimise täpsuse ja paindlikkuse, kasutades protsessi lihtsamaks muutmiseks paketti Chroma.js.

// 1. First, include Chroma.js in your project (e.g., via CDN or NPM)
// <script src="https://cdnjs.cloudflare.com/ajax/libs/chroma-js/2.1.0/chroma.min.js">
const element = document.querySelector('.my-element');

// 2. Retrieve the computed color using getComputedStyle
let computedColor = getComputedStyle(element).color;

// 3. Use Chroma.js to convert the computed color to hex
let chromaColor = chroma(computedColor);
let hexColor = chromaColor.hex();

console.log(hexColor); // Log the final hex color

// Chroma.js also supports other formats such as RGB or HSL
let rgbColor = chromaColor.rgb();
let hslColor = chromaColor.hsl();

console.log(rgbColor); // Logs RGB array
console.log(hslColor); // Logs HSL array

Seadme test: lõpliku värviväljundi kontrollimine

See ühiktest tagab, et JavaScripti lahenduste poolt tagastatud lõplik kuuskantvärv on õige.

describe('Color Extraction Tests', () => {
  it('should return the correct hex color using canvas', () => {
    let color = getHexColorFromCanvas('.my-element');
    expect(color).toBe('#e6aabb'); // Expected final hex color
  });

  it('should return the correct hex color using Chroma.js', () => {
    let color = getHexColorUsingChroma('.my-element');
    expect(color).toBe('#e6aabb'); // Expected final hex color
  });
});

// Functions used for the tests
function getHexColorFromCanvas(selector) {
  const element = document.querySelector(selector);
  let computedColor = getComputedStyle(element).color;
  let canvas = document.createElement('canvas');
  canvas.width = 1;
  canvas.height = 1;
  let ctx = canvas.getContext('2d');
  ctx.fillStyle = computedColor;
  ctx.fillRect(0, 0, 1, 1);
  let pixelData = ctx.getImageData(0, 0, 1, 1).data;
  return "#" + ((1 << 24) | (pixelData[0] << 16) | (pixelData[1] << 8) | pixelData[2]).toString(16).slice(1);
}

function getHexColorUsingChroma(selector) {
  const element = document.querySelector(selector);
  let computedColor = getComputedStyle(element).color;
  return chroma(computedColor).hex();
}

Täiustatud tehnikad CSS-i suhteliste värvide käsitlemiseks JavaScriptis

Muutujate kasutamine dünaamiliste värvimuutuste saavutamiseks on tugev, kuid mõnikord tähelepanuta jäetud omadus CSS-i suhtelised värvid. Näiteks võite kasutada JavaScripti põhivärve esindavate CSS-i muutujate loomiseks ja nende muutmiseks reaalajas, võimaldades reageerivaid disainisüsteeme ja dünaamilisi teemasid. See meetod võimaldab skaleeritavaid ja hooldatavaid värviskeeme kaasaegsetes võrgurakendustes, kui seda kasutatakse koos CSS-i suhteliste värvifunktsioonidega.

CSS-tüüpi objektimudeli (Typed OM) kasutamine on täiendav meetod lõpliku arvutatud värvi saamise probleemi lahendamiseks. Arendajad saavad tänu Typed OM-ile töötada CSS-i atribuutidega programmilisemalt ja süstemaatilisemalt. CSS-i väärtustele pääseb nüüd juurde JavaScripti objektidena tänu Typed OM-ile, mis välistab vajaduse stringipõhiste meetodite järele. Suhtelised värvid ja muu keerulised CSS-teisendused sellest kasu, kuna see annab täpsema kontrolli varaga manipuleerimise üle.

Lõpuks, kui soovite jälgida elementide stiilide muutusi, eriti kui CSS-i muutujaid või suhtelisi värviväärtusi muudetakse dünaamiliselt, mõelge JavaScripti kasutamisele. MutationObserver. MutationObserver saab jälgida DOM-i muudatusi, näiteks elemendi siseste stiilide kohandusi. Saate panna JavaScripti loogika värvi ümber arvutama ja värskendama seda vastavalt kohaldatavatele stiilimuudatustele. See tehnika töötab eriti hästi väga dünaamiliste liideste puhul, kus stiilimuutused toimuvad regulaarselt vastusena kasutaja või väliste allikate sisenditele.

Korduma kippuvad küsimused CSS-i suhteliste värvide eraldamise kohta JavaScriptis

  1. Kuidas teeb getComputedStyle suhteliste värvidega tegelemisel?
  2. getComputedStyle saab lõpliku väärtuse, mille alusel CSS-i atribuut on arvutatud; sellegipoolest tagastab see sageli suhtelise värvi stringina, mitte lõpliku arvutatud värvina.
  3. Kas lõplik värv on ekstraheeritav a canvas kas element töötab minu jaoks?
  4. Jah, värvi on võimalik renderdada ja eraldada piksliandmeid, et saada lõplikku hex värvi, kasutades väikest canvas ja getContext('2d') lähenemine.
  5. Mis on roll chroma.js selles protsessis?
  6. Five muudab värvidega töötamise erinevates vormingutes lihtsamaks ja muudab värvide teisendamise lihtsamaks. Näiteks saate kiiresti teisendada RGB hex-vormingusse.
  7. Milleks kasutatakse CSS-i suhtelisi värve?
  8. Arendajad saavad tundlike kujunduste jaoks rakendada alfa-läbipaistvust ja dünaamiliselt muuta värvikanaleid, suurendades või vähendades RGB väärtusi, kasutades CSS-i suhtelisi värve.
  9. Kas ma saan JavaScripti abil stiilimuutusi tuvastada?
  10. Jah, saate värve vastavalt vajadusele ümber arvutada ja stiilimuutusi reaalajas kuulata, kasutades nuppu 7 API.

Viimased mõtted CSS-i suhteliste värvide ekstraheerimise kohta JavaScriptis

CSS-i suhteliste värvide põhjal võib lõpliku värvi määramine olla keeruline, kuna getComputedStyle annab sageli ainult algse stringi. Seda meetodit saab palju lihtsamaks muuta, kasutades teeki nagu Chroma.js või a lõuend piksliandmete ekstraheerimiseks.

Arendajad saavad JavaScripti tööriistu ja API-sid kasutades neid värve tõhusalt ekstraheerida, muuta ja rakendada. Skaleeritavaid meetodeid CSS-i suhteliste värviväljundite dünaamiliseks haldamiseks pakuvad nii omalahendused kui ka kolmanda osapoole teegid, olenevalt teie projekti vajadustest.

Allikad ja viited
  1. Täpsustatakse selle kasutamist getComputedStyle meetod CSS-i atribuutide ekstraheerimiseks JavaScriptis. Lisalugemiseks külastage: MDN-i veebidokumendid: getComputedStyle .
  2. Selgitab selle kasutamist lõuend element pikslite värviandmete eraldamiseks JavaScriptis. Üksikasjalik teave on saadaval aadressil: MDN Web Docs: pikslitega manipuleerimine lõuendiga .
  3. Chroma.js dokumentatsioon sisaldab üksikasju JavaScriptis värvide teisendamise ja manipuleerimise kohta. Lisateavet leiate siit: Chroma.js ametlik dokumentatsioon .
  4. CSS-i suhteliste värvide ja nende rakenduste ülevaated leiate CSS-i spetsifikatsioonidest: CSS-i värvimooduli tase 4 .