mirror of
https://github.com/danog/2048.git
synced 2024-11-27 11:54:39 +01:00
215 lines
4.1 KiB
SCSS
215 lines
4.1 KiB
SCSS
@import "helpers";
|
|
@import "fonts/clear-sans.css";
|
|
|
|
$field-width: 500px;
|
|
$grid-spacing: 15px;
|
|
$grid-row-cells: 4;
|
|
$tile-size: ($field-width - $grid-spacing * ($grid-row-cells + 1)) / $grid-row-cells;
|
|
$tile-border-radius: 3px;
|
|
|
|
$text-color: #776E65;
|
|
$bright-text-color: #f9f6f2;
|
|
|
|
$tile-color: #eee4da;
|
|
$tile-gold-color: #edc22e;
|
|
$tile-gold-glow-color: lighten($tile-gold-color, 15%);
|
|
|
|
html, body {
|
|
margin: 0;
|
|
padding: 0;
|
|
|
|
background: #faf8ef;
|
|
color: $text-color;
|
|
font-family: "Clear Sans", "Helvetica Neue", Arial, sans-serif;
|
|
font-size: 18px;
|
|
}
|
|
|
|
body {
|
|
margin: 80px 0;
|
|
}
|
|
|
|
h1 {
|
|
font-size: 80px;
|
|
font-weight: bold;
|
|
margin: 0;
|
|
}
|
|
|
|
p {
|
|
margin-top: 0;
|
|
margin-bottom: 10px;
|
|
line-height: 1.65;
|
|
}
|
|
|
|
a {
|
|
color: $text-color;
|
|
font-weight: bold;
|
|
text-decoration: underline;
|
|
}
|
|
|
|
strong {
|
|
&.important {
|
|
text-transform: uppercase;
|
|
}
|
|
}
|
|
|
|
hr {
|
|
border: none;
|
|
border-bottom: 1px solid lighten($text-color, 40%);
|
|
margin-top: 20px;
|
|
margin-bottom: 30px;
|
|
}
|
|
|
|
.container {
|
|
width: $field-width;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.game-container {
|
|
margin-top: 40px;
|
|
position: relative;
|
|
padding: $grid-spacing;
|
|
|
|
cursor: default;
|
|
-webkit-touch-callout: none;
|
|
-webkit-user-select: none;
|
|
-moz-user-select: none;
|
|
|
|
background: #bbada0;
|
|
border-radius: $tile-border-radius * 2;
|
|
width: $field-width;
|
|
height: $field-width;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.grid-container {
|
|
position: absolute;
|
|
z-index: 1;
|
|
}
|
|
|
|
.grid-row {
|
|
margin-bottom: $grid-spacing;
|
|
|
|
&:last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
&:after {
|
|
content: "";
|
|
display: block;
|
|
clear: both;
|
|
}
|
|
}
|
|
|
|
.grid-cell {
|
|
width: $tile-size;
|
|
height: $tile-size;
|
|
margin-right: $grid-spacing;
|
|
float: left;
|
|
|
|
border-radius: $tile-border-radius;
|
|
|
|
background: rgba($tile-color, .35);
|
|
|
|
&:last-child {
|
|
margin-right: 0;
|
|
}
|
|
}
|
|
|
|
.tile-container {
|
|
position: absolute;
|
|
z-index: 2;
|
|
}
|
|
|
|
.tile {
|
|
background: red;
|
|
width: $tile-size;
|
|
height: $tile-size;
|
|
border-radius: $tile-border-radius;
|
|
|
|
background: $tile-color;
|
|
text-align: center;
|
|
line-height: $tile-size + 10px;
|
|
font-size: 55px;
|
|
font-weight: bold;
|
|
|
|
@include transition(200ms ease);
|
|
@include transition-property(top, left);
|
|
|
|
// Build position classes
|
|
@for $x from 1 through $grid-row-cells {
|
|
@for $y from 1 through $grid-row-cells {
|
|
&.tile-position-#{$x}-#{$y} {
|
|
position: absolute;
|
|
left: ($tile-size + $grid-spacing) * ($x - 1);
|
|
top: ($tile-size + $grid-spacing) * ($y - 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
$base: 2;
|
|
$exponent: 1;
|
|
$limit: 11;
|
|
|
|
// Colors for all 11 states, false = no special color
|
|
$special-colors: false false, // 2
|
|
false false, // 4
|
|
#f78e48 true, // 8
|
|
#fc5e2e true, // 16
|
|
#ff3333 true, // 32
|
|
#ff0000 true, // 64
|
|
false true, // 128
|
|
false true, // 256
|
|
false true, // 512
|
|
false true, // 1024
|
|
false true; // 2048
|
|
|
|
// Build tile colors
|
|
@while $exponent <= $limit {
|
|
$power: pow($base, $exponent);
|
|
|
|
&.tile-#{$power} {
|
|
// Calculate base background color
|
|
$gold-percent: ($exponent - 1) / ($limit - 1) * 100;
|
|
$mixed-background: mix($tile-gold-color, $tile-color, $gold-percent);
|
|
|
|
$nth-color: nth($special-colors, $exponent);
|
|
|
|
$special-background: nth($nth-color, 1);
|
|
$bright-color: nth($nth-color, 2);
|
|
|
|
@if $special-background {
|
|
$mixed-background: mix($special-background, $mixed-background, 55%);
|
|
}
|
|
|
|
@if $bright-color {
|
|
color: $bright-text-color;
|
|
}
|
|
|
|
// Set background
|
|
background: $mixed-background;
|
|
|
|
// Add glow
|
|
$glow-opacity: max($exponent - 4, 0) / ($limit - 4);
|
|
box-shadow: 0 0 30px 10px rgba($tile-gold-glow-color, $glow-opacity / 1.8),
|
|
inset 0 0 0 1px rgba(white, $glow-opacity / 3);
|
|
|
|
// Adjust font size for bigger numbers
|
|
@if $power >= 100 and $power < 1000 {
|
|
font-size: 45px;
|
|
} @else if $power >= 1000 {
|
|
font-size: 35px;
|
|
}
|
|
}
|
|
|
|
$exponent: $exponent + 1;
|
|
}
|
|
}
|
|
|
|
.game-intro {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.game-explanation {
|
|
margin-top: 50px;
|
|
}
|