Skip to content

Instantly share code, notes, and snippets.

@stanleyxu2005
Last active August 29, 2015 14:00
Show Gist options
  • Save stanleyxu2005/11529866 to your computer and use it in GitHub Desktop.
Save stanleyxu2005/11529866 to your computer and use it in GitHub Desktop.
A Pen by Fabrice Lejeune.
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700' rel='stylesheet' type='text/css'>
<section class="flight-tracker">
<header>
<h1 class="aa-logo">American Airlines</h1>
<span class="flight-number">AA289</span>
</header>
<div class="flight-details">
<table>
<thead>
<tr>
<th>Date</th>
<th>Status</th>
<th>Term</th>
<th>Gate</th>
</tr>
</thead>
<tbody>
<tr>
<td>3-14-2014</td>
<td>Departed</td>
<td>T3</td>
<td>K12</td>
</tr>
</tbody>
</table>
<div class="flight-duration">
<span class="flight-start">11:35</span>
<span class="flight-end">15:05</span>
</div>
</div>
<footer>
<span class="flight-from"><strong>ORD</strong> <span class="city">Chicago</span></span>
<span class="flight-to"><strong>PVG</strong> <span class="city">Shanghai</span></span>
<span class="flight-progress"></span>
<span class="airplaine">✈</span>
</footer>
</section>
// IN PROGRESS - Inspired from http://dribbble.com/shots/1475032-FlightTracker by Chuan²
@import "bourbon";
html, body {
height: 100%;
@include linear-gradient(#0d1944, #49aae7);
}
table {
border-collapse: collapse;
border-spacing: 0;
}
.flight-tracker {
@include position(absolute, 50% 0 0 50%);
@include transform(translate(-50%, -50%));
@include size(290px auto);
font-family: 'Ubuntu Mono';
font-weight: 400;
color: #4e4e4e;
border-radius: 32px / 28px;
@include perspective(320px);
@include transform-style(preserve-3d);
@include transform-origin(50% 48px);
header {
background: white;
border-radius: 6px 6px 0 0 / 6px 6px 0 0;
padding: 7px 15px;
@include transform-origin(50% 50%);
@include transform(translate3d(0px, 28px, 0px) rotateX(0deg));
@include transform-style(preserve-3d);
@include animation(fold-header 12s $ease-out-quart infinite);
h1.aa-logo {
display: block;
@include hide-text;
@include size(130px 20px);
background-repeat: no-repeat;
background-image: url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABkAAD/4QMsaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0NDBEQUExQUFCQjMxMUUzOTI0QUJFNDAwRUZDMEY4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0NDBEQUExQkFCQjMxMUUzOTI0QUJFNDAwRUZDMEY4NCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkRCMUVCQ0ZGQUJCMjExRTM5MjRBQkU0MDBFRkMwRjg0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkRCMUVCRDAwQUJCMjExRTM5MjRBQkU0MDBFRkMwRjg0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEB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);
}
.flight-number {
@include position(absolute, 7px 15px 0 0);
font-size: 18px;
}
}
.flight-details {
margin: -1px 0 0;
table {
border: 0 none;
width: 100%;
thead {
background: #bfbfbf;
@include backface-visibility(hidden);
@include transform(translate3d(0px, 28px, 0px) rotateX(-90deg));
@include transform-origin(50% 0%);
@include animation(fold-top 12s $ease-out-quart infinite);
th {
text-align: left;
font-size: 11px;
height: 28px;
font-weight: 400;
color: #289dd7;
vertical-align: bottom;
padding: 0 15px;
&:last-child {
text-align: right;
}
}
}
tbody {
background: #ebebeb;
@include backface-visibility(hidden);
@include transform(translate3d(0px, -28px, 0px) rotateX(90deg));
@include transform-origin(50% 100%);
@include animation(fold-bottom 12s $ease-out-quart infinite);
td {
font-size: 11px;
height: 28px;
vertical-align: top;
padding: 0 15px;
&:last-child {
text-align: right;
}
}
}
}
}
.flight-duration {
padding: 7px 15px;
background: white;
@include transform-origin(50% 50%);
@include transform(translate3d(0px, -28px, 0px) rotateX(0deg));
@include transform-style(preserve-3d);
@include animation(fold-footer 12s $ease-out-quart infinite);
.flight-end {
float: right;
}
}
footer {
@include linear-gradient(#289dd7, #0e8acf);
border-radius: 0 0 6px 6px / 0 0 6px 6px;
height: 53px;
color: white;
font-size: 11px;
text-shadow: 1px 1px 2px rgba(#0d1944, .4);
box-shadow: 0 10px 24px rgba(#0d1944, .7);
overflow: hidden;
@include transform(translate3d(0px, -28px, 0px) rotateX(0deg));
@include transform-style(preserve-3d);
@include animation(fold-footer 12s $ease-out-quart infinite);
strong {
display: block;
font-weight: 400;
font-size: 24px;
}
.flight-from {
@include position(absolute, 0 0 12px 15px);
}
.flight-to {
text-align: right;
@include position(absolute, 0 15px 12px 0);
}
.flight-progress {
@include position(absolute, 50% 0 0 50%);
@include transform(translate3d(-50%, -50%, 0));
@include size(100px 2px);
background: #015683;
border-radius: 1px;
box-shadow: 0 0 2px rgba(#0d1944, .4);
@include animation(progress-bar 12s $ease-out-quart infinite);
&::before {
content: '\20';
display: block;
@include size(0% 2px);
background: white;
border-radius: 1px;
box-shadow: inset 0 0 1px rgba(#0d1944, .4);
@include animation(progress 12s linear infinite);
}
&::after {
content: '\20';
display: block;
@include position(absolute, 0px 0 0 0px);
@include size(2px);
background: white;
border-radius: 1px;
box-shadow: 0 0 1px 1px white;
@include animation(progress-track 12s linear infinite);
}
}
}
.airplaine {
@include position(absolute, 50% 0 0 50%);
@include transform(translate3d(-50%, -50%, 0));
font-size: 48px;
text-shadow: 1px 1px 2px rgba(#0d1944, .4);
@include animation(airplaine 12s infinite);
}
}
@include keyframes(fold-header) {
0%, 19% {
@include transform(translate3d(0px, 28px, 0px) rotateX(0deg));
}
23%, 42% {
@include transform(translate3d(0px, 0px, 0px) rotateX(0deg));
}
45%, 100% {
@include transform(translate3d(0px, 28px, 0px) rotateX(0deg));
}
}
@include keyframes(fold-top) {
0%, 19% {
background: #bfbfbf;
@include transform(translate3d(0px, 28px, 0px) rotateX(-90deg));
}
23%, 42% {
background: white;
@include transform(translate3d(0px, 0px, 0px) rotateX(0deg));
}
45%, 100% {
background: #bfbfbf;
@include transform(translate3d(0px, 28px, 0px) rotateX(-90deg));
}
}
@include keyframes(fold-bottom) {
0%, 19% {
background: #ebebeb;
@include transform(translate3d(0px, -28px, 0px) rotateX(90deg));
}
23%, 42% {
background: white;
@include transform(translate3d(0px, 0px, 0px) rotateX(0deg));
}
45%, 100% {
background: #ebebeb;
@include transform(translate3d(0px, -28px, 0px) rotateX(90deg));
}
}
@include keyframes(fold-footer) {
0%, 19% {
@include transform(translate3d(0px, -28px, 0px) rotateX(0deg));
}
24%, 42% {
@include transform(translate3d(0px, 0px, 0px) rotateX(0deg));
}
45%, 100% {
@include transform(translate3d(0px, -28px, 0px) rotateX(0deg));
}
}
@include keyframes(progress-bar) {
0%, 7% {
opacity: 0;
}
10%, 42% {
opacity: 1;
}
45%, 100% {
opacity: 0;
}
}
@include keyframes(progress) {
0%, 10% {
width: 0%;
}
40%, 100% {
width: 100%;
}
}
@include keyframes(progress-track) {
0%, 10% {
left: 0%;
}
40%, 100% {
left: 100%;
}
}
@include keyframes(airplaine) {
0%, 50% {
left: -20%;
text-shadow: 20px 20px 8px rgba(#0d1944, .4);
}
65%, 85% {
left: 50%;
text-shadow: 1px 1px 2px rgba(#0d1944, .4);
}
100% {
left: 120%;
text-shadow: 20px 20px 8px rgba(#0d1944, .4);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment