【问题标题】:Override style for "Collapse" of antd react component libraryantd react组件库“折叠”的覆盖样式
【发布时间】:2020-05-22 03:31:02
【问题描述】:

我在我的反应组件中使用带有 *.css 的 JSX 语法。下面是antd collapsejsx 代码。

    <Collapse
      defaultActiveKey={["1"]}
      expandIconPosition="right"
    >
      <Panel
        header="This is panel header with arrow icon"
        key="1"
      >
        <div>
          Body-123
        </div>
      </Panel>

    </Collapse>

现在,我只想为折叠的标题部分设置样式(border: "3px solid red"),我可以使用下面的 css 来完成

.ant-collapse > .ant-collapse-item > .ant-collapse-header

但问题是,我想根据 jsx 代码中的某些条件动态地执行此操作。也就是说,我有几个这样的面板,每个面板都应该有不同的边框颜色,具体取决于某些数据。

TIA

【问题讨论】:

    标签: javascript html css reactjs antd


    【解决方案1】:

    我遇到了一个类似的问题,我想有条件地设置每个 Panel 组件中标题的背景颜色,而不是内容。我选择使用 css 变量为样式表中的背景颜色提供规则。

    您可以通过样式对象添加一个带有您在 JavaScript 中派生的值的 css 变量:

    style={{ ["--header-border"]: category.border }}
    

    然后,您可以在您的 css 文件中将此值用作选择器中的规则:

    .collapse-panel-custom > .ant-collapse-header {
      border: var(--header-border, 1px solid black);
    }
    

    下面是这个方法的codepen应用于面板标题的边框:

    https://codepen.io/faltherr/pen/ZEBzeJe

    【讨论】:

      【解决方案2】:

      您可以使用className根据您的情况动态设置类,并使用类名设置边框。

      这是一个基于按钮单击来切换边框的示例:

      组件

      const App = () => {
        const [hasBorder, setBorder] = React.useState(false);
        return (
          <React.Fragment>
            <Button onClick={() => setBorder(!hasBorder)}>Set Border</Button>
            <Collapse
              className={hasBorder ? "" : "active"}
              defaultActiveKey={["1"]}
              expandIconPosition="right"
            >
              <Panel header="This is panel header with arrow icon" key="1">
                <div>Body-123</div>
              </Panel>
            </Collapse>
          </React.Fragment>
        );
      };
      

      风格

      .active.ant-collapse > .ant-collapse-item > .ant-collapse-header {
        border-top: 3px solid black;
      }
      

      在此处查看演示:https://codesandbox.io/s/suspicious-grothendieck-submf

      希望这会有所帮助!

      【讨论】:

      • 谢谢 Yash,这适用于单个“折叠”。我有一个“折叠”,几乎没有“面板”,我想根据条件更改颜色。我需要一些方法来申请“面板”,因为我循环遍历我的数据以在 1 个“折叠”内创建多个“面板”,并希望根据数据更改左边框颜色。TIA
      【解决方案3】:

      您可以有条件地设置内联样式,检查下面的代码...

      const hasBorder = true;
      <React.Fragment>
        <Collapse
          style={hasBorder ? {border: '3px solid black'} : {}}
          defaultActiveKey={["1"]}
          expandIconPosition="right"
        >
          <Panel header="This is panel header with arrow icon" key="1">
            <div>Body-123</div>
          </Panel>
        </Collapse>
      </React.Fragment>
      

      【讨论】:

      • 谢谢,我想申请“borderLeft”这样它适用于完整的“折叠”,我只想对标题(而不是内容区域)。如果我将其应用于面板,则整个(面板和内容区域)的左边框颜色会发生变化。 TIA
      猜你喜欢
      • 2020-10-16
      • 1970-01-01
      • 2019-09-28
      • 2018-06-27
      • 2014-11-25
      • 1970-01-01
      • 2019-09-01
      • 2020-07-26
      • 2017-04-02
      相关资源
      最近更新 更多