diff --git a/packages/mdc-select/README.md b/packages/mdc-select/README.md index aec51fdc564..a11cc1a4986 100644 --- a/packages/mdc-select/README.md +++ b/packages/mdc-select/README.md @@ -97,10 +97,15 @@ style dependencies for both the mdc-list and mdc-menu for this component to func #### Select with pre-selected option +When dealing with the select component that has pre-selected values, you'll want to ensure that you +render `mdc-select__label` with the `mdc-select__label--float-above` modifier class and the selected +option with `aria-selected`. This will ensure that the label moves out of the way of the select's value +and prevents a Flash Of Un-styled Content (**FOUC**). + ```html
-
Pick a Food Group
+
Pick a Food Group
diff --git a/packages/mdc-select/foundation.js b/packages/mdc-select/foundation.js index a921b3d4e71..dbcf0151eb3 100644 --- a/packages/mdc-select/foundation.js +++ b/packages/mdc-select/foundation.js @@ -106,10 +106,6 @@ export default class MDCSelectFoundation extends MDCFoundation { }; this.cancelHandler_ = () => { this.close_(); - - if (this.selectedIndex_ === -1) { - this.adapter_.removeClassFromLabel(cssClasses.LABEL_FLOAT_ABOVE); - } }; } @@ -157,6 +153,9 @@ export default class MDCSelectFoundation extends MDCFoundation { if (this.selectedIndex_ >= 0) { selectedTextContent = this.adapter_.getTextForOptionAtIndex(this.selectedIndex_).trim(); this.adapter_.setAttrForOptionAtIndex(this.selectedIndex_, 'aria-selected', 'true'); + this.adapter_.addClassToLabel(cssClasses.LABEL_FLOAT_ABOVE); + } else { + this.adapter_.removeClassFromLabel(cssClasses.LABEL_FLOAT_ABOVE); } this.adapter_.setSelectedTextContent(selectedTextContent); } @@ -214,7 +213,6 @@ export default class MDCSelectFoundation extends MDCFoundation { const focusIndex = this.selectedIndex_ < 0 ? 0 : this.selectedIndex_; this.setMenuStylesForOpenAtIndex_(focusIndex); - this.adapter_.addClassToLabel(cssClasses.LABEL_FLOAT_ABOVE); this.adapter_.addClassToBottomLine(cssClasses.BOTTOM_LINE_ACTIVE); this.adapter_.addClass(OPEN); this.animationRequestId_ = requestAnimationFrame(() => {