【问题标题】:Best way to dim/disable a div in Material-UI?在 Material-UI 中调暗/禁用 div 的最佳方法?
【发布时间】:2020-11-02 05:21:32
【问题描述】:

在我的应用程序中,我有 divs,我想根据组件状态(例如加载)来调暗和禁用鼠标事件。我想出的初始方法是有一个辅助函数,它返回一个内联样式,用于调暗元素并禁用其上的指针事件,给定一个布尔值:

const disableOnTrue = (flag) => {
    return {
        opacity: flag ? 0.15 : 1,
        pointerEvents: flag ? "none" : "initial"
    }
}

并在这样的元素上使用它:

{loading && {/** render a loading circle */}}
<div style={disableOnTrue(this.state.loading)}>{/** stuff to be dimmed & disabled while loading */}</div>

在禁用的div中,有Material-UI Buttons。然而,事实证明,他们并不关心 pointerEvents 是否在其父 div 上被禁用,并且仍然可点击,这是一个大问题。所以,在Buttons 我必须设置disabled={loading}。然后,这会使Buttons 本身变暗,这不必要地与disableOnTrue 的降低opacity 复合,这意味着我需要添加一些自定义样式来改善它;我希望整个div 被禁用,而不是让Button 看起来特别禁用。

我也尝试过使用 Material 中的 Backdrop 组件,但除了整个视口之外,无法让它变暗。

在我在整个应用程序中实施任何类型的 hacky 解决方案之前,我想我应该在这里询问是否有一种干净的方法来实现我所缺少的。找了好久都没找到。

【问题讨论】:

  • 使用你正在使用的 MUI 元素的 material-ui styling 和 CSS 类名?
  • @DrewReese 你能详细说明一下这对我的问题有什么帮助吗?
  • 我相信您可能面临的问题是不透明度,但是通过使用 MUI 的样式 API,您可以直接访问/设置所用 DOM 元素的样式,而不是使用大的钝 div 来平等地影响所有包裹的元素.许多 MUI 组件也已经使用 disabled 属性来“将它们变灰”或使其无法交互。

标签: html css reactjs material-ui


【解决方案1】:

我将“禁用”的概念分为两​​个功能:

const dimOnTrue = (flag) => {
    return {
        opacity: flag ? 0.15 : 1,
    }
}

const disableOnTrue = (flag) => {
    return {
        pointerEvents: flag ? 'none' : 'initial'
    }
}

分别用于应变暗的 div 和应禁用的输入。

【讨论】:

    猜你喜欢
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2020-03-17
    • 2020-04-16
    相关资源
    最近更新 更多