Skip to content

Commit d349e85

Browse files
authored
Fix iOS and Safari menu styles (#5295)
1 parent 192e66d commit d349e85

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

packages/@adobe/spectrum-css-temp/components/menu/skin.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ governing permissions and limitations under the License.
2020
border-color: var(--spectrum-popover-border-color);
2121
background-color: var(--spectrum-popover-background-color);
2222
filter: drop-shadow(0 var(--spectrum-popover-shadow-offset-y) var(--spectrum-popover-shadow-blur) var(--spectrum-popover-shadow-color));
23+
/* explicitly adding this webkit prefix may fix the bug where the drop-shadow remains dirty */
24+
/* https://stackoverflow.com/questions/56478925/safari-drop-shadow-filter-remains-visible-even-with-hidden-element */
25+
-webkit-filter: drop-shadow(0 var(--spectrum-popover-shadow-offset-y) var(--spectrum-popover-shadow-blur) var(--spectrum-popover-shadow-color));
26+
will-change: filter;
2327
}
2428

2529
.spectrum-Menu {

packages/@react-spectrum/menu/src/ContextualHelpTrigger.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,18 @@ function ContextualHelpTrigger(props: InternalMenuDialogTriggerProps): ReactElem
4646
}
4747
}
4848
}});
49+
let isMobile = useIsMobileDevice();
4950
let slots = {};
5051
if (isUnavailable) {
5152
slots = {
52-
dialog: {UNSAFE_className: classNames(helpStyles, 'react-spectrum-ContextualHelp-dialog', classNames(styles, 'spectrum-Menu-subdialog'))},
53+
dialog: {UNSAFE_className: classNames(helpStyles, 'react-spectrum-ContextualHelp-dialog', classNames(styles, !isMobile ? 'spectrum-Menu-subdialog' : ''))},
5354
content: {UNSAFE_className: helpStyles['react-spectrum-ContextualHelp-content']},
5455
footer: {UNSAFE_className: helpStyles['react-spectrum-ContextualHelp-footer']}
5556
};
5657
}
5758
let [trigger] = React.Children.toArray(props.children);
5859
let [, content] = props.children as [ReactElement, ReactElement];
5960

60-
let isMobile = useIsMobileDevice();
61-
6261
let onExit = () => {
6362
// if focus was already moved back to a menu item, don't need to do anything
6463
if (!menu.current.contains(document.activeElement)) {

packages/@react-spectrum/menu/src/Menu.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* governing permissions and limitations under the License.
1111
*/
1212

13-
import {classNames, useDOMRef, useStyleProps} from '@react-spectrum/utils';
13+
import {classNames, useDOMRef, useIsMobileDevice, useStyleProps} from '@react-spectrum/utils';
1414
import {DOMRef} from '@react-types/shared';
1515
import {FocusScope} from '@react-aria/focus';
1616
import {MenuContext, MenuStateContext} from './context';
@@ -35,11 +35,12 @@ function Menu<T extends object>(props: SpectrumMenuProps<T>, ref: DOMRef<HTMLDiv
3535
let {menuProps} = useMenu(completeProps, state, domRef);
3636
let {styleProps} = useStyleProps(completeProps);
3737
useSyncRef(contextProps, domRef);
38+
let isMobile = useIsMobileDevice();
3839

3940
return (
4041
<MenuStateContext.Provider value={{state, container: scopedRef, menu: domRef}}>
4142
<FocusScope contain={state.expandedKeys.size > 0}>
42-
<div className={classNames(styles, 'spectrum-Menu-wrapper')}>
43+
<div className={classNames(styles, !isMobile ? 'spectrum-Menu-wrapper' : '')}>
4344
<div
4445
{...menuProps}
4546
{...styleProps}

0 commit comments

Comments
 (0)