Hvordan lage en snømann med kun ett HTML element og noe CSS
Hvorfor?
Dette er jo ikke noe du får bruk for i jobb? Nei, men det er kult. Hvorfor male ett bilde når du kan ta fram kamera? Det er en utfordring å kun bruke ett element og vil også tvinge deg til å forbedre dine CSS skills!
Eneste HTML du trenger
<div class="snowman"></div>
Rull en snøkule
.snowman {
position: relative;
height: 150px;
width: 150px;
border-radius: 42%;
background: #e5f2f8;
}
Gjennbruk formen
Medbox-shadowkan vi gjennskape formen i forskjellige størrelser, farge og blur.
box-shadow:
/*middle circle*/
0 135px 0 12px #e5f2f8,
/*bottom circle*/
0 270px 0 39px #e5f2f8;
Så gjør vi de litt finere med border og skygge
border: 4px solid #333;
border-bottom-width: 7px;
box-shadow:
/*head shadow*/
inset -3px -12px 0 0 #adc5d6,
/*middle circle*/
-3px 135px 0 12px #e5f2f8,
0 142px 0 15px #adc5d6,
0 142px 0 21px #333,
/*bottom circle*/
-3px 270px 0 39px #e5f2f8,
0 285px 0 45px #adc5d6,
0 285px 0 52px #333;
Detaljer med background
La oss lage ett ansikt. Dette gjør vi ibackgroundmed flere lag, merk at vi da kun kan style elementet og ikke skyggene, så i dette tilfellet ansiktet. Men
linear-gradientkan vi tegne streker, firkanter og trekanter og med
radial-gradientkan vi tegne sirkler og ovaler.
background:
/*left eye*/
radial-gradient(circle at 45px 45px,#7d7f82 4px, transparent 5px),
radial-gradient(circle at 48px 48px, #323438 10px, transparent 11px),
radial-gradient(circle at 48px 48px, black 12px, transparent 13px),
/*right eye*/
radial-gradient(circle at 99px 45px, #7d7f82 4px, transparent 5px),
radial-gradient(circle at 102px 48px, #323438 10px, transparent 11px),
radial-gradient(circle at 102px 48px, black 12px, transparent 13px),
/*mouth*/
radial-gradient(circle at 34px 105px, black 6px, transparent 7px),
radial-gradient(circle at 45px 117px, black 6px, transparent 7px),
radial-gradient(circle at 60px 120px, black 6px, transparent 7px),
radial-gradient(circle at 75px 122px, black 6px, transparent 7px),
radial-gradient(circle at 90px 120px, black 6px, transparent 7px),
radial-gradient(circle at 105px 117px, black 6px, transparent 7px),
radial-gradient(circle at 115px 105px, black 6px, transparent 7px),
/*carrot nose*/
linear-gradient(70deg, transparent 41%, black 45%, orangered 55%) 68px 76px / 7px 22px no-repeat,
linear-gradient(-70deg, transparent 41%, black 45%, orangered 55%) 75px 76px / 7px 22px no-repeat,
radial-gradient(circle at 75px 75px, orangered 7px, black 8px, transparent 9px),
/*background*/
#e5f2f8;
Hatt og armer
Nå trenger vi å utvide snømannen, men vi begynner å gå tom for muligheter. Da kan vi bruke::beforeog
::afterfor to pseudo elementer som kan ha sin egen form, skygger og bakgrunn.
Flosshatt
.snowman::before{
content: '';
position: absolute;
width: 150px;
height: 115px;
top: -105px;
background:
radial-gradient(ellipse at 50% 0, transparent 50%, rgb(10, 10, 10) 51%) 13px 93px / 120px 10px no-repeat,
linear-gradient(95deg, #c3c3c3, #c3c3c3) 30px 75px / 82px 25px no-repeat,
linear-gradient(95deg, black, black) 27px 72px / 88px 31px no-repeat,
radial-gradient(ellipse, rgb(10, 10, 10) 65%, transparent 66%) 3px 82px / 144px 30px no-repeat,
radial-gradient(ellipse, black 65%, transparent 66%) 0 79px / 150px 36px no-repeat,
radial-gradient(ellipse, rgb(10, 10, 10) 50%, transparent 51%) 7px 7px / 131px 15px no-repeat,
linear-gradient(to right, transparent 75px, #ffffff42 85px 88px, transparent 110px) 0 15px no-repeat,
linear-gradient(87deg, transparent 30px, black 31px) 0 15px / 75px 90px no-repeat,
linear-gradient(95deg, black 43px, transparent 44px) 75px 15px / 75px 90px no-repeat;
}
Kvister
.snowman::after{
content: '';
position: absolute;
z-index: -1;
top: 135px;
left: -120px;
width: 405px;
height: 45px;
border-bottom: 4px solid #812121;
transform: rotate(10deg);
background:
/*left hand*/
linear-gradient(44deg, transparent 35%, #812121 36% 49%, transparent 50%) 0 22px / 15px 30px no-repeat,
linear-gradient(60deg, transparent 35%, #812121 36% 49%, transparent 50%) 1px 16px / 16px 31px no-repeat,
/*right hand*/
linear-gradient(-44deg, transparent 35%, #812121 36% 49%, transparent 50%) 390px 22px / 15px 30px no-repeat,
linear-gradient(-60deg, transparent 35%, #812121 36% 49%, transparent 50%) 385px 16px / 16px 31px no-repeat;
}
Tada🎉
Det var en nydelig snømann med kun en<div>og 77 linjer CSS!
Kanskje du nå er flinkere til å bruke former, borders, skygger, gradient colors og pseudo elements i CSS som du kanskje vil få bruk for i ekte prosjekter? Jeg har hvertfall blitt det etter å ha jobbet fram denne snømannen.