Hjemmeside » Coding » Sådan oprettes en switch-brugerflade med CSS-mask

    Sådan oprettes en switch-brugerflade med CSS-mask

    Ved billedbehandling, maskering er en teknik, der giver dig mulighed for skjul et billede med en anden. En maske bruges til at lave en del af et billede se igennem. Du kan udføre maskering ved hjælp af CSS ved hjælp af maskeringsegenskaber.

    I dagens post skaber vi et maskeret billede ved at bruge to PNG-billeder og CSS-maskeringsteknikker, og tillade brugere at håndtere de to tilstande af billedet (dag og nat) ved hjælp af en switch UI.

    På grund af nogle problemer med browserkompatibilitet - ikke alle maskeringsegenskaber understøttes i hver browser (fra juni 2016) - jeg vil vise to teknikker til tilføjelse af masker, en til webkitbaserede browsere og en til Firefox. De to første trin i denne tre-trins vejledning er de samme for hver browser, men der vil være en forskel i det tredje trin.

    Trin 1. Opret en grundlæggende switch

    Da en typisk switch har to tilstande med kun en aktiveret på et tidspunkt kan du bruge en radio knap gruppe på to at skabe switchens arbejdskomponenter. Placer hver radioknap i venstre og højre ende af deres overordnede element.

    Radio knap grupper er skabt ved at give hver radioknap det samme navn attribut. I en radioknapgruppe, kun en radioknap kan kontrolleres ad gangen.

    Vi starter med følgende HTML og CSS:

    HTML

    CSS

    I CSS nedenfor brugte jeg absolut positionering til at placere radioknapperne på skærmen præcis, hvor jeg vil.

    #outerWrapper bredde: 450px; højde: 90px; polstring: 10px; margin: 100px auto 0 auto; grænse-radius: 55px; box-skygge: 0 0 10px 6px #EAEBED; baggrund: #fff;  #innerWrapper højde: 100%; border-radius: gange 45 px; overflow: hidden; position: relative;  .radio bredde: 90px; højde: 100%; position: absolut; margin: 0; opacitet: 0;  #rightRadio højre: 0;  .radio: ikke (: tjekket) cursor: pointer;  

    Jeg tilføjede opacitet: 0 regere til .radio klasse for at kunne skjul radioknapperne. Den sidste regel i kodeblokken nedenfor, markør: pointer; viser markørmarkøren for den ukontrollerede radioknap, så brugerne ved, hvilken knap der skal klikkes for at skifte omskifter tilstand.

    Skærmbillede af switch-brugergrænsefladen med radioknapper i Chrome-browseren

    Trin 2. Tilføj skind til kontakten

    I dette trin tilføjer vi to

    tags til de to skind under radioknapperne i vores HTML-fil og et baggrundsbillede til hver hud i vores CSS.

    Jeg bruger "Day" og "Night" som de to state of the switch, inspireret af et Dribbble shot af Minh Killy Le.

    Day Skin
    Nat hud

    HTML

    CSS

    #daySkin baggrundsbillede: url ('day.png');  # nightSkin baggrundsbillede: url ('night.png');  .skin bredde: 100%; højde: 100%; peger-begivenheder: ingen; position: absolut; margen: 0; 

    Det peger-begivenheder: ingen; regel tilføjes skindene, så klikhændelserne på kontakten kan passere gennem dem, og nå radioknapperne.

    Med CSS-ejendommens peger-begivenheder kan du angive omstændighederne under hvilke et grafisk element kan være målrettet af mus events.

    Som et alternativ til koden ovenfor, to tags (med kildebilleder) inde i

    tags kan også fungere. De vil være skind til de to switch states.

    Skærmbillede af skifte med skind i krom

    Trin 3a. Tilføj maske (Webkit version)

    For Chrome og andre webkitbaserede browsere bruger jeg maske-billede CSS ejendom, som - som ved skrivelsen af ​​denne post - kun arbejder med -webKit præfiks i webkit browsere. Det maske-billede ejendom lader dig Angiv billedet at blive brugt som maske.

    Generelt er der to slags maskering: luminans og alfa.

    • I luminansmaskering, Den mørke del af maskebilledet skjuler det billede, den maskerer: jo mørkere er en del i maskebilledet, jo mere skjult den del er i billedet er maskeret.
    • I alpha maskering, den gennemsigtige del af maskebilledet skjuler det billede, den maskerer: jo mere transparent er en del i maskebilledet, desto mere skjult den del er i billedet, der maskeres.

    I Chrome (som i version 51.0.2704.103, Win10) synes kun alpha at fungere i øjeblikket.

    I CSS, alfa og luminans er værdierne af maske-typen ejendom.

    Her er CSS det tilføjer en maske til baggrundsbilleder i Webkit-browsere:

    CSS

    #nightSkin baggrundsbillede: url ('night.png'); maske-typen: alpha; / * gennemsigtig cirkel med resterende del uigennemsigtig * / -webkit-maske-billede: radial-gradient (cirkel ved 45px 45px, rgba (0,0,0,0) 45px, rgba (0,0,0,1) 45px) ;  / * Når dagens hud er valgt * / #leftRadio: tjekket ~ # nightSkin mask-type: alpha; / * uigennemsigtig cirkel med resterende del gennemsigtig * / -webkit-mask-billede: radial-gradient (cirkel ved 405px 45px, rgba (0,0,0,1) 45px, rgba (0,0,0,0) 45px) ; 

    Jeg brugte -WebKit-maske-billede egenskab for at oprette det oprindelige maskebillede. Dens værdi bruger radial-gradient () CSS-funktion, der bruges til at oprette et billede fra en foruddefineret form, en radial gradient og midten af ​​gradienten.

    For nattens hud skabte jeg en gennemsigtig cirkel, og jeg lagde den resterende del af beholderen uigennemsigtig. For dagens hud gjorde jeg det modsatte: skabte en uigennemsigtig cirkel med radial-gradient () funktion og gjort den resterende del gennemsigtig.

    Selv om det endnu ikke understøttes i webkit browsere, tilføjede jeg maske-typen ejendom til CSS til fremtidig reference.

    Skærmbillede af switch med Night skin valgt
    Skærmbillede af kontakt med Dagskind valgt

    Som du kan se ovenfor, er grænsen til cirklen ikke meget glat. Til skjul de grove kanter, Tilføj en

    efter skindene i form af en cirkel (samme størrelse som maskeringen) med en bokseskygge. Skyggen vil skjule cirkelmaskernes ru kanter.

    HTML

    CSS

    #switchBtnOutline bredde: 90px; højde: 100%; border-radius: gange 45 px; box-skygge: 0 0 2px 2px grå indsats, 0 0 10px grå; pointer-events: ingen; position: absolut; margin: 0;  / * Placer #switchBtnOutline i højre ende, når dagens hud er valgt * / #leftRadio: tjekket ~ # switchBtnOutline højre: 0; 
    Skærmbillede af omskifter med maskecirkelens uslebne kanter gemt

    Trin 3b. Tilføj maske (Firefox-version)

    Det maske-billede CSS ejendom er faktisk a longhand ejendom, og det er en del af shorthandegenskaben maske Det giver dig mulighed for at angive det billede, der skal bruges som en maske. Mens maske-billede understøttes ikke i Firefox endnu, maske er.

    Selvom maske ejendom skal acceptere et billede, der er oprettet med radial-gradient () CSS funktion som en værdi, ligesom den maske-billede ejendom gjorde, der er ingen støtte til det i Firefox endnu.

    Så i stedet for a radial-gradient () billede, lad os bruge et SVG-billede som maskebilledet med maskintypen luminans.

         

    SVG-billedet ovenfor ligner en kombination af a hvidt rektangel og a sort cirkel. Tilføj dette, og en anden med en sort rektangel og a hvid cirkel som masker til den HTML, vi brugte i Webkit-versionen.

    SVG billede (hvidt rektangel og sort cirkel til masken)

    HTML

                 

    Udskift (eller kombiner med) CSS-koden for #nightSkin Vi brugte i Webkit-versionen med følgende kode. Og du er færdig.

    Vi har nu to forskellige maskebilleder (CSS gradient & SVG), to forskellige masketyper (Alpha & Luminance), og både Webkit og Firefox support.

    CSS

    #nightSkin baggrundsbillede: url ('night.png'); maske type: luminans; maske: url (#leftSwitchMask);  #leftRadio: tjekket ~ # nightSkin mask-type: luminans; maske: url (#rightSwitchMask); 

    Tjek demoen

    • Demo
    • Download kilde
    © Savtec
    Nyttige oplysninger og tips til webudvikling. Programmering, webdesign, CSS, HTML, JAVASCRIPT. Konfigurer og geninstaller WINDOWS. Oprettelse af websteder og applikationer fra bunden.