首先:arrow
是一个有效的 Carousel 属性,可以让箭头手动控制内容。antd默认禁用它。
您可以像这样启用它:
<Carousel arrows>
//
</Carousel>
但是您不会看到它们,因为.ant-carousel .slick-prev
and的样式.ant-carousel .slick-prev
是透明的。

此时您已经可以覆盖样式(示例display: block; background: red
)。
另一种选择是使用React Slick属性从 prop 内部控制样式,因为 antd 在 Carousel 组件的底层使用它。
这是一个完整的组件示例:
import React from 'react'
import { Row, Col, Carousel } from 'antd'
const contentStyle = {
height: '160px',
color: '#fff',
lineHeight: '160px',
textAlign: 'center',
background: '#364d79'
}
// from https://react-slick.neostack.com/docs/example/custom-arrows
const SampleNextArrow = props => {
const { className, style, onClick } = props
return (
<div
className={className}
style={{ ...style, display: 'block', background: 'red' }}
onClick={onClick}
/>
)
}
const SamplePrevArrow = props => {
const { className, style, onClick } = props
return (
<div
className={className}
style={{ ...style, display: 'block', background: 'green' }}
onClick={onClick}
/>
)
}
const settings = {
nextArrow: <SampleNextArrow />,
prevArrow: <SamplePrevArrow />
}
const CarouselArrows = () => {
return (
<>
<Row justify="center">
<Col span={16}>
<Carousel arrows {...settings}>
<div>
<h3 style={contentStyle}>1</h3>
</div>
<div>
<h3 style={contentStyle}>2</h3>
</div>
<div>
<h3 style={contentStyle}>3</h3>
</div>
<div>
<h3 style={contentStyle}>4</h3>
</div>
</Carousel>
</Col>
</Row>
</>
)
}
export default CarouselArrows

有一个::before
带有content
属性的选择器有点搞砸了样式(您不能从内联样式中覆盖它)。您可以利用它并将箭头功能更改为:
const SampleNextArrow = props => {
const { className, style, onClick } = props
return (
<div
className={className}
style={{ ...style, display: 'block', background: 'red' }}
onClick={onClick}
/>
)
}
const SamplePrevArrow = props => {
const { className, style, onClick } = props
return (
<div
className={className}
style={{ ...style, display: 'block', background: 'green' }}
onClick={onClick}
/>
)
}

您可以覆盖默认的 antd 样式以删除::before
选择器并包含图标。
在 LESS 文件中:
.ant-carousel {
.slick-next {
&::before {
content: '';
}
}
.slick-prev {
&::before {
content: '';
}
}
}
在您的组件中(暗示您正在使用上面示例中提供的组件):
import { LeftOutlined, RightOutlined } from '@ant-design/icons'
// ...
const SampleNextArrow = props => {
const { className, style, onClick } = props
return (
<div
className={className}
style={{
...style,
color: 'black',
fontSize: '15px',
lineHeight: '1.5715'
}}
onClick={onClick}
>
<RightOutlined />
</div>
)
}
const SamplePrevArrow = props => {
const { className, style, onClick } = props
return (
<div
className={className}
style={{
...style,
color: 'black',
fontSize: '15px',
lineHeight: '1.5715'
}}
onClick={onClick}
>
<LeftOutlined />
</div>
)
}
最后,所需的输出:
