diff --git a/src/dev-app/mdc-table/mdc-table-demo.html b/src/dev-app/mdc-table/mdc-table-demo.html
index 8611d129cdfa..856253ea5913 100644
--- a/src/dev-app/mdc-table/mdc-table-demo.html
+++ b/src/dev-app/mdc-table/mdc-table-demo.html
@@ -138,4 +138,34 @@
Sticky Footer
-
\ No newline at end of file
+
+
+Basic flex table
+
+
+
+ No.
+ {{element.position}}
+
+
+
+
+ Name
+ {{element.name}}
+
+
+
+
+ Weight
+ {{element.weight}}
+
+
+
+
+ Symbol
+ {{element.symbol}}
+
+
+
+
+
diff --git a/src/material-experimental/mdc-table/BUILD.bazel b/src/material-experimental/mdc-table/BUILD.bazel
index db3785c0cdef..9687fb80fa6a 100644
--- a/src/material-experimental/mdc-table/BUILD.bazel
+++ b/src/material-experimental/mdc-table/BUILD.bazel
@@ -48,6 +48,7 @@ sass_binary(
"//src/material-experimental/mdc-helpers:mdc_helpers_scss_lib",
"//src/material-experimental/mdc-helpers:mdc_scss_deps_lib",
"//src/material/core:core_scss_lib",
+ "//src/material/table:table_flex_scss_lib",
],
)
diff --git a/src/material-experimental/mdc-table/cell.ts b/src/material-experimental/mdc-table/cell.ts
index eaae19f9001f..cc3fa4df6a86 100644
--- a/src/material-experimental/mdc-table/cell.ts
+++ b/src/material-experimental/mdc-table/cell.ts
@@ -80,7 +80,7 @@ export class MatColumnDef extends CdkColumnDef {
/** Header cell template container that adds the right classes and role. */
@Directive({
- selector: 'th[mat-header-cell]',
+ selector: 'mat-header-cell, th[mat-header-cell]',
host: {
'class': 'mat-mdc-header-cell mdc-data-table__header-cell',
'role': 'columnheader',
@@ -90,7 +90,7 @@ export class MatHeaderCell extends CdkHeaderCell {}
/** Footer cell template container that adds the right classes and role. */
@Directive({
- selector: 'td[mat-footer-cell]',
+ selector: 'mat-footer-cell, td[mat-footer-cell]',
host: {
'class': 'mat-mdc-footer-cell mdc-data-table__cell',
'role': 'gridcell',
@@ -100,7 +100,7 @@ export class MatFooterCell extends CdkFooterCell {}
/** Cell template container that adds the right classes and role. */
@Directive({
- selector: 'td[mat-cell]',
+ selector: 'mat-cell, td[mat-cell]',
host: {
'class': 'mat-mdc-cell mdc-data-table__cell',
'role': 'gridcell',
diff --git a/src/material-experimental/mdc-table/row.ts b/src/material-experimental/mdc-table/row.ts
index 09d11e899962..e26097657152 100644
--- a/src/material-experimental/mdc-table/row.ts
+++ b/src/material-experimental/mdc-table/row.ts
@@ -60,7 +60,7 @@ export class MatRowDef extends CdkRowDef {
/** Footer template container that contains the cell outlet. Adds the right class and role. */
@Component({
- selector: 'tr[mat-header-row]',
+ selector: 'mat-header-row, tr[mat-header-row]',
template: CDK_ROW_TEMPLATE,
host: {
'class': 'mat-mdc-header-row mdc-data-table__header-row',
@@ -78,7 +78,7 @@ export class MatHeaderRow extends CdkHeaderRow {
/** Footer template container that contains the cell outlet. Adds the right class and role. */
@Component({
- selector: 'tr[mat-footer-row]',
+ selector: 'mat-footer-row, tr[mat-footer-row]',
template: CDK_ROW_TEMPLATE,
host: {
'class': 'mat-mdc-footer-row mdc-data-table__row',
@@ -96,7 +96,7 @@ export class MatFooterRow extends CdkFooterRow {
/** Data row template container that contains the cell outlet. Adds the right class and role. */
@Component({
- selector: 'tr[mat-row]',
+ selector: 'mat-row, tr[mat-row]',
template: CDK_ROW_TEMPLATE,
host: {
'class': 'mat-mdc-row mdc-data-table__row',
diff --git a/src/material-experimental/mdc-table/table.scss b/src/material-experimental/mdc-table/table.scss
index b02c461d3b76..150b51b5a2e7 100644
--- a/src/material-experimental/mdc-table/table.scss
+++ b/src/material-experimental/mdc-table/table.scss
@@ -1,8 +1,10 @@
@use '../../material/core/style/vendor-prefixes';
@import '@material/data-table/mixins.import';
@import '../mdc-helpers/mdc-helpers';
+@import '../../material/table/table-flex-styles';
@include mdc-data-table-core-styles($query: $mat-base-styles-without-animation-query);
+@include mat-private-table-flex-styles();
.mat-mdc-table-sticky {
@include vendor-prefixes.position-sticky;
diff --git a/src/material-experimental/mdc-table/table.ts b/src/material-experimental/mdc-table/table.ts
index 4bb0c8546110..f942c7a5d838 100644
--- a/src/material-experimental/mdc-table/table.ts
+++ b/src/material-experimental/mdc-table/table.ts
@@ -16,7 +16,7 @@ import {
import {_DisposeViewRepeaterStrategy, _VIEW_REPEATER_STRATEGY} from '@angular/cdk/collections';
@Component({
- selector: 'table[mat-table]',
+ selector: 'mat-table, table[mat-table]',
exportAs: 'matTable',
template: CDK_TABLE_TEMPLATE,
styleUrls: ['table.css'],
diff --git a/src/material/table/BUILD.bazel b/src/material/table/BUILD.bazel
index adec57fe918c..64471ffe855d 100644
--- a/src/material/table/BUILD.bazel
+++ b/src/material/table/BUILD.bazel
@@ -31,14 +31,23 @@ ng_module(
sass_library(
name = "table_scss_lib",
- srcs = glob(["**/_*.scss"]),
+ srcs = ["_table-theme.scss"],
+ deps = ["//src/material/core:core_scss_lib"],
+)
+
+sass_library(
+ name = "table_flex_scss_lib",
+ srcs = ["_table-flex-styles.scss"],
deps = ["//src/material/core:core_scss_lib"],
)
sass_binary(
name = "table_scss",
src = "table.scss",
- deps = ["//src/material/core:core_scss_lib"],
+ deps = [
+ ":table_flex_scss_lib",
+ "//src/material/core:core_scss_lib",
+ ],
)
ng_test_library(
diff --git a/src/material/table/_table-flex-styles.scss b/src/material/table/_table-flex-styles.scss
new file mode 100644
index 000000000000..a0bd715e8084
--- /dev/null
+++ b/src/material/table/_table-flex-styles.scss
@@ -0,0 +1,72 @@
+/**
+ * Flex-based table structure
+ */
+$mat-header-row-height: 56px;
+$mat-row-height: 48px;
+$mat-row-horizontal-padding: 24px;
+
+// Only use tag name selectors here since the styles are shared between MDC and non-MDC
+@mixin mat-private-table-flex-styles {
+ mat-table {
+ display: block;
+ }
+
+ mat-header-row {
+ min-height: $mat-header-row-height;
+ }
+
+ mat-row, mat-footer-row {
+ min-height: $mat-row-height;
+ }
+
+ mat-row, mat-header-row, mat-footer-row {
+ display: flex;
+ // Define a border style, but then widths default to 3px. Reset them to 0px except the bottom
+ // which should be 1px;
+ border-width: 0;
+ border-bottom-width: 1px;
+ border-style: solid;
+ align-items: center;
+ box-sizing: border-box;
+
+ // Workaround for https://goo.gl/pFmjJD in IE 11. Adds a pseudo
+ // element that will stretch the row the correct height. See:
+ // https://connect.microsoft.com/IE/feedback/details/802625
+ &::after {
+ display: inline-block;
+ min-height: inherit;
+ content: '';
+ }
+ }
+
+ mat-cell, mat-header-cell, mat-footer-cell {
+ // Note: we use `first-of-type`/`last-of-type` here in order to prevent extra
+ // elements like ripples or badges from throwing off the layout (see #11165).
+ &:first-of-type {
+ padding-left: $mat-row-horizontal-padding;
+
+ [dir='rtl'] &:not(:only-of-type) {
+ padding-left: 0;
+ padding-right: $mat-row-horizontal-padding;
+ }
+ }
+
+ &:last-of-type {
+ padding-right: $mat-row-horizontal-padding;
+
+ [dir='rtl'] &:not(:only-of-type) {
+ padding-right: 0;
+ padding-left: $mat-row-horizontal-padding;
+ }
+ }
+ }
+
+ mat-cell, mat-header-cell, mat-footer-cell {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ overflow: hidden;
+ word-wrap: break-word;
+ min-height: inherit;
+ }
+}
diff --git a/src/material/table/table.scss b/src/material/table/table.scss
index 7014bfa6c0e0..d2b2ef881ade 100644
--- a/src/material/table/table.scss
+++ b/src/material/table/table.scss
@@ -1,74 +1,7 @@
@use '../core/style/vendor-prefixes';
+@import './table-flex-styles';
-$mat-header-row-height: 56px;
-$mat-row-height: 48px;
-$mat-row-horizontal-padding: 24px;
-
-/**
- * Flex-based table structure
- */
-mat-table {
- display: block;
-}
-
-mat-header-row {
- min-height: $mat-header-row-height;
-}
-
-mat-row, mat-footer-row {
- min-height: $mat-row-height;
-}
-
-mat-row, mat-header-row, mat-footer-row {
- display: flex;
- // Define a border style, but then widths default to 3px. Reset them to 0px except the bottom
- // which should be 1px;
- border-width: 0;
- border-bottom-width: 1px;
- border-style: solid;
- align-items: center;
- box-sizing: border-box;
-
- // Workaround for https://goo.gl/pFmjJD in IE 11. Adds a pseudo
- // element that will stretch the row the correct height. See:
- // https://connect.microsoft.com/IE/feedback/details/802625
- &::after {
- display: inline-block;
- min-height: inherit;
- content: '';
- }
-}
-
-mat-cell, mat-header-cell, mat-footer-cell {
- // Note: we use `first-of-type`/`last-of-type` here in order to prevent extra
- // elements like ripples or badges from throwing off the layout (see #11165).
- &:first-of-type {
- padding-left: $mat-row-horizontal-padding;
-
- [dir='rtl'] &:not(:only-of-type) {
- padding-left: 0;
- padding-right: $mat-row-horizontal-padding;
- }
- }
-
- &:last-of-type {
- padding-right: $mat-row-horizontal-padding;
-
- [dir='rtl'] &:not(:only-of-type) {
- padding-right: 0;
- padding-left: $mat-row-horizontal-padding;
- }
- }
-}
-
-mat-cell, mat-header-cell, mat-footer-cell {
- flex: 1;
- display: flex;
- align-items: center;
- overflow: hidden;
- word-wrap: break-word;
- min-height: inherit;
-}
+@include mat-private-table-flex-styles();
/**
* Native HTML table structure