如何改变 Ant-Design 'Select' 组件的样式?
How to change the style of a Ant-Design 'Select' component?
假设我想将 Select 组件的标准白色背景颜色更改为绿色。
我的尝试...
<Select
style={{ backgroundColor: 'green' }}>
// Options...
</Select>
...没做。
有人能指出我正确的方向吗?
[编辑]
我最终使用了 Jesper We 中建议的方法。
覆盖所有选择的颜色...
.ant-select-selection {
background-color: transparent;
}
...然后我可以单独设置 Select 组件的样式。
<Select>
渲染了一整套 <div>
s,你需要看看生成的 HTML 元素树来理解你在做什么。不能通过style属性来做,需要在CSS.
中做
附加背景颜色的正确位置是
.ant-select-selection {
background-color: green;
}
这将使您的所有选择变为绿色。如果您想为不同的选择使用不同的颜色,请给它们单独的 className
。
尝试使用 dropdownStyle 而不是样式。
<Select
dropdownStyle={{ backgroundColor: 'green' }}>
// Options...
</Select>
dropdownStyle 是 select 道具之一。
参考:antd select
对于我的带有 Select 元素的表单,在 render
中有一些代码:
const stateTasksOptions =
this.tasksStore.filters.init.state.map(item =>
<Select.Option key={item.id} value={item.id} title={<span className={`${item.id}Label`}>{item.title}</span>}>
<span className={`${item.id}Label`}>{item.title}</span> - <span class="normal-text">{item.help}</span>
</Select.Option>
)
return (
....
<Select
mode="multiple"
value={this.tasksStore.filters.selected.state.map(d => d)}
onChange={this.handleTasksStatus}
optionLabelProp="title"
>
{stateTasksOptions}
</Select>
....
)
还有一些 css 用于着色。
结果:
对于以上所有答案,您不能有条件地更改标签的样式,但可以使用以下方法。
您可以随意更改 select 下拉列表标签的样式。
您可以使用 select 的 dropdownRender,它接受 2 个参数
- 菜单节点
- 道具
使用 props children 属性 到达每个标签并更改样式,您可以根据需要有条件地更改样式。
以下是代码沙箱
的示例link供参考
这可能不是一种有效的方法,但您现在可以使用它来满足您的业务需求。
谢谢
他们用 ant design v4 实现了这个特性:
https://github.com/ant-design/ant-design/pull/21064
但在盲目地从 v3 升级到 v4 之前要当心 - 有很多变化:
https://github.com/ant-design/ant-design/issues/20661
有人说选择器是
.ant-select-selection {...
不过应该是选择器如下:
.ant-select-selector {
background-color: green;
}
来自他们的官方文档https://pro.ant.design/docs/style
覆盖组件样式
由于项目的特殊需要,我们经常会遇到覆盖组件样式的需求,这里简单举个例子。
antd Select multi-select状态下,默认会显示所有select项,这里我们添加一个限制高度,当内容超出这个高度时显示滚动条.
// TestPage.ts
import { Select } from 'antd';
import styles from './TestPage.less';
const Option = Select.Option;
const children = [];
for (let i = 10; i < 36; i++) {
children.push(<Option key={i.toString(36) + i}>{i.toString(36) + i}</Option>);
}
ReactDOM.render(
<Select
mode="multiple"
style={{ width: 300 }}
placeholder="Please select"
className={styles.customSelect}
>
{children}
</Select>,
mountNode,
);
/* TestPage.less */
.customSelect {
:global {
.ant-select-selection {
max-height: 51px;
overflow: auto;
}
}
}
需要注意两点:
导入的antd组件class名称没有被CSS模块翻译,所以覆盖class名称.ant-select-selection必须放在 :global 中。
由于前面的注释,覆盖是全局的。为避免影响其他 Select 组件,该设置需要用额外的 class 名称包装以添加范围限制
在angular中,可以用ng-deep覆盖样式
::ng-deep .ant-select-selector {
background-color: red;
}
假设我想将 Select 组件的标准白色背景颜色更改为绿色。
我的尝试...
<Select
style={{ backgroundColor: 'green' }}>
// Options...
</Select>
...没做。
有人能指出我正确的方向吗?
[编辑]
我最终使用了 Jesper We 中建议的方法。
覆盖所有选择的颜色...
.ant-select-selection {
background-color: transparent;
}
...然后我可以单独设置 Select 组件的样式。
<Select>
渲染了一整套 <div>
s,你需要看看生成的 HTML 元素树来理解你在做什么。不能通过style属性来做,需要在CSS.
附加背景颜色的正确位置是
.ant-select-selection {
background-color: green;
}
这将使您的所有选择变为绿色。如果您想为不同的选择使用不同的颜色,请给它们单独的 className
。
尝试使用 dropdownStyle 而不是样式。
<Select
dropdownStyle={{ backgroundColor: 'green' }}>
// Options...
</Select>
dropdownStyle 是 select 道具之一。
参考:antd select
对于我的带有 Select 元素的表单,在 render
中有一些代码:
const stateTasksOptions =
this.tasksStore.filters.init.state.map(item =>
<Select.Option key={item.id} value={item.id} title={<span className={`${item.id}Label`}>{item.title}</span>}>
<span className={`${item.id}Label`}>{item.title}</span> - <span class="normal-text">{item.help}</span>
</Select.Option>
)
return (
....
<Select
mode="multiple"
value={this.tasksStore.filters.selected.state.map(d => d)}
onChange={this.handleTasksStatus}
optionLabelProp="title"
>
{stateTasksOptions}
</Select>
....
)
还有一些 css 用于着色。
结果:
对于以上所有答案,您不能有条件地更改标签的样式,但可以使用以下方法。
您可以随意更改 select 下拉列表标签的样式。 您可以使用 select 的 dropdownRender,它接受 2 个参数
- 菜单节点
- 道具
使用 props children 属性 到达每个标签并更改样式,您可以根据需要有条件地更改样式。
以下是代码沙箱
的示例link供参考这可能不是一种有效的方法,但您现在可以使用它来满足您的业务需求。
谢谢
他们用 ant design v4 实现了这个特性:
https://github.com/ant-design/ant-design/pull/21064
但在盲目地从 v3 升级到 v4 之前要当心 - 有很多变化:
https://github.com/ant-design/ant-design/issues/20661
有人说选择器是
.ant-select-selection {...
不过应该是选择器如下:
.ant-select-selector {
background-color: green;
}
来自他们的官方文档https://pro.ant.design/docs/style
覆盖组件样式 由于项目的特殊需要,我们经常会遇到覆盖组件样式的需求,这里简单举个例子。
antd Select multi-select状态下,默认会显示所有select项,这里我们添加一个限制高度,当内容超出这个高度时显示滚动条.
// TestPage.ts
import { Select } from 'antd';
import styles from './TestPage.less';
const Option = Select.Option;
const children = [];
for (let i = 10; i < 36; i++) {
children.push(<Option key={i.toString(36) + i}>{i.toString(36) + i}</Option>);
}
ReactDOM.render(
<Select
mode="multiple"
style={{ width: 300 }}
placeholder="Please select"
className={styles.customSelect}
>
{children}
</Select>,
mountNode,
);
/* TestPage.less */
.customSelect {
:global {
.ant-select-selection {
max-height: 51px;
overflow: auto;
}
}
}
需要注意两点:
导入的antd组件class名称没有被CSS模块翻译,所以覆盖class名称.ant-select-selection必须放在 :global 中。 由于前面的注释,覆盖是全局的。为避免影响其他 Select 组件,该设置需要用额外的 class 名称包装以添加范围限制
在angular中,可以用ng-deep覆盖样式
::ng-deep .ant-select-selector {
background-color: red;
}