diff --git a/src/components/sidenav/sidenav-transitions.scss b/src/components/sidenav/sidenav-transitions.scss
index fd9c03a131c0..f79c0165d47d 100644
--- a/src/components/sidenav/sidenav-transitions.scss
+++ b/src/components/sidenav/sidenav-transitions.scss
@@ -5,15 +5,14 @@
:host {
- & > .md-sidenav-backdrop {
+ > .md-sidenav-backdrop {
&.md-sidenav-shown {
transition: background-color $swift-ease-out-duration $swift-ease-out-timing-function;
}
}
- & > md-content {
- transition: left $swift-ease-out-duration $swift-ease-out-timing-function,
- right $swift-ease-out-duration $swift-ease-out-timing-function;
+ > md-content {
+ transition: transform $swift-ease-out-duration $swift-ease-out-timing-function;
}
> md-sidenav {
diff --git a/src/components/sidenav/sidenav.html b/src/components/sidenav/sidenav.html
index 1e50a4e3b0e4..0eb71a98edd6 100644
--- a/src/components/sidenav/sidenav.html
+++ b/src/components/sidenav/sidenav.html
@@ -3,9 +3,6 @@
-
+
diff --git a/src/components/sidenav/sidenav.scss b/src/components/sidenav/sidenav.scss
index ae171487333a..add78263ad0c 100644
--- a/src/components/sidenav/sidenav.scss
+++ b/src/components/sidenav/sidenav.scss
@@ -12,12 +12,12 @@ $md-sidenav-push-background-color: md-color($md-background, dialog) !default;
/**
- * Mixin to help with defining LTR/RTL 'transform: translateX()' values.
+ * Mixin to help with defining LTR/RTL 'transform: translate3d()' values.
* @param $open The translation value when the sidenav is opened.
* @param $close The translation value when the sidenav is closed.
*/
@mixin md-sidenav-transition($open, $close) {
- transform: translateX($close);
+ transform: translate3d($close, 0, 0);
&.md-sidenav-closed {
// We use 'visibility: hidden | visible' because 'display: none' will not animate any
@@ -27,18 +27,18 @@ $md-sidenav-push-background-color: md-color($md-background, dialog) !default;
visibility: hidden;
}
&.md-sidenav-closing {
- transform: translateX($close);
+ transform: translate3d($close, 0, 0);
will-change: transform;
}
&.md-sidenav-opening {
@include md-elevation(1);
visibility: visible;
- transform: translateX($open);
+ transform: translate3d($open, 0, 0);
will-change: transform;
}
&.md-sidenav-opened {
@include md-elevation(1);
- transform: translateX($open);
+ transform: translate3d($open, 0, 0);
}
}
@@ -60,7 +60,7 @@ $md-sidenav-push-background-color: md-color($md-background, dialog) !default;
@include md-stacking-context();
box-sizing: border-box;
- overflow-y: scroll;
+ overflow-y: auto;
-webkit-overflow-scrolling: touch;
// TODO(hansl): Update this with a more robust solution.
diff --git a/src/components/sidenav/sidenav.ts b/src/components/sidenav/sidenav.ts
index 9367131754fd..055733128739 100644
--- a/src/components/sidenav/sidenav.ts
+++ b/src/components/sidenav/sidenav.ts
@@ -372,6 +372,29 @@ export class MdSidenavLayout implements AfterContentInit {
getPositionRight() {
return this._getSidenavEffectiveWidth(this._right, 'push');
}
+
+ /**
+ * Returns the horizontal offset for the content area. There should never be a value for both
+ * left and right, so by subtracting the right value from the left value, we should always get
+ * the appropriate offset.
+ * @internal
+ */
+ getPositionOffset() {
+ return this.getPositionLeft() - this.getPositionRight();
+ }
+
+ /**
+ * This is using [ngStyle] rather than separate [style...] properties because [style.transform]
+ * doesn't seem to work right now.
+ * @internal
+ */
+ getStyles() {
+ return {
+ marginLeft: `${this.getMarginLeft()}px`,
+ marginRight: `${this.getMarginRight()}px`,
+ transform: `translate3d(${this.getPositionOffset()}px, 0, 0)`
+ };
+ }
}