Hur man skapar en vacker ikon med CSS3

Idag vill jag visa dig ett snyggt trick. Vi skapar en dokumentikon med ren CSS3. Ännu bättre, den här effekten kräver bara ett enda HTML-element.


Spelplanen

  1. Skapa en fyrkantig låda
  2. Runda kanterna
  3. Använd pseudoelement för att skapa ett krökt hörn
  4. Skapa illusionen av text med en randig gradient

Låt oss börja!


Steg 1: Skapa en ruta

Vi börjar med att lägga till vårt enda HTML-element: en ankare-tagg. Det här är meningsfullt, eftersom de flesta ikoner också tjänar till att vara länkar.

 Dokument Ikon

Låt oss ange de lite godtyckliga dimensionerna för vår ikon. Vi gör 40x56px - helt enkelt för den här demo. I en verklig världsapplikation kommer du sannolikt att minska detta! Också, kom ihåg att vi måste lägga till display: block, eftersom alla ankarkoder är inline, som standard.

 .docIcon bakgrund: #eee; bakgrund: linjär gradient (topp, #ddd 0, #eee 15%, #fff 40%, #fff 70%, #eee 100%); gränsen: 1px solid #ccc; display: block; bredd: 40 bildpunkter; höjd: 56px; positioner: relativ; marginal: 42px auto; 

Observera att vi ovan ställer in en positioneringskontext för att snabbt kunna arbeta med pseudoelement. Du kommer att märka att jag bara har använt den officiella CSS3-syntaxen för gradienten. Du kommer sannolikt att vilja använda de olika webbläsarprefixen också. För att påskynda saker kan du använda Prefixr.com eller dess API i din favorit kodredigerare. Kopiera kodfliken ovan, klistra in den i Prefixr textarea och klicka på Enter. Det kommer då att spotta ut alla de olika prefixerade egenskaperna, som så:

 .docIcon bakgrund: #eee; bakgrund: -webkit-linjär gradient (topp, #ddd 0, #eee 15%, #fff 40%, #fff 70%, #eee 100%); bakgrund: -moz-linjär gradient (topp, #ddd 0, #eee 15%, #fff 40%, #fff 70%, #eee 100%); bakgrund: -o-linjär gradient (topp, #ddd 0, #eee 15%, #fff 40%, #fff 70%, #eee 100%); bakgrund: -ms-linjär gradient (topp, #ddd 0, #eee 15%, #fff 40%, #fff 70%, #eee 100%); bakgrund: linjär gradient (topp, #ddd 0, #eee 15%, #fff 40%, #fff 70%, #eee 100%); gränsen: 1px solid #ccc; display: block; bredd: 40px; höjd: 56px; position: relativ; marginal: 42px auto; 

Låt oss sedan lägga till lite glans med hjälp av CSS-boxskuggor. Jag har också använt text-strecksatsen egendom för att dölja texten.

 .docIcon ? -webkit-box-skugga: inset rgba (255,255,255,0,8) 0 1px 1px; -moz-box-skugga: inset rgba (255,255,255,0,8) 0 1px 1px; boxskugga: inset rgba (255,255,255,0,8) 0 1px 1px; text-indent: -9999em; 

Så långt har vi:


Steg 2: Avrundade hörn

Därefter måste vi skapa en rundad hörnseffekt. Lägg till följande:

 .docIcon ? -webkit-gränsradien: 3px 15px 3px 3px; -moz-gränsen-radie: 3px 15px 3px 3px; gränsstråle: 3px 15px 3px 3px; 

Genom att ge fyra värden kan vi ange topp-, höger-, botten- och vänsterradien i enlighet därmed. Detta liknar hur du skulle tillämpa marginaler eller vadderingar.

Vilket ger oss?


Steg 3: En krökt hörn

För att skapa en illusion av ett krökt hörn, använder vi genererat innehåll eller pseudoelement.

Lägg först till innehåll :innan vår ikon. I det här fallet behöver vi inte någon specifik text. I stället behöver vi skapa en 15px-ruta och tillämpa en bakgrundsgradient.

 .docIcon: före innehåll: ""; display: block; position: absolut; topp: 0; höger: 0; bredd: 15px; höjd: 15px; bakgrund: #ccc; bakgrund: -webkit-linjär gradient (45deg, #fff 0, #eee 50%, #ccc 100%); bakgrund: -moz-linjär gradient (45deg, #fff 0, #eee 50%, #ccc 100%); bakgrund: -o-linjär gradient (45deg, #fff 0, #eee 50%, #ccc 100%); bakgrund: -ms-linjär gradient (45deg, #fff 0, #eee 50%, #ccc 100%); bakgrund: linjär gradient (45deg, #fff 0, #eee 50%, #ccc 100%); -webkit-box-skugga: rgba (0,0,0,0,05) -1px 1px 1px, insetvit 0 0 1px; -moz-box-skugga: rgba (0,0,0,0,05) -1px 1px 1px, insetvit 0 0 1px; boxskugga: rgba (0,0,0,0,05) -1px 1px 1px, insetvit 0 0 1px; border-bottom: 1px solid #ccc; gränsen till vänster: 1px solid #ccc; 

För att vårt genererade innehåll också ska få den högra avrundade kanten måste vi på nytt tillämpa samma radier för att anpassa den.

? -webkit-gränsradien: 3px 15px 3px 3px; -moz-gränsen-radie: 3px 15px 3px 3px; gränsstråle: 3px 15px 3px 3px;

Tada!


Steg 4: Lägga till linjer

Nästa ska vi använda :efter psuedo-element för att lägga till några streckade linjer för att representera zoomad text. Applicera en bredd på 60% och a margin-vänster och margin-höger av 20% (vilket motsvarar 100%). Därefter specificerar vi en höjd och placerar den på 0 0.

 .docIcon: efter innehåll: ""; display: block; position: absolute; vänster: 0; top: 0; bredd: 60%; marginal: 22px 20% 0; höjd: 15px; 

Att skapa en uppsättning linjer är lite knepig. Om vi ​​är kloka kan vi dock använda CSS-gradienter för att uppnå denna effekt. Först dela den totala höjden med fem och ställ in varje block med en fast fyllning. Se bilden nedan för en tydligare exemplifiering av detta tänkande. Nyfty, ay? Det är en bra teknik att ha i ditt verktygsband.

Flera linjer (Stripes) med CSS3 Gradienst

 .docIcon: efter ? bakgrund: #ccc; bakgrund: -webkit-linjär gradient (topp, #ccc, #ccc 20%, #fff 20%, #fff 40%, #ccc 40%, #ccc 60%, #fff 60%, #fff 80% #ccc 80%, #ccc 100%); bakgrund: -moz-linjär gradient (topp, #cc 0, #ccc 20%, #fff 20%, #fff 40%, #ccc 40%, #ccc 60%, #fff 60%, #fff 80% #ccc 80%, #ccc 100%); bakgrund: -o-linjär gradient (topp, #ccc, #ccc 20%, #fff 20%, #fff 40%, #ccc 40%, #ccc 60%, #fff 60%, #fff 80% #ccc 80%, #ccc 100%); bakgrund: -ms-linjär gradient (topp, #cc 0, #ccc 20%, #fff 20%, #fff 40%, #ccc 40%, #ccc 60%, #fff 60%, #fff 80% #ccc 80%, #ccc 100%); bakgrund: linjär gradient (topp, #cc 0, #ccc 20%, #fff 20%, #fff 40%, #ccc 40%, #ccc 60%, #fff 60%, #fff 80%, #ccc 80 %, #ccc 100%); 

Vi är klara!

Live-demo

Njut du av inlägget? Har andra liknande knep? Om så är fallet, länka till dem i kommentarerna nedan.