Esittelyssä Shoelace, kehyksestä riippumaton komponenttipohjainen UX-kirjasto PlatoBlockchain Data Intelligence. Pystysuuntainen haku. Ai.

Esittelyssä Shoelace, kehyksestä riippumaton komponenttipohjainen UX-kirjasto

Tämä on postaus aiheesta Kengännauha, komponenttikirjasto, jonka tekijä on Cory LaViska, mutta käänteellä. Se määrittelee kaikki tavalliset UX-komponentit: välilehdet, modaalit, haitarit, automaattiset täydennykset ja paljon, paljon enemmän. Ne näyttävät kauniilta pakkauksesta otettuna, ovat saatavilla ja täysin muokattavissa. Mutta sen sijaan, että luotaisiin nämä komponentit Reactissa, Solidissa tai Sveltessä jne., se luo ne käyttämällä Web-komponentit; tämä tarkoittaa, että voit käyttää niitä Kaikki puitteissa.

Joitakin alustavia asioita

Verkkokomponentit ovat mahtavia, mutta tällä hetkellä on muutamia pieniä puutteita, jotka on huomioitava.

suhtautua

Sanoin, että ne toimivat missä tahansa JavaScript-kehyksessä, mutta kuten olen aiemmin kirjoittanut, Reactin verkkokomponenttien tuki on tällä hetkellä köyhä. Tämän ratkaisemiseksi kengännauha itse asiassa luotuja kääreitä vain Reactille.

Toinen vaihtoehto, josta pidän henkilökohtaisesti, on luoda ohut React-komponentti, joka hyväksyy verkkokomponentin tunnisteen nimen ja kaikki sen attribuutit ja ominaisuudet ja hoitaa sitten Reactin puutteet. Puhuin tästä vaihtoehdosta edellisessä virassa. Pidän tästä ratkaisusta, koska se on suunniteltu poistettavaksi. Verkkokomponenttien yhteentoimivuusongelma on tällä hetkellä korjattu Reactin kokeellisessa haarassa, joten kun se on toimitettu, kaikki käyttämäsi ohuet verkkokomponenttien yhteentoimivat komponentit voidaan etsiä ja poistaa, jolloin voit käyttää verkkokomponentteja suoraan ilman React-kääreitä.

Palvelinpuolen renderointi (SSR)

SSR:n tuki on myös heikkoa tätä kirjoitettaessa. Teoriassa on jotain ns Declarative Shadow DOM (DSD), joka mahdollistaisi SSR:n. Mutta selaimen tuki on minimaalista, ja joka tapauksessa DSD todella vaatii palvelimen tuki toimimaan oikein, mikä tarkoittaa seuraava, Remix, tai mitä tahansa, mitä satut käyttämään palvelimella, täytyy pystyä käsittelemään jotain erityistä.

On kuitenkin olemassa muita tapoja saada Web-komponentit vain työtä verkkosovelluksella, joka on SSR-käsitelty jollakin tavalla, kuten Next. Lyhyt versio on, että Web-komponentteja rekisteröivien komentosarjojen on suoritettava estävä komentosarja ennen kuin merkintäsi jäsennetään. Mutta se on toisen postauksen aihe.

Tietenkin, jos rakennat minkäänlaista asiakkaan luomaa SPA:ta, tämä ei tietenkään ole ongelma. Tämän kanssa työskentelemme tässä viestissä.

Aloitetaan

Koska haluan tämän viestin keskittyvän kengännauhaan ja sen verkkokomponenttiluonteeseen, käytän sitä Hoikka kaikesta. Aion myös käyttää tätä Stackblitz projekti esittelyä varten. Rakennamme tämän demon yhdessä, vaihe vaiheelta, mutta voit vapaasti avata REPL:n milloin tahansa nähdäksesi lopputuloksen.

Näytän sinulle, kuinka kengännauhaa käytetään, ja mikä tärkeintä, kuinka sitä muokataan. Puhumme asiasta Shadow DOM:t ja mitkä tyylit ne estävät ulkomaailmasta (ja mitkä eivät). Puhumme myös mm ::part CSS-valitsin – joka voi olla sinulle täysin uusi – ja näemme jopa, kuinka Shoelace antaa meille mahdollisuuden ohittaa ja mukauttaa sen erilaisia ​​animaatioita.

Jos huomaat, että pidät Shoelacesta tämän viestin luettuasi ja haluat kokeilla sitä React-projektissa, neuvoni on käyttää kääre kuten johdannossa mainitsin. Näin voit käyttää mitä tahansa Shoelacen osia, ja se voidaan poistaa kokonaan, kun React toimittaa jo olemassa olevat verkkokomponentin korjaukset (etsi versiosta 19).

Esittelyssä kengännauha

Kengännauha on melko yksityiskohtainen asennusohjeet. Yksinkertaisimmillaan voit tyhjentää ja tunnisteet HTML-dokumenttiisi, ja siinä se. Kaikille tuotantosovelluksille kannattaa kuitenkin todennäköisesti tuoda valikoivasti vain haluamasi, ja siihen on myös ohjeita.

Kun Shoelace on asennettu, luodaan Svelte-komponentti sisällön renderöimiseksi ja sen jälkeen mukautetaan se kokonaan. Valitakseni jotain melko ei-triviaalia, valitsin välilehdet ja valintaikkunan (jota kutsutaan yleisesti modaaliksi) komponenttien kanssa. Tässä vähän merkintää otettu suurelta osin asiakirjoista:


  General
  Custom
  Advanced
  Disabled

  This is the general tab panel.
  This is the custom tab panel.
  This is the advanced tab panel.
  This is a disabled tab panel.



  Hello World!
  



Tämä tuottaa hienoja, tyylikkäitä välilehtiä. Aktiivisen välilehden alleviivaus jopa animoituu kauniisti ja liukuu aktiivisesta välilehdestä toiseen.

Kengännauhan oletusvälilehdet

En tuhlaa aikaasi käymään läpi jokaisen tuuman API-liittymiä, jotka on jo hyvin dokumentoitu Shoelace-verkkosivustolla. Sen sijaan tarkastellaan, kuinka parhaiten vuorovaikuttaa näiden verkkokomponenttien kanssa, ja mukautetaan niitä täysin.

Vuorovaikutus API:n kanssa: menetelmät ja tapahtumat

Verkkokomponentin kutsumenetelmät ja tapahtumien tilaaminen voivat olla hieman erilaisia ​​kuin mihin olet tottunut valitsemasi normaalin kehyksen kanssa, mutta se ei ole liian monimutkaista. Katsotaanpa miten.

Välilehdet

Välilehdet-komponentti () on show menetelmä, joka näyttää tietyn välilehden manuaalisesti. Jotta voimme kutsua tätä, meidän on päästävä käsiksi välilehtidemme taustalla olevaan DOM-elementtiin. Sveltessä se tarkoittaa käyttöä bind:this. Reactissa se olisi a ref. Ja niin edelleen. Koska käytämme Svelteä, ilmoitamme muuttujamme tabs ilmentymä:


  let tabs;

…ja sitoa se:

Nyt voimme lisätä painikkeen kutsumaan sitä:

Se on sama idea tapahtumille. Siellä sl-tab-show tapahtumaa varten joka käynnistyy, kun uusi välilehti näytetään. Voisimme käyttää addEventListener meidän tabs muuttuja, tai voimme käyttää Svelten on:event-name pikakuvake.

 console.log(e)}>

Se toimii ja kirjaa tapahtumaobjektit lokiin, kun näytät eri välilehtiä.

Tapahtumaobjektin meta näkyy DevToolsissa.
Esittelyssä Shoelace, kehyksestä riippumaton komponenttipohjainen UX-kirjasto

Yleensä hahmonnamme välilehdet ja annamme käyttäjän klikata niiden välissä, joten tämä työ ei yleensä ole edes välttämätöntä, mutta se on olemassa, jos tarvitset sitä. Tehdään nyt dialogikomponentti interaktiiviseksi.

Yhteydenpito

Dialogikomponentti () vie open prop, joka ohjaa onko valintaikkuna… auki. Ilmoitetaan se Svelte-komponentissamme:


  let tabs;
  let open = false;

Siinä on myös sl-hide tapahtuma, kun valintaikkuna on piilotettu. Ohitetaan meidän open tuki ja sitoa hide tapahtuma, jotta voimme nollata sen, kun käyttäjä sulkee sen napsauttamalla valintaikkunan sisällön ulkopuolella. Ja lisätään napsautusten käsittelijä tuohon sulkemispainikkeeseen määrittääksemme open tukea false, joka myös sulkee valintaikkunan.

 open = false}>
  Hello World!
  

Lopuksi kytketään avoimen valintaikkunan painike:

Ja siinä se. Vuorovaikutus komponenttikirjaston API:n kanssa on enemmän tai vähemmän yksinkertaista. Jos kaikki tämä postaus tekisi, se olisi aika tylsää.

Mutta kengännauha – joka on rakennettu Web Componentsilla – tarkoittaa, että jotkin asiat, erityisesti tyylit, toimivat hieman eri tavalla kuin olemme tottuneet.

Mukauta kaikki tyylit!

Tätä kirjoitettaessa Shoelace on edelleen beta-vaiheessa, ja luoja harkitsee joidenkin oletustyylien muuttamista, mahdollisesti jopa joidenkin oletusasetusten poistamista kokonaan, jotta ne eivät enää ohita isäntäsovelluksesi tyylejä. Käsittelemämme käsitteet ovat olennaisia ​​kummallakin tavalla, mutta älä ihmettele, jos jotkin mainitsemistani kengännauhan yksityiskohdista ovat erilaisia, kun käytät sitä.

Vaikka Shoelacen oletustyylit ovatkin mukavia, meillä saattaa olla omat mallimme verkkosovelluksessamme, ja haluamme, että UX-komponenttimme sopivat yhteen. Katsotaanpa, miten toimisimme Web Components -maailmassa.

Emme todellakaan yritä parantaa mitä tahansa. Kengännauhan luoja on paljon parempi suunnittelija kuin minä koskaan tulen olemaan. Sen sijaan katsomme vain, miten se tehdään muuttaa asioita, jotta voit mukautua omiin verkkosovelluksiisi.

Pikakierros Shadow DOM:eista

Kurkista yhteen näistä välilehtien otsikoista DevToolsissa. sen pitäisi näyttää jotakuinkin tältä:

DevToolsissa näkyvät välilehtien komponenttien merkinnät.
Esittelyssä Shoelace, kehyksestä riippumaton komponenttipohjainen UX-kirjasto

Välilehtielementtimme on luonut a div säiliö, jossa on a .tab ja .tab--active luokka ja a tabindex, ja näyttää samalla välilehdelle kirjoittamamme tekstin. Mutta huomaa, että se istuu a:n sisällä varjojuuri. Tämän ansiosta Web-komponenttien tekijät voivat lisätä omia merkintöjä Web-komponenttiin ja tarjota samalla paikan sisällölle we tarjota. Huomaa, elementti? Tämä tarkoittaa pohjimmiltaan "laita mitä tahansa sisältöä, jonka käyttäjä tuottaa välillä Web Component -tunnisteet tätä"

Joten komponentti luo varjojuuren, lisää siihen sisältöä näyttääkseen kauniisti muotoillun välilehden otsikon sekä paikkamerkin (), joka tuo sisältömme sisälle.

Kapseloidut tyylit

Yksi klassisista, turhauttavimmista ongelmista verkkokehityksessä on aina ollut tyylit CSS paikkoihin, joihin emme halua niitä. Saatat olla huolissasi siitä, että kaikki sovelluksemme tyylisäännöt määrittelevät jotain vastaavaa div.tab häiritsisi näitä välilehtiä. Osoittautuu, että tämä ei ole ongelma; varjojuuret kapseloivat tyylejä. Varjojuuren ulkopuolelta tulevat tyylit eivät vaikuta varjojuuren sisäpuolelle (joitakin poikkeuksia lukuun ottamatta, joista puhumme) ja päinvastoin.

Poikkeuksena tähän ovat perinnölliset tyylit. Sinun ei tietenkään tarvitse hakea a font-family tyyli jokaiselle verkkosovelluksesi elementille. Sen sijaan voit määrittää omasi font-family kerran, päällä :root or html ja periä se kaikkialla sen alla. Tämä perintö itse asiassa lävistää myös varjojuuren.

CSS:n mukautetut ominaisuudet (kutsutaan usein "css-muuttujiksi") ovat asiaan liittyvä poikkeus. Varjojuuri voi ehdottomasti lukea CSS-ominaisuuden, joka on määritelty varjojuuren ulkopuolella; tästä tulee hetkessä ajankohtainen.

- ::part valitsin

Entäs ne tyylit älä periä. Entä jos haluamme mukauttaa jotain vastaavaa cursor, joka ei peri, johonkin varjojuuren sisällä. Onko meillä huono tuuri? Osoittautuu, että emme ole. Katso vielä kerran yllä olevaa välilehtielementin kuvaa ja sen varjojuurta. Huomaa, part attribuutti div? Tämän avulla voit kohdistaa ja tyylittää kyseisen elementin varjojuuren ulkopuolelta käyttämällä ::part valitsin. Käymme läpi esimerkki on hieman.

Ylivoimaiset kengännauhatyylit

Katsotaanpa jokainen näistä lähestymistavoista toiminnassa. Tästä lähtien, paljon kengännauhatyylit, mukaan lukien kirjasimet, saavat oletusarvot mukautetuista CSS-ominaisuuksista. Kohdista nämä fontit sovelluksesi tyylien kanssa ohittamalla kyseiset mukautetut rekvisiitta. Katso asiakirjat saadaksesi tietoa siitä, mitä CSS-muuttujia Shoelace käyttää, tai voit yksinkertaisesti tarkastella tyylejä missä tahansa DevToolsin elementissä.

Tyylien periminen varjojuuren kautta

Avaa app.css Tiedosto src hakemistosta StackBlitz-projekti. Vuonna :root alareunassa, sinun pitäisi nähdä a letter-spacing: normal; ilmoitus. Koska letter-spacing ominaisuus on periytyvä, yritä asettaa uusi arvo, esim 2px. Tallennettaessa kaikki sisältö, mukaan lukien varjojuuressa määritetyt välilehtien otsikot, mukautuu vastaavasti.

Neljä vaakasuuntaista välilehden otsikkoa, joista ensimmäinen on aktiivinen sinisenä ja plqceholder-sisältö alla olevassa paneelissa. Tekstiä on hieman venytetty kirjainvälillä.
Esittelyssä Shoelace, kehyksestä riippumaton komponenttipohjainen UX-kirjasto

Kengännauhan CSS-muuttujien korvaaminen

- komponentti lukee an --indicator-color Muokattu CSS-ominaisuus aktiivisen välilehden alleviivaukselle. Voimme ohittaa tämän jollain perus-CSS:llä:

sl-tab-group {
  --indicator-color: green;
}

Ja juuri niin, meillä on nyt vihreä indikaattori!

Neljä vaakasuuntaista välilehden otsikkoa, joista ensimmäinen aktiivinen sinisellä tekstillä ja vihreällä alleviivauksella.
Esittelyssä Shoelace, kehyksestä riippumaton komponenttipohjainen UX-kirjasto

Osien kyseleminen

Tällä hetkellä käyttämässäni Shoelace-versiossa (2.0.0-beta.83) kaikilla ei-käytöstä olevilla välilehdillä on pointer kohdistin. Muutetaan se aktiivisen (valitun) välilehden oletuskohdistimeksi. Näimme jo, että elementti lisää a part="base" attribuutti välilehden otsikon säilössä. Myös tällä hetkellä valittu välilehti vastaanottaa active attribuutti. Kohdistetaan aktiivinen välilehti näiden tietojen avulla ja vaihdetaan kohdistinta:

sl-tab[active]::part(base) {
  cursor: default;
}

Ja se on se!

Animaatioiden mukauttaminen

Kuvituksena metaforisen kakun päällä katsotaanpa, kuinka Shoelace antaa meille mahdollisuuden muokata animaatioita. Kengännauha käyttää Web Animations API, ja paljastaa a setDefaultAnimation API hallita, kuinka eri elementit animoivat eri vuorovaikutustaan. Katso tarkemmat tiedot asiakirjoista, mutta esimerkkinä tässä, kuinka voit muuttaa Shoelacen oletusvalintaikkunan animaatiota ulospäin laajenevasta ja sisäänpäin kutistuvasta animaatiosta sen sijaan, että se animoituu ylhäältä ja pudotetaan alas piilossa.

import { setDefaultAnimation } from "@shoelace-style/shoelace/dist/utilities/animation-registry";

setDefaultAnimation("dialog.show", {
  keyframes: [
    { opacity: 0, transform: "translate3d(0px, -20px, 0px)" },
    { opacity: 1, transform: "translate3d(0px, 0px, 0px)" },
  ],
  options: { duration: 250, easing: "cubic-bezier(0.785, 0.135, 0.150, 0.860)" },
});
setDefaultAnimation("dialog.hide", {
  keyframes: [
    { opacity: 1, transform: "translate3d(0px, 0px, 0px)" },
    { opacity: 0, transform: "translate3d(0px, 20px, 0px)" },
  ],
  options: { duration: 200, easing: "cubic-bezier(0.785, 0.135, 0.150, 0.860)" },
});

Se koodi on siinä App.svelte tiedosto. Kommentoi se nähdäksesi alkuperäisen oletusanimaation.

Käärimistä

Shoelace on uskomattoman kunnianhimoinen komponenttikirjasto, joka on rakennettu Web Componentsilla. Koska Web-komponentit ovat puitteista riippumattomia, niitä voidaan käyttää missä tahansa projektissa missä tahansa kehyksessä. Uusien kehysten alkaessa ilmestyä sekä uskomattomilla suorituskykyominaisuuksilla että helppokäyttöisyydellä, kyky käyttää laadukkaita käyttökokemuksen widgetejä, jotka eivät ole sidottu mihinkään kehyksiin, ei ole koskaan ollut houkuttelevampaa.

Aikaleima:

Lisää aiheesta CSS-temppuja