// Based on design by Patrick Moriarty https://dribbble.com/shots/4059798-Boulder-Badge
.patch-container
.patch-top
.patch-top-rounding
.patch-base
.mountains
.mountain__left
.mountain__right
.mountain__middle
.tent
.tent__flag
.tree__left
.tree__right
.ribbon
span WONDER & WANDER
.sun
each rayNum in [1, 2, 3, 4, 5, 6, 7, 8]
.ray(class="ray" + rayNum)
.curved-text
each letter in ['B','O','U','L','D','E','R',',','C','O','L','O','R','A','D','O']
span=letter
.moon
.cloud__small.left
.cloud__small.right
.cloud__big.left
.cloud__big.right
.stars
each num in [1, 2, 3, 4, 5, 6, 7, 8]
.star(class="star"+num)
.cover.left
.cover.right
.link-container
span Original artwork by
a(href='https://dribbble.com/shots/4059798-Boulder-Badge' target='_blank') Patrick Moriarty
View Compiled
$font-size: 10px; // Change to scale
$white: #faf7e8;
$aqua: #86beb3;
$blue: #395a6d;
$bgcolor: #DCC48E;
// Original background color: #9fcc71
// Alternative background colors: #779CAB, #DCC48E
@mixin absolute-horizontal-center {
position: absolute;
transform: translateX(-50%);
left: 50%;
}
@mixin absolute-vertical-center {
position: absolute;
transform: translateY(-50%);
top: 50%;
}
@mixin centerAbsolute() {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
@mixin circle($radius) {
height: $radius;
width: $radius;
border-radius: 100%;
}
@mixin isosceles-triangle($height, $width, $color) {
border-bottom: solid $height $color;
border-left: solid ($width/2) transparent;
border-right: solid ($width/2) transparent;
}
@mixin isosceles-triangle-pointed-right($height, $width, $color) {
border-left: solid $height $color;
border-top: solid ($width/2) transparent;
border-bottom: solid ($width/2) transparent;
}
@mixin isosceles-triangle-pointed-left($height, $width, $color) {
border-right: solid $height $color;
border-top: solid ($width/2) transparent;
border-bottom: solid ($width/2) transparent;
}
@mixin right-triangle($height, $width, $color) {
border-bottom: solid $height $color;
border-right: solid $width transparent;
}
@mixin right-triangle-pointed-left($height, $width, $color) {
border-bottom: solid $height $color;
border-left: solid $width transparent;
}
// Styles to extend
.pseudo {
content: '';
position: absolute;
}
// ===============================
.star {
height: 2.5em;
width: 2.5em;
background: $white;
position: absolute;
&:before, &:after { @extend .pseudo; }
&:before, &:after, .cover {
@include circle(2.5em);
background: $blue;
position: absolute;
}
&:before {
top: -1.25em;
left: -1.25em;
}
&:after {
top: -1.25em;
right: -1.25em;
}
.cover.left {
left: -1.25em;
bottom: -1.25em;
}
.cover.right {
bottom: -1.25em;
right: -1.25em;
}
}
.cloud-small {
// Bigger half circle
width: 4em;
height: 2em;
border-radius: 4em 4em 0 0;
position: absolute;
background: $aqua;
&:before { // Small half circle
@extend .pseudo;
background: $aqua;
height: 1em;
width: 2em;
border-radius: 2em 2em 0 0;
left: -1.2em;
bottom: 0;
}
}
.cloud-big {
@extend .cloud-small;
&:after {
@extend .pseudo;
width: 4.2em;
height: 2.1em;
border-radius: 4.2em 4.2em 0 0;
background: $aqua;
position: absolute;
right: -3.1em;
bottom: 0;
}
}
body {
font-size: $font-size;
min-height: 97vh;
display: flex;
justify-content: center;
align-items: center;
background: #DCC48E;
}
.patch-container {
position: relative;
z-index: -2; // So ribbons sides will show
height: 50em;
width: 46em;
top: -1em;
}
.patch-base {
height: 45.5em;
width: 40em;
//background: #395a6d;
background: linear-gradient(180deg, $blue 55%, $aqua 55%);
@include absolute-horizontal-center;
bottom: 0;
border-radius: 0 0 20em 20em;
border: 1.3em solid $white;
border-top: none;
box-sizing: border-box;
}
.patch-top {
height: 4.5em;
width: 40em;
@include absolute-horizontal-center;
top: 0;
overflow: hidden;
.patch-top-rounding {
@include circle(110em); // Calculated as 104
background: $blue;
@include absolute-horizontal-center;
top: 0;
border: 1.3em solid $white;
}
}
.ribbon {
width: 42.5em;
height: 7.6em;
position: relative; // So that :before and :after can be positioned behind
top: 26.5em;
left: (46em - 42.5em) / 2;
border: (7.6em / 2) solid $blue;
border-right-width: 1em;
border-right-color: $white;
border-left-width: 1em;
border-left-color: $white;
box-sizing: border-box;
text-align: center;
&:before, &:after {
@extend .pseudo;
border: 5em solid $white;
top: -5em;
z-index: -1;
}
&:before {
border-left-width: 1.3em;
border-left-color: transparent;
left: -2.7em;
}
&:after {
border-right-width: 1.3em;
border-right-color: transparent;
right: -2.7em;
}
}
// Text in ribbon
.ribbon span {
@include centerAbsolute;
width: 100%;
font-size: 3.2em;
font-family: 'Montserrat', sans-serif;
font-weight: 900;
color: $white;
}
.sun {
font-size: 1.05em;
position: absolute;
height: 0;
width: 0;
//@include circle(4em);
//border: 0.6em solid $white;
box-sizing: border-box;
@include absolute-horizontal-center;
bottom: 8.2em + 1.7em;
&:after {
@extend .pseudo;
@include circle(2.8em);
border: 0.6em solid $white;
@include centerAbsolute;
background: $aqua;
}
.ray {
width: 0.55em;
background: $white;
border-radius: 1.1em;
@include centerAbsolute;
}
.ray1 { height: 7.6em; width: 0.6em; }
.ray2 {
transform: translate(-50%, -50%) rotate(22.5deg);
height: 8em;
top: -0.05em;
right: -0.05em;
}
.ray3 {
transform: translate(-50%, -50%) rotate(2*22.5deg);
height: 9.7em;
top: -0.25em;
left: 0.28em;
}
.ray4 {
transform: translate(-50%, -50%) rotate(3 * 22.5deg);
height: 15.6em;
top: -0.585em;
left: 1.4em;
}
.ray5 {
transform: translate(-50%, -50%) rotate(4 * 22.5deg);
height: 18.6em;
}
.ray6 {
transform: translate(-50%, -50%) rotate(5 * 22.5deg);
height: 15.6em;
top: -0.585em;
left: -1.4em;
}
.ray7 {
transform: translate(-50%, -50%) rotate(6 * 22.5deg);
height: 9.7em;
top: -0.25em;
left: -0.28em;
}
.ray8 {
transform: translate(-50%, -50%) rotate(7 * 22.5deg);
height: 8em;
}
}
// Referenced: https://codepen.io/oloman/pen/sHGAl
.curved-text {
font-family: 'Montserrat', sans-serif;
font-weight: 800;
color: $white;
//width: 32em;
width: 36em;
//height: 16em;
height: 18em;
position: relative;
margin: 0 auto;
//top: 30.2em;
top: 22.6em;
span {
//font-size: 2.6em;
font-size: 2.8em;
position: absolute;
top: 0;
height: 7.4em;
width: 1em;
margin-left: -0.5em;
//line-height: 12.4em;
line-height: 11.5em;
transform-origin: top center;
@include absolute-horizontal-center;
text-align: center;
//border: 1px solid black;
}
// Python: [66.6 - (x * 7.4) for x in range(9)]
// (180 - 2*23.25) / 15 = 8.9
// >>> [66.75 - (x * 8.9) for x in range(8)]
// [66.75, 57.85, 48.95, 40.05, 31.15, 22.25, 13.35, 4.45]
span:nth-child(1) { transform: rotate(66.75deg); } // B
span:nth-child(2) { transform: rotate(57.85deg); } // O
span:nth-child(3) { transform: rotate(48.95deg); } // U
span:nth-child(4) { transform: rotate(40.05deg); } // L
span:nth-child(5) { transform: rotate(31.15deg); } // D
span:nth-child(6) { transform: rotate(22.25deg); } // E
span:nth-child(7) { transform: rotate(13.35deg); } // R
span:nth-child(8) { transform: rotate(4.45deg); } //
span:nth-child(9) { transform: rotate(-4.45deg); } // C
span:nth-child(10) { transform: rotate(-13.35deg); } // O
span:nth-child(11) { transform: rotate(-22.25deg); } // L
span:nth-child(12) { transform: rotate(-31.15deg); } // O
span:nth-child(13) { transform: rotate(-40.05deg); } // R
span:nth-child(14) { transform: rotate(-48.95deg); } // A
span:nth-child(15) { transform: rotate(-57.85deg); } // D
span:nth-child(16) { transform: rotate(-66.75deg); } // O*/
}
.moon {
@include circle(6.2em);
background: $white;
position: absolute;
@include absolute-horizontal-center;
top: 4.7em;
&:before {
@extend .pseudo;
@include circle(3.6em);
background: $blue;
@include absolute-vertical-center;
right: -0.6em;
}
}
.cloud__small {
@extend .cloud-small;
top: 7.4em;
&.left { left: 12.5em; }
&.right {
transform: scaleX(-1);
right: 12.5em;
}
}
.cloud__big {
@extend .cloud-big;
top: 12.8em;
&.left { left: 7.3em; }
&.right {
transform: scaleX(-1);
right: 7.3em;
}
}
.mountains {
//z-index: 5;
height: 13em;
width: 37.4;
position: absolute;
@include absolute-horizontal-center;
top: 9em;
.mountain__left, .mountain__right, .mountain__middle {
position: absolute;
bottom: 0;
}
.mountain__left {
@include right-triangle-pointed-left(9.2em, 9.3em, $aqua);
&:before {
@extend .pseudo;
@include right-triangle(9.2em, 9.3em, $white);
}
}
.mountain__right {
@include right-triangle(9.2em, 9.3em, $white);
right: 0;
&:before {
@extend .pseudo;
@include right-triangle-pointed-left(9.2em, 9.3em, $aqua);
left: -9.3em;
}
}
.mountain__middle {
@include isosceles-triangle(13em, 26em, $aqua);
@include absolute-horizontal-center;
&:before {
@extend .pseudo;
@include right-triangle(13em, 13em, $white);
}
}
}
.tent {
@include isosceles-triangle(4.5em, 9.6em, $blue);
@include absolute-horizontal-center;
bottom: 0;
&:before, &:after {
@extend .pseudo;
bottom: -4.5em;
}
&:before {
height: 1.7em;
width: 1.7em;
background: $aqua;
}
// Doorway
&:after {
@include absolute-horizontal-center;
@include isosceles-triangle(1.7em, 3.4em, $white);
}
.tent__flag {
@include isosceles-triangle-pointed-right(3em, 1.1em, $blue);
position: absolute;
bottom: 0;
}
}
.tree__left, .tree__right {
@include isosceles-triangle(1.4em, 3.2em, $blue);
position: absolute;
bottom: 0;
&:before, &:after {
@extend .pseudo;
@include isosceles-triangle(1.4em, 3.2em, $blue);
@include absolute-horizontal-center;
}
&:before { bottom: -0.15em; }
&:after { bottom: 1.1em; }
}
.tree__left {
right: 4.8em;
}
.tree__right {
right: -4.8em - 3.2em;
}
// --- Stars ---
.stars {
width: 32.5em;
height: 16em;
@include absolute-horizontal-center;
top: 3em;
.star1 { top: 2.7em; left: 0em; }
.star2 { top: 0em; left: 9.3em; }
.star3 { top: 0em; right: 9.3em; }
.star4 { top: 2.7em; right: 0em; }
.star5 { bottom: 0em; left: 0em; }
.star6 { top: 8.2em; left: 9em; }
.star7 { top: 8.2em; right: 9em; }
.star8 { bottom: 0em; right: 0em; }
}
.link-container {
position: fixed;
bottom: 0;
right: 0;
width: auto;
padding: 0.75em;
font-size: 1.5em;
color: $blue;
font-family: sans-serif;
a {
color: darken($aqua, 25);
font-weight: 600;
text-decoration: none;
&:hover, &:focus {
color: darken($aqua, 10);
}
}
}
View Compiled
// ¯\_(ツ)_/¯
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.