Skip to content
This repository was archived by the owner on Jan 13, 2025. It is now read-only.

Commit 3949dbe

Browse files
authoredFeb 6, 2018
feat(card): Add primary action element with hover, focused, and pressed states (#2039)
Fixes #1709
1 parent 751dabd commit 3949dbe

File tree

5 files changed

+74
-35
lines changed

5 files changed

+74
-35
lines changed
 

‎demos/card.html

+30-20
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,16 @@
4444

4545
<section class="hero">
4646
<div class="mdc-card demo-card">
47-
<div class="mdc-card__media mdc-card__media--16-9 demo-card__media demo-card__media--16-9"></div>
48-
<div class="demo-card__primary">
49-
<h2 class="demo-card__title mdc-typography--title">Our Changing Planet</h2>
50-
<h3 class="demo-card__subtitle mdc-typography--subheading1">by Kurt Wagner</h3>
51-
</div>
52-
<div class="demo-card__secondary mdc-typography--body1">
53-
Visit ten places on our planet that are undergoing the biggest changes today.
54-
</div>
47+
<a class="mdc-card__primary-action" href="#">
48+
<div class="mdc-card__media mdc-card__media--16-9 demo-card__media demo-card__media--16-9"></div>
49+
<div class="demo-card__primary">
50+
<h2 class="demo-card__title mdc-typography--title">Our Changing Planet</h2>
51+
<h3 class="demo-card__subtitle mdc-typography--subheading1">by Kurt Wagner</h3>
52+
</div>
53+
<div class="demo-card__secondary mdc-typography--body1">
54+
Visit ten places on our planet that are undergoing the biggest changes today.
55+
</div>
56+
</a>
5557
<div class="mdc-card__actions">
5658
<div class="mdc-card__action-buttons">
5759
<button class="mdc-button mdc-card__action mdc-card__action--button">Read</button>
@@ -142,13 +144,15 @@ <h2 class="demo-card-article__title mdc-typography--headline">Asia's clean energ
142144
</div>
143145

144146
<div class="mdc-card demo-card demo-card--photo">
145-
<div class="mdc-card__media mdc-card__media--square demo-card__media">
146-
<div class="mdc-card__media-content demo-card__media-content--with-title">
147-
<div class="demo-card__media-title mdc-typography--subheading2">
148-
Vacation Photos
147+
<a class="mdc-card__primary-action demo-card__primary-action" href="#">
148+
<div class="mdc-card__media mdc-card__media--square demo-card__media">
149+
<div class="mdc-card__media-content demo-card__media-content--with-title">
150+
<div class="demo-card__media-title mdc-typography--subheading2">
151+
Vacation Photos
152+
</div>
149153
</div>
150154
</div>
151-
</div>
155+
</a>
152156
<div class="mdc-card__actions mdc-card__action-icons">
153157
<i class="mdc-icon-toggle material-icons mdc-card__action mdc-card__action--icon"
154158
tabindex="0"
@@ -179,14 +183,16 @@ <h2 class="demo-card-article__title mdc-typography--headline">Asia's clean energ
179183
</div>
180184

181185
<div class="mdc-card demo-card demo-card--music">
182-
<div class="demo-card__music-row">
183-
<div class="mdc-card__media mdc-card__media--square demo-card__media demo-card__media--music"></div>
184-
<div class="demo-card__music-info">
185-
<div class="demo-card__music-title mdc-typography--headline">Rozes</div>
186-
<div class="demo-card__music-artist mdc-typography--body1">Under the Grave</div>
187-
<div class="demo-card__music-year mdc-typography--body1">(2016)</div>
186+
<a class="mdc-card__primary-action demo-card__primary-action" href="#">
187+
<div class="demo-card__music-row">
188+
<div class="mdc-card__media mdc-card__media--square demo-card__media demo-card__media--music"></div>
189+
<div class="demo-card__music-info">
190+
<div class="demo-card__music-title mdc-typography--headline">Rozes</div>
191+
<div class="demo-card__music-artist mdc-typography--body1">Under the Grave</div>
192+
<div class="demo-card__music-year mdc-typography--body1">(2016)</div>
193+
</div>
188194
</div>
189-
</div>
195+
</a>
190196
<hr class="mdc-list-divider">
191197
<div class="mdc-card__actions">
192198
<div class="mdc-card__action-buttons demo-card__action-buttons--text-only">Rate this album</div>
@@ -256,6 +262,10 @@ <h2 class="demo-card-article__title mdc-typography--headline">Asia's clean energ
256262
[].forEach.call(document.querySelectorAll('.mdc-ripple-surface'), function(surface) {
257263
mdc.ripple.MDCRipple.attachTo(surface);
258264
});
265+
266+
[].forEach.call(document.querySelectorAll('.mdc-card__primary-action'), function(el) {
267+
mdc.ripple.MDCRipple.attachTo(el);
268+
});
259269
});
260270
</script>
261271
</body>

‎demos/card.scss

+1-1
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@
153153

154154
.demo-card__media--music {
155155
width: 110px;
156-
border-top-left-radius: inherit; // for music card
156+
border-top-left-radius: inherit;
157157

158158
@include mdc-rtl {
159159
border-top-left-radius: 0;

‎packages/mdc-card/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ CSS Class | Description
172172
--- | ---
173173
`mdc-card` | Mandatory, for the card element
174174
`mdc-card--stroked` | Removes the shadow and displays a hairline stroke instead
175+
`mdc-card__primary-action` | The main tappable area of the card. Typically contains most (or all) card content _except_ `mdc-card__actions`. Only applicable to cards that have a primary action that the main surface should trigger.
175176
`mdc-card__media` | Media area that displays a custom `background-image` with `background-size: cover`
176177
`mdc-card__media--square` | Automatically scales the media area's height to equal its width
177178
`mdc-card__media--16-9` | Automatically scales the media area's height according to its width, maintaining a 16:9 aspect ratio

‎packages/mdc-card/_mixins.scss

+8-1
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,17 @@
4343
// Private
4444
//
4545

46-
@mixin mdc-card-row-layout_($display: flex) {
46+
@mixin mdc-card-container-layout_ {
47+
display: flex;
48+
flex-direction: column;
49+
box-sizing: border-box;
50+
}
51+
52+
@mixin mdc-card-actions-layout_($display: flex) {
4753
display: $display;
4854
flex-direction: row;
4955
align-items: center;
56+
box-sizing: border-box;
5057
}
5158

5259
@mixin mdc-card-media-aspect-ratio-base_ {

‎packages/mdc-card/mdc-card.scss

+34-13
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,7 @@
2727
@include mdc-card-fill-color(background);
2828
@include mdc-card-corner-radius(2px);
2929
@include mdc-elevation(2);
30-
31-
display: flex;
32-
flex-direction: column;
33-
box-sizing: border-box;
30+
@include mdc-card-container-layout_;
3431
}
3532

3633
.mdc-card--stroked {
@@ -48,7 +45,7 @@
4845
.mdc-card__media {
4946
@include mdc-card-media-aspect-ratio-base_;
5047

51-
position: relative;
48+
position: relative; // Child element `__media-content` has `position: absolute`
5249
box-sizing: border-box;
5350
background-repeat: no-repeat;
5451
background-size: cover;
@@ -81,14 +78,41 @@
8178
box-sizing: border-box;
8279
}
8380

81+
//
82+
// Primary action
83+
//
84+
85+
.mdc-card__primary-action {
86+
@include mdc-ripple-surface;
87+
@include mdc-ripple-radius-bounded;
88+
@include mdc-states;
89+
@include mdc-card-container-layout_;
90+
91+
position: relative; // Needed to prevent the ripple wash from overflowing the container in IE and Edge
92+
outline: none;
93+
color: inherit;
94+
text-decoration: none;
95+
overflow: hidden;
96+
cursor: pointer;
97+
}
98+
99+
.mdc-card__primary-action:first-child {
100+
border-top-left-radius: inherit;
101+
border-top-right-radius: inherit;
102+
}
103+
104+
.mdc-card__primary-action:last-child {
105+
border-bottom-left-radius: inherit;
106+
border-bottom-right-radius: inherit;
107+
}
108+
84109
//
85110
// Action row
86111
//
87112

88113
.mdc-card__actions {
89-
@include mdc-card-row-layout_;
114+
@include mdc-card-actions-layout_;
90115

91-
box-sizing: border-box;
92116
min-height: 52px;
93117
padding: 8px;
94118
}
@@ -99,9 +123,7 @@
99123

100124
.mdc-card__action-buttons,
101125
.mdc-card__action-icons {
102-
@include mdc-card-row-layout_;
103-
104-
box-sizing: border-box;
126+
@include mdc-card-actions-layout_;
105127
}
106128

107129
.mdc-card__action-icons {
@@ -120,10 +142,9 @@
120142
//
121143

122144
.mdc-card__action {
123-
@include mdc-card-row-layout_(inline-flex);
145+
@include mdc-card-actions-layout_(inline-flex);
124146

125-
box-sizing: border-box;
126-
min-width: auto;
147+
justify-content: center;
127148
cursor: pointer;
128149
user-select: none;
129150

0 commit comments

Comments
 (0)
This repository has been archived.