Een gebruikersinterface voor switches maken met CSS Mask
Bij beeldverwerking, masking is een techniek waarmee je kunt verberg een afbeelding met iemand anders. Een masker wordt gebruikt om een deel van een afbeelding te maken doorzichtig. U kunt maskeren met behulp van CSS met behulp van maskeringseigenschappen.
In het bericht van vandaag maken we een gemaskerde afbeelding met behulp van twee PNG-afbeeldingen en CSS-maskeringstechnieken en stellen gebruikers in staat om de twee toestanden van de afbeelding te verwerken (dag en nacht) met behulp van een schakelaar UI.
Vanwege een aantal browser-compatibiliteitsproblemen - niet alle maskeringseigenschappen worden in elke browser ondersteund (vanaf juni 2016) - zal ik laten zien twee technieken voor het toevoegen van maskers, één voor op Webkit gebaseerde browsers en één voor Firefox. De twee eerste stappen in deze zelfstudie in drie stappen zijn voor elke browser hetzelfde, maar er zal een verschil zijn in de derde stap.
Stap 1. Maak een basisschakelaar
Omdat een typische schakelaar twee toestanden heeft met maar een ingeschakeld tegelijkertijd kunt u een radioknop groep van twee om de werkende componenten van de schakelaar te creëren. Plaats elke keuzerondje aan de linker- en rechterkant van het bovenliggende element.
Groepen keuzerondjes worden gemaakt door elke keuzerondje op dezelfde manier te gebruiken naam
attribuut. In een groep met keuzerondjes, slechts één keuzerondje kan tegelijkertijd worden gecontroleerd.
We beginnen met de volgende HTML en CSS:
HTML
CSS
In de onderstaande CSS heb ik de absolute positie gebruikt om de keuzerondjes op het scherm precies te plaatsen waar ik wil.
#outerWrapper width: 450px; hoogte: 90 px; opvulling: 10px; marge: 100 px automatisch 0 auto; grensradius: 55px; vakschaduw: 0 0 10px 6px #EAEBED; achtergrond: #fff; #innerWrapper height: 100%; border-radius: 45px; overloop verborgen; position: relative; .radio width: 90px; height: 100%; positie: absoluut; margin: 0; dekking: 0; #rightRadio rechts: 0; .radio: not (: checked) cursor: pointer;
Ik heb de ondoorzichtigheid: 0
regel aan de .radio-
klas om verberg de keuzerondjes. De laatste regel in het onderstaande codeblok, cursor: pointer;
toont de aanwijzercursor voor het niet-geactiveerde keuzerondje, zodat gebruikers weten op welke knop moet worden geklikt om de schakelstatus in te schakelen.
Stap 2. Voeg skins toe aan de switch
In deze stap voegen we er twee toe Ik gebruik "Dag" en "Nacht" als de twee toestanden van de schakelaar, geïnspireerd door een Dribbel geschoten door Minh Killy Le. HTML CSS De Met de CSS-eigenschap pointer-events kunt u de omstandigheden instellen waaronder een grafisch element kan worden gemaakt doelgericht door muisgebeurtenissen. Als een alternatief voor de bovenstaande code, twee Voor Chrome en andere op Webkit gebaseerde browsers, zal ik de Over het algemeen zijn er twee soorten maskering: luminantie en alpha. In Chrome (vanaf versie 51.0.2704.103, Win10) lijkt alleen alpha momenteel te werken. In CSS, Hier is de CSS die voegt een masker toe naar achtergrondafbeeldingen in Webkit-browsers: CSS Ik gebruikte de Voor de nachthuid heb ik een transparante cirkel gemaakt en heb ik het resterende deel van de container ondoorzichtig gemaakt. Voor de huid van de dag deed ik het tegenovergestelde: creëerde een ondoorzichtige cirkel met de Hoewel het nog niet wordt ondersteund in Webkit-browsers, heb ik de Zoals je hierboven kunt zien, is de rand van de cirkel niet erg soepel. Naar verberg de ruwe randen, Voeg een ... toe HTML CSS De Hoewel de Dus in plaats van een De SVG-afbeelding hierboven ziet eruit als een combinatie van een witte rechthoek en een zwarte cirkel. Voeg dit toe en een ander met een zwarte rechthoek en een witte cirkel als maskers voor de HTML die we in de Webkit-versie gebruikten. HTML Vervang (of combineer met) de CSS-code voor We hebben nu twee verschillende maskerafbeeldingen (CSS-gradiënt en SVG), twee verschillende maskertypes (alfa & luminantie) en zowel Webkit- als Firefox-ondersteuning. CSS
#daySkin background-image: url ('day.png'); #nightSkin background-image: url ('night.png'); .skin width: 100%; hoogte: 100%; pointer-events: geen; positie: absoluut; marge: 0;
pointer-events: geen;
regel wordt toegevoegd aan de skins zodat de klikgebeurtenissen op de switch kunnen passeer ze, en bereik de radioknoppen. tags (met bronafbeeldingen) in de
Stap 3a. Masker toevoegen (versie Webkit)
mask-afbeelding
CSS-eigenschap, die - vanaf het schrijven van dit bericht - alleen werkt met de -webkit
voorvoegsel in Webkit-browsers. De mask-afbeelding
eigenschap laat je toe geef de afbeelding op om gebruikt te worden als de masker.alpha
en luminantie
zijn de waarden van de mask-type
eigendom.#nightSkin background-image: url ('night.png'); mask-type: alpha; / * transparante cirkel met overgebleven gedeelte ondoorzichtig * / -webkit-masker-afbeelding: radiale gradiënt (cirkel op 45px 45px, rgba (0,0,0,0) 45px, rgba (0,0,0,1) 45px) ; / * Wanneer dag skin geselecteerd * / #leftRadio: checked ~ # nightSkin mask-type: alpha; / * ondoorzichtige cirkel met resterend gedeelte transparant * / -webkit-maskerafbeelding: radiale gradiënt (cirkel bij 405px 45px, rgba (0,0,0,1) 45px, rgba (0,0,0,0) 45px) ;
-webkit-mask-afbeelding
eigenschap om de initiële maskerafbeelding te maken. Zijn waarde gebruikt de radiaal-gradiënt ()
CSS-functie die wordt gebruikt om een afbeelding te maken van een vooraf gedefinieerde vorm, een radiaal verloop en het midden van het verloop.radiaal-gradiënt ()
functie, en maakte het resterende gedeelte transparant.mask-type
eigendom van de CSS voor toekomstig gebruik.
#switchBtnOutline width: 90px; height: 100%; border-radius: 45px; vakschaduw: 0 0 2px 2px grijze inzet, 0 0 10px grijs; pointer-events: none; positie: absoluut; margin: 0; / * Plaats #switchBtnOutline aan het juiste einde wanneer de daghuid is geselecteerd * / #leftRadio: checked ~ # switchBtnOutline right: 0;
Stap 3b. Masker toevoegen (Firefox-versie)
mask-afbeelding
CSS-eigenschap is eigenlijk een eigendom uit de lange termijn, en het maakt deel uit van de verkorte eigenschap masker
waarmee u de afbeelding ook als masker kunt opgeven. Terwijl mask-afbeelding
wordt nog niet ondersteund in Firefox, masker
is.masker
eigenschap moet een afbeelding accepteren die is gemaakt met de radiaal-gradiënt ()
CSS-functie als een waarde, net als de mask-afbeelding
property deed, daar is in Firefox nog geen ondersteuning voor.radiaal-gradiënt ()
afbeelding, laten we een SVG-afbeelding gebruiken als de maskerafbeelding met het maskertype luminantie
.
#nightSkin
we gebruikten in de Webkit-versie met de volgende code. En je bent klaar.#nightSkin background-image: url ('night.png'); masker-type: luminantie; masker: url (#leftSwitchMask); #leftRadio: checked ~ # nightSkin mask-type: luminance; masker: url (#rightSwitchMask);
Bekijk de demo