diff --git a/src/lib/tabs/_tabs-common.scss b/src/lib/tabs/_tabs-common.scss index 15d4d79e875b..f39276135edb 100644 --- a/src/lib/tabs/_tabs-common.scss +++ b/src/lib/tabs/_tabs-common.scss @@ -28,8 +28,6 @@ $mat-tab-animation-duration: 500ms !default; @mixin tab-header { overflow: hidden; position: relative; - display: flex; - flex-direction: row; flex-shrink: 0; } diff --git a/src/lib/tabs/tab-header.html b/src/lib/tabs/tab-header.html index c153956b339a..bbff3213f7e4 100644 --- a/src/lib/tabs/tab-header.html +++ b/src/lib/tabs/tab-header.html @@ -9,7 +9,9 @@
- +
+ +
diff --git a/src/lib/tabs/tab-header.scss b/src/lib/tabs/tab-header.scss index e01101c515ee..41dbdf946986 100644 --- a/src/lib/tabs/tab-header.scss +++ b/src/lib/tabs/tab-header.scss @@ -3,6 +3,7 @@ @import 'tabs-common'; .mat-tab-header { + display: flex; @include tab-header; } @@ -78,8 +79,11 @@ } .mat-tab-list { - display: flex; flex-grow: 1; position: relative; transition: transform 500ms cubic-bezier(0.35, 0, 0.25, 1); +} + +.mat-tab-labels { + display: flex; } \ No newline at end of file diff --git a/src/lib/tabs/tab-header.spec.ts b/src/lib/tabs/tab-header.spec.ts index a1e1030f0ec7..aa74d9401ca1 100644 --- a/src/lib/tabs/tab-header.spec.ts +++ b/src/lib/tabs/tab-header.spec.ts @@ -216,7 +216,7 @@ interface Tab { -
diff --git a/src/lib/tabs/tab-nav-bar/tab-nav-bar.html b/src/lib/tabs/tab-nav-bar/tab-nav-bar.html index 3b849fe4cae3..0302a530d2a5 100644 --- a/src/lib/tabs/tab-nav-bar/tab-nav-bar.html +++ b/src/lib/tabs/tab-nav-bar/tab-nav-bar.html @@ -1,2 +1,5 @@ - + + diff --git a/src/lib/tabs/tab-nav-bar/tab-nav-bar.scss b/src/lib/tabs/tab-nav-bar/tab-nav-bar.scss index ac273e1c1bb3..6d1ddfcf8b67 100644 --- a/src/lib/tabs/tab-nav-bar/tab-nav-bar.scss +++ b/src/lib/tabs/tab-nav-bar/tab-nav-bar.scss @@ -6,6 +6,11 @@ @include tab-header; } +.mat-tab-links { + display: flex; + position: relative; +} + // Wraps each link in the header .mat-tab-link { @include tab-label; diff --git a/src/lib/tabs/tab-nav-bar/tab-nav-bar.ts b/src/lib/tabs/tab-nav-bar/tab-nav-bar.ts index 27b72a8f0f36..995261e91b53 100644 --- a/src/lib/tabs/tab-nav-bar/tab-nav-bar.ts +++ b/src/lib/tabs/tab-nav-bar/tab-nav-bar.ts @@ -26,11 +26,23 @@ import {ViewportRuler} from '../../core/overlay/position/viewport-ruler'; encapsulation: ViewEncapsulation.None, }) export class MdTabNavBar { + _activeLinkChanged: boolean; + _activeLinkElement: ElementRef; + @ViewChild(MdInkBar) _inkBar: MdInkBar; - /** Animates the ink bar to the position of the active link element. */ - updateActiveLink(element: HTMLElement) { - this._inkBar.alignToElement(element); + /** Notifies the component that the active link has been changed. */ + updateActiveLink(element: ElementRef) { + this._activeLinkChanged = this._activeLinkElement != element; + this._activeLinkElement = element; + } + + /** Checks if the active link has been changed and, if so, will update the ink bar. */ + ngAfterContentChecked(): void { + if (this._activeLinkChanged) { + this._inkBar.alignToElement(this._activeLinkElement.nativeElement); + this._activeLinkChanged = false; + } } } @@ -39,6 +51,9 @@ export class MdTabNavBar { */ @Directive({ selector: '[md-tab-link], [mat-tab-link]', + host: { + '[class.mat-tab-link]': 'true', + } }) export class MdTabLink { private _isActive: boolean = false; @@ -49,11 +64,11 @@ export class MdTabLink { set active(value: boolean) { this._isActive = value; if (value) { - this._mdTabNavBar.updateActiveLink(this._element.nativeElement); + this._mdTabNavBar.updateActiveLink(this._elementRef); } } - constructor(private _mdTabNavBar: MdTabNavBar, private _element: ElementRef) {} + constructor(private _mdTabNavBar: MdTabNavBar, private _elementRef: ElementRef) {} } /**