1
0
mirror of https://github.com/danog/2048.git synced 2024-12-02 09:17:47 +01:00
2048/style/main.scss
2014-03-05 23:15:57 +01:00

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;
}