diff --git a/ionic/components/app/app.ts b/ionic/components/app/app.ts index 6d79dbed14..d013f0d4a7 100644 --- a/ionic/components/app/app.ts +++ b/ionic/components/app/app.ts @@ -125,25 +125,25 @@ export class IonicApp { }); } - applyBodyCss(bodyClassList, platform, config) { + applyBodyCss(bodyEle, platform, config) { let versions = platform.versions(); platform.platforms().forEach(platformName => { // platform-ios let platformClass = 'platform-' + platformName; - bodyClassList.add(platformClass); + bodyEle.classList.add(platformClass); let platformVersion = versions[platformName]; if (platformVersion) { // platform-ios_8 platformClass += '_' + platformVersion.major; - bodyClassList.add(platformClass); + bodyEle.classList.add(platformClass); // platform-ios_8_3 - bodyClassList.add(platformClass + '_' + platformVersion.minor); + bodyEle.classList.add(platformClass + '_' + platformVersion.minor); } }); - bodyClassList.add('mode-' + config.setting('mode')); + bodyEle.setAttribute('mode', config.setting('mode')); } isRTL(val) { @@ -188,7 +188,7 @@ export function ionicBootstrap(component, config, router) { // config and platform settings have been figured out // apply the correct CSS to the app - app.applyBodyCss(document.body.classList, Platform, config); + app.applyBodyCss(document.body, Platform, config); // prepare the ready promise to fire....when ready Platform.prepareReady(config); diff --git a/ionic/components/app/z-index.scss b/ionic/components/app/z-index.scss index c227928cae..bcc8d9b261 100644 --- a/ionic/components/app/z-index.scss +++ b/ionic/components/app/z-index.scss @@ -1,16 +1,22 @@ // Z-Index // -------------------------------------------------- +// Grouped by elements which would be siblings -$z-index-content-container: 5 !default; -$z-index-navbar-container: 10 !default; - -$z-index-content: 1 !default; -$z-index-swipe-handle: 5 !default; - -$z-index-toolbar-border: 20 !default; -$z-index-list-border: 50 !default; $z-index-aside-overlay: 80 !default; $z-index-overlay: 1000 !default; $z-index-click-block: 9999 !default; + + +$z-index-content-container: 5 !default; +$z-index-navbar-container: 10 !default; + + +$z-index-content: 5 !default; +$z-index-toolbar: 10 !default; +$z-index-swipe-handle: 15 !default; + + +$z-index-toolbar-border: 20 !default; +$z-index-list-border: 50 !default; diff --git a/ionic/components/button/extensions/material.scss b/ionic/components/button/extensions/material.scss index 44744cadcb..4701a1c684 100644 --- a/ionic/components/button/extensions/material.scss +++ b/ionic/components/button/extensions/material.scss @@ -10,7 +10,8 @@ $button-material-box-shadow-active: 0 4px 5px 0 rgba(0, 0, 0, 0.14),0 1px $button-material-border-radius: 3px !default; -.mode-md button, .mode-md [button] { +[mode="md"] button, +[mode="md"] [button] { border: 0; border-radius: $button-material-border-radius; diff --git a/ionic/components/card/extensions/material.scss b/ionic/components/card/extensions/material.scss index 8744f46177..9f9eca7799 100644 --- a/ionic/components/card/extensions/material.scss +++ b/ionic/components/card/extensions/material.scss @@ -9,7 +9,7 @@ $card-md-font-size: 1.4rem !default; $card-md-item-content-padding: 15px !default; -.mode-md .card { +[mode="md"] .card { background: $card-md-background-color; box-shadow: $card-md-box-shadow; border-radius: $card-md-border-radius; diff --git a/ionic/components/nav-bar/extensions/ios.scss b/ionic/components/nav-bar/extensions/ios.scss index 1afd86eeba..0cb3910eb6 100644 --- a/ionic/components/nav-bar/extensions/ios.scss +++ b/ionic/components/nav-bar/extensions/ios.scss @@ -2,27 +2,12 @@ // iOS Navbar // -------------------------------------------------- -$navbar-order-ios: ( - back-button: 10, - primary: 20, - title: 30, - secondary: 40 -); - $navbar-ios-height: 4.4rem !default; -$navbar-ios-background: #f7f7f8 !default; $navbar-ios-border-color: #c4c4c4 !default; -$navbar-ios-title-font-size: 1.7rem !default; -$navbar-ios-button-font-size: 1.7rem !default; -$navbar-ios-button-text-color: #007aff !default; -$navbar-ios-button-background-color: transparent !default; - .nav[mode="ios"] .navbar-container { - min-height: $navbar-ios-height; - background: $navbar-ios-background; // navbar on top, border on bottom (default) @include hairline(bottom, $navbar-ios-border-color); @@ -32,49 +17,26 @@ $navbar-ios-button-background-color: transparent !default; top: 0; bottom: auto; } +} - .toolbar-title { - order: map-get($navbar-order-ios, 'title'); - } - - .toolbar-primary-item { - order: map-get($navbar-order-ios, 'primary'); - } - - .toolbar-secondary-item { - order: map-get($navbar-order-ios, 'secondary'); - } - - ion-title { - order: map-get($navbar-order-ios, 'title'); - font-size: $navbar-ios-title-font-size; - font-weight: 500; - text-align: center; - } - - .back-button { - order: map-get($navbar-order-ios, 'back-button'); - overflow: inherit; - } +.navbar[mode="ios"] { button, [button] { - font-size: $navbar-ios-button-font-size; - color: $navbar-ios-button-text-color; - border: none; padding: 0; - margin: 0 10px; + margin: 0 1rem; + min-height: $navbar-ios-height; min-width: 0; - background: $navbar-ios-button-background-color; } - [icon] { - font-size: 2.5rem; + .back-button { + order: map-get($toolbar-order-ios, 'back-button'); + overflow: inherit; } .back-button-icon { - padding-right: 6px; + padding-right: 0.6rem; } } diff --git a/ionic/components/nav-bar/extensions/material.scss b/ionic/components/nav-bar/extensions/material.scss index 2de74970f7..3f1d9daeae 100644 --- a/ionic/components/nav-bar/extensions/material.scss +++ b/ionic/components/nav-bar/extensions/material.scss @@ -2,67 +2,14 @@ // Material Design Navbar // -------------------------------------------------- -$navbar-order-material: ( - back-button: 10, - primary: 20, - title: 30, - secondary: 40 -); - $navbar-material-height: 5.6rem !default; -$navbar-material-background: get-color(primary, base) !default; - -$navbar-material-title-font-size: 2rem !default; -$navbar-material-button-font-size: 24px !default; -$navbar-material-button-text-color: #fff !default; //#007aff !default; .nav[mode="md"] .navbar-container { - height: $navbar-material-height; - background: $navbar-material-background; + min-height: $navbar-material-height; +} - .toolbar-inner-title { - padding: 0; - } - - .toolbar-inner { - padding: 0px 16px; - } - - .toolbar-title { - order: map-get($navbar-order-ios, 'title'); - } - - .toolbar-primary-item { - order: map-get($navbar-order-ios, 'primary'); - } - - .toolbar-secondary-item { - order: map-get($navbar-order-ios, 'secondary'); - } - - .toolbar-primary-item ion-nav-items button:first-child { - margin-left: 0; - } - - ion-title { - font-size: $navbar-material-title-font-size; - font-weight: 500; - } - - button, - [button] { - font-size: $navbar-material-button-font-size; - color: $navbar-material-button-text-color; - border: none; - box-shadow: none; - - padding: 0; - margin: 0 10px; - - min-height: $navbar-material-height; - min-width: 0; - } +.navbar[mode="md"] { .back-button { margin: 0; @@ -71,8 +18,8 @@ $navbar-material-button-text-color: #fff !default; //#007aff !default; .back-button-icon { margin: 0; font-weight: normal; - font-size: 24px; - min-width: 56px; + font-size: 2.4rem; + min-width: 5.6rem; text-align: left; } diff --git a/ionic/components/nav-bar/nav-bar.scss b/ionic/components/nav-bar/nav-bar.scss index 4814c2b0b4..bd3f4292ff 100644 --- a/ionic/components/nav-bar/nav-bar.scss +++ b/ionic/components/nav-bar/nav-bar.scss @@ -3,26 +3,20 @@ // -------------------------------------------------- -.navbar { +.navbar.toolbar { position: absolute; - width: 100%; - height: 100%; - min-height: 4.4rem; - - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - order: $flex-order-toolbar-top; +} +.navbar { transform: translate3d(100%, 0px, 0px); + &.show-navbar { transform: translate3d(0px, 0px, 0px); } } .back-button { - order: 10; + order: map-get($toolbar-order, backButton);; transform: translateZ(0px); display: none; @@ -36,24 +30,6 @@ align-items: center; } - -// Core Nav Bar Color Generation -// -------------------------------------------------- - -@each $color, $value in $colors { - - .navbar[#{$color}] { - background-color: get-color($color, base); - - ion-title, - button, - [button] { - color: get-color($color, inverse); - } - } - -} - -.transparent-navbar.navbar { - background-color: transparent; +.transparent-navbar { + background-color: transparent !important; } diff --git a/ionic/components/nav-bar/nav-bar.ts b/ionic/components/nav-bar/nav-bar.ts index 264533da4a..2502b59eee 100644 --- a/ionic/components/nav-bar/nav-bar.ts +++ b/ionic/components/nav-bar/nav-bar.ts @@ -10,7 +10,10 @@ import * as dom from '../../util/dom'; @IonicComponent({ - selector: 'ion-navbar' + selector: 'ion-navbar', + host: { + 'class': 'toolbar' + } }) @IonicView({ template: ` diff --git a/ionic/components/nav/test/basic/pages/first-page.ts b/ionic/components/nav/test/basic/pages/first-page.ts index 4e0e3c2aa4..94bd86ab5d 100644 --- a/ionic/components/nav/test/basic/pages/first-page.ts +++ b/ionic/components/nav/test/basic/pages/first-page.ts @@ -9,12 +9,8 @@ import {ThirdPage} from './third-page'; template: '' + '' + 'First Page: {{ val }}' + - '' + - '' + - '' + '' + '' + - '' + '' + '' + '' + diff --git a/ionic/components/tabs/extensions/ios.scss b/ionic/components/tabs/extensions/ios.scss index 1c58c49060..b78312eca9 100644 --- a/ionic/components/tabs/extensions/ios.scss +++ b/ionic/components/tabs/extensions/ios.scss @@ -33,14 +33,14 @@ $tab-bar-ios-height: 49px !default; } &[tab-bar-placement="bottom"] > .tab-bar-container { - @include hairline(top, $navbar-ios-border-color); + @include hairline(top, $toolbar-ios-border-color); } &[tab-bar-placement="top"] > .tab-bar-container { - @include hairline(bottom, $navbar-ios-border-color); + @include hairline(bottom, $toolbar-ios-border-color); } - &[tab-bar-placement="top"] > .navbar-container .navbar { + &[tab-bar-placement="top"] > .toolbar-container .toolbar { @include hairline(bottom, none); } diff --git a/ionic/components/toolbar/extensions/ios.scss b/ionic/components/toolbar/extensions/ios.scss index 412daf1d7e..b72e654059 100644 --- a/ionic/components/toolbar/extensions/ios.scss +++ b/ionic/components/toolbar/extensions/ios.scss @@ -1,68 +1,76 @@ -// iOS Navbar + +// iOS Toolbar // -------------------------------------------------- $toolbar-order-ios: ( + back-button: 10, primary: 20, title: 30, secondary: 40 ); $toolbar-ios-height: 4.4rem !default; -$toolbar-ios-background: #f7f7f8 !default; $toolbar-ios-border-color: #c4c4c4 !default; - -$toolbar-ios-title-font-size: 1.7rem !default; $toolbar-ios-button-font-size: 1.7rem !default; -$toolbar-ios-button-text-color: #007aff !default; -$toolbar-ios-button-background-color: transparent !default; - -$toolbar-ios-padding: 0px 15px; +$toolbar-ios-title-font-size: 1.7rem !default; -.toolbar[mode="ios"] { - - padding: $toolbar-ios-padding; - - height: $toolbar-ios-height; - background: $toolbar-ios-background; +.nav[mode="ios"] .toolbar-container { + min-height: $toolbar-ios-height; // toolbar on top, border on bottom (default) @include hairline(bottom, $toolbar-ios-border-color); + // toolbar on bottom, border on top - &[position="bottom"]:after { + &.toolbar-bottom:after { top: 0; bottom: auto; } +} + +.toolbar[mode="ios"] { .toolbar-title { - order: map-get($toolbar-order-ios, 'title'); + order: map-get($toolbar-order-ios, title); } .toolbar-primary-item { - order: map-get($toolbar-order-ios, 'primary'); + order: map-get($toolbar-order-ios, primary); } .toolbar-secondary-item { - order: map-get($toolbar-order-ios, 'secondary'); + order: map-get($toolbar-order-ios, secondary); } ion-title { - order: map-get($toolbar-order-ios, 'title'); - text-align: center; font-size: $toolbar-ios-title-font-size; font-weight: 500; + text-align: center; + } + + .back-button { + order: map-get($toolbar-order-ios, 'back-button'); + overflow: inherit; } button, [button] { - font-size: $toolbar-ios-button-font-size; - color: $toolbar-ios-button-text-color; - border: none; padding: 0; - margin: 0 10px; - min-height: $toolbar-ios-height; + margin: 0 1rem; + min-width: 0; - background: $toolbar-ios-button-background-color; + min-height: $toolbar-ios-height; + + font-size: $toolbar-ios-button-font-size; } + + [icon] { + font-size: 2.5rem; + } + + .back-button-icon { + padding-right: 0.6rem; + } + } diff --git a/ionic/components/toolbar/extensions/material.scss b/ionic/components/toolbar/extensions/material.scss index 0959358238..bce0617181 100644 --- a/ionic/components/toolbar/extensions/material.scss +++ b/ionic/components/toolbar/extensions/material.scss @@ -1,14 +1,16 @@ -$toolbar-material-height: 6.4rem !default; -$toolbar-material-background: get-color(primary, base) !default;//#f7f7f8 !default; + +// Material Design Toolbar +// -------------------------------------------------- $toolbar-material-title-font-size: 2rem !default; -$toolbar-material-button-font-size: 2rem !default; -$toolbar-material-button-text-color: #007aff !default; +$toolbar-material-button-font-size: 24px !default; + .toolbar[mode="md"] { - padding: 0px 16px; - height: $toolbar-material-height; - background: $toolbar-material-background; + + .toolbar-inner { + padding: 0px 16px; + } .toolbar-inner-title { padding: 0; @@ -19,17 +21,19 @@ $toolbar-material-button-text-color: #007aff !default; font-weight: 500; } + .toolbar-primary-item ion-nav-items button:first-child { + margin-left: 0; + } + button, [button] { - font-size: $toolbar-material-button-font-size; - color: $toolbar-material-button-text-color; - border: none; - box-shadow: none; - padding: 0; - margin: 0 10px; + margin: 0 1rem; - min-height: $toolbar-material-height; min-width: 0; + + box-shadow: none; + font-size: $toolbar-material-button-font-size; } + } diff --git a/ionic/components/toolbar/toolbar.scss b/ionic/components/toolbar/toolbar.scss index ce4188f710..088d731470 100644 --- a/ionic/components/toolbar/toolbar.scss +++ b/ionic/components/toolbar/toolbar.scss @@ -3,17 +3,22 @@ // -------------------------------------------------- $toolbar-order: ( + backButton: 10, title: 20, primary: 30, secondary: 40 ); -$toolbar-zindex: 2; + +$toolbar-background: #f4f4f4 !default; +$toolbar-button-text-color: #007aff !default; +$toolbar-title-text-color: #000 !default; -ion-toolbar { - z-index: $toolbar-zindex; +.toolbar { position: relative; + z-index: $z-index-toolbar; + width: 100%; height: 100%; min-height: 4.4rem; @@ -23,9 +28,17 @@ ion-toolbar { align-items: center; justify-content: space-between; order: $flex-order-toolbar-top; + + background-color: $toolbar-background; + + button, + [button] { + color: $toolbar-button-text-color; + box-shadow: none; + } } -ion-toolbar[position="bottom"] { +.toolbar[position="bottom"] { order: $flex-order-toolbar-bottom; } @@ -36,7 +49,7 @@ ion-toolbar[position="bottom"] { .toolbar-title { flex: 1; - order: map-get($toolbar-order, 'title'); + order: map-get($toolbar-order, title); display: flex; align-items: center; @@ -46,7 +59,7 @@ ion-toolbar[position="bottom"] { .toolbar-inner-title { width: 100%; - padding: 0 15px; + padding: 0 1.5rem; } ion-title { @@ -61,15 +74,27 @@ ion-title { } .toolbar-primary-item { - order: map-get($toolbar-order, 'primary'); + order: map-get($toolbar-order, primary); } .toolbar-secondary-item { - order: map-get($toolbar-order, 'secondary'); + order: map-get($toolbar-order, secondary); } -.toolbar button, -.toolbar [button] { - background: transparent; - border: none; + +// Toolbar Color Generation +// -------------------------------------------------- + +@each $color, $value in $colors { + + .toolbar[#{$color}] { + background-color: get-color($color, base); + + ion-title, + button, + [button] { + color: get-color($color, inverse); + } + } + } diff --git a/ionic/config/annotations.ts b/ionic/config/annotations.ts index c83cdaa2d3..f2d631099f 100644 --- a/ionic/config/annotations.ts +++ b/ionic/config/annotations.ts @@ -142,7 +142,7 @@ function appendConfig(cls, config) { cls.delegates = config.delegates; let componentId = config.classId || (config.selector && config.selector.replace('ion-', '')); - config.host['class'] = componentId; + config.host['class'] = ((config.host['class'] || '') + ' ' + componentId).trim(); // the mode will get figured out when the component is constructed config.host['[attr.mode]'] = 'clsMode'; diff --git a/ionic/ionic.scss b/ionic/ionic.scss index b2640ae91e..61d2787c70 100755 --- a/ionic/ionic.scss +++ b/ionic/ionic.scss @@ -23,6 +23,7 @@ // Core Components @import + "components/toolbar/toolbar", "components/action-menu/action-menu", "components/alert/alert", "components/aside/aside", @@ -48,13 +49,12 @@ "components/segment/segment", "components/switch/switch", "components/tabs/tabs", - "components/toolbar/toolbar", "components/view/view"; // iOS Components @import - "components/nav-bar/extensions/ios", + "components/toolbar/extensions/ios", "components/action-menu/extensions/ios", "components/alert/extensions/ios", "components/button/extensions/ios", @@ -63,12 +63,12 @@ "components/content/extensions/ios", "components/list/extensions/ios", "components/item/extensions/ios", + "components/nav-bar/extensions/ios", "components/radio/extensions/ios", "components/search-bar/extensions/ios", "components/segment/extensions/ios", "components/switch/extensions/ios", - "components/tabs/extensions/ios", - "components/toolbar/extensions/ios"; + "components/tabs/extensions/ios"; // Material Design Components @@ -76,6 +76,7 @@ "components/material/variables", "components/material/ripple", + "components/toolbar/extensions/material", "components/app/extensions/material", "components/action-menu/extensions/material", "components/alert/extensions/material", @@ -85,8 +86,7 @@ "components/item/extensions/material", "components/list/extensions/material", "components/nav-bar/extensions/material", - "components/tabs/extensions/material", - "components/toolbar/extensions/material"; + "components/tabs/extensions/material"; // Icons