Implements header-panel.

Includes support for standard, seamed, waterfall (multiple sizes) and scroll modes.
master
Sérgio Gomes 2014-10-06 12:20:34 +01:00
parent 73f33dde3a
commit 811d33e3ec
5 changed files with 219 additions and 5 deletions

View File

@ -100,15 +100,20 @@
<h1>Navigation</h1> <h1>Navigation</h1>
<iframe src="./styleguide/navigation/demo.html" scrolling="no"></iframe> <iframe src="./styleguide/navigation/demo.html" scrolling="no"></iframe>
</div> </div>
<div class="styleguide-demo">
<h1>Icons</h1>
<iframe src="./styleguide/icons/demo.html" scrolling="no"></iframe>
</div>
<div class="styleguide-demo">
<h1>Header panel</h1>
<iframe src="./styleguide/header-panel/demo.html" scrolling="no"></iframe>
</div>
</div> </div>
<script src="styleguide/navigation/sidenav.js" async defer></script> <script src="styleguide/navigation/sidenav.js" async defer></script>
<div class="styleguide-demo">
<h1>Icons</h1>
<iframe src="./styleguide/icons/demo.html" scrolling="no"></iframe>
</div>
<!-- Script to handle sizing the iFrames --> <!-- Script to handle sizing the iFrames -->
<script> <script>
'use strict'; 'use strict';

View File

@ -0,0 +1,65 @@
@import '../palette/palette';
@import '../shadow/shadow';
/* Colors */
$panel-bg-color: nth($primaryPalette, 6);
$panel-text-color: nth($pagePalette, 3);
/* Sizes */
$panel-small-height: 60px;
$panel-medium-tall-height: 120px;
$panel-tall-height: 180px;
$panel-default-height: $panel-small-height;
.header-panel {
width: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
}
.header-panel > .header-panel-header {
margin: 0;
border: 0;
height: 60px;
min-height: $panel-default-height;
line-height: $panel-default-height;
font-size: 18px;
padding: 0 10px;
background-color: $panel-bg-color;
color: $panel-text-color;
z-index: 100;
transition: min-height 0.2s;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
.header-panel.header-panel-tall > .header-panel-header {
min-height: $panel-tall-height;
}
.header-panel.header-panel-medium-tall > .header-panel-header {
min-height: $panel-medium-tall-height;
}
.header-panel > .header-panel-header.header-panel-compact {
min-height: $panel-default-height;
}
.header-panel.header-panel-scroll {
overflow-y: auto;
overflow-x: hidden;
}
.header-panel > .header-panel-header.header-panel-shadow {
@include shadow-z2();
}
.header-panel > .header-panel-content {
overflow-y: auto;
overflow-x: hidden;
flex-grow: 1;
}
.header-panel.header-panel-scroll > .header-panel-content {
overflow: visible;
}

View File

@ -0,0 +1,72 @@
<!doctype html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Buttons</title>
<link href="//fonts.googleapis.com/css?family=RobotoDraft:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en" rel='stylesheet'>
<link rel="stylesheet" href="demo.css">
</head>
<body>
<div class="demo-container">
<div class="header-panel header-panel-standard">
<div class="header-panel-header">Standard</div>
<div class="header-panel-content">
<div class="demo-content"></div>
</div>
</div>
</div>
<div class="demo-container">
<div class="header-panel header-panel-seamed">
<div class="header-panel-header">Seamed</div>
<div class="header-panel-content">
<div class="demo-content"></div>
</div>
</div>
</div>
<div class="demo-container">
<div class="header-panel header-panel-waterfall">
<div class="header-panel-header">Waterfall</div>
<div class="header-panel-content">
<div class="demo-content"></div>
</div>
</div>
</div>
<div class="demo-container">
<div class="header-panel header-panel-tall header-panel-waterfall">
<div class="header-panel-header">Waterfall-tall</div>
<div class="header-panel-content">
<div class="demo-content"></div>
</div>
</div>
</div>
<div class="demo-container">
<div class="header-panel header-panel-medium-tall header-panel-waterfall">
<div class="header-panel-header">Waterfall-medium-tall</div>
<div class="header-panel-content">
<div class="demo-content"></div>
</div>
</div>
</div>
<div class="demo-container">
<div class="header-panel header-panel-scroll">
<div class="header-panel-header">Scroll</div>
<div class="header-panel-content">
<div class="demo-content"></div>
</div>
</div>
</div>
<script src="header-panel.js"></script>
<script src="../third_party/rAF.js"></script>
</body>
</html>

View File

@ -0,0 +1,17 @@
@import '../styleguide_demo_bp';
@import '_header_panel';
.demo-container {
width: 400px;
float: left;
margin: 0 40px 40px 0;
}
.demo-content {
height: 2000px;
background: linear-gradient(rgb(214, 227, 231), lightblue);
}
.header-panel {
max-height: 500px;
}

View File

@ -0,0 +1,55 @@
'use strict';
(function() {
window.addEventListener('load', function() {
var panels = document.querySelectorAll('.header-panel');
var MODE = {
STANDARD: 0,
SEAMED: 1,
WATERFALL: 2,
SCROLL: 3
};
var SHADOW_CLASS = 'header-panel-shadow';
var COMPACT_CLASS = 'header-panel-compact';
var scrollHandler = function(mode, header, content) {
return function() {
if (mode === MODE.WATERFALL) {
if (content.scrollTop > 0) {
header.classList.add(SHADOW_CLASS);
header.classList.add(COMPACT_CLASS);
} else {
header.classList.remove(SHADOW_CLASS);
header.classList.remove(COMPACT_CLASS);
}
}
};
};
for (var i = 0; i < panels.length; i++) {
var panel = panels[i];
var header = panel.querySelector('.header-panel-header');
var content = panel.querySelector('.header-panel-content');
var mode = MODE.STANDARD;
if (panel.classList.contains('header-panel-seamed')) {
mode = MODE.SEAMED;
} else if (panel.classList.contains('header-panel-waterfall')) {
mode = MODE.WATERFALL;
} else if (panel.classList.contains('header-panel-scroll')) {
mode = MODE.SCROLL;
}
if (mode === MODE.STANDARD) {
header.classList.add(SHADOW_CLASS);
} else if (mode === MODE.SEAMED || mode === MODE.SCROLL) {
header.classList.remove(SHADOW_CLASS);
} else if (mode === MODE.WATERFALL) {
var handler = scrollHandler(mode, header, content);
content.addEventListener('scroll', handler);
handler();
}
}
});
})();