Прежде всего: arrow
- допустимое свойство Carousel, которое позволяет стрелкам вручную управлять содержимым. Он отключен по умолчанию программой antd.
Вы можете включить это так:
<Carousel arrows>
//
</Carousel>
Но вы их не увидите, потому что стиль для .ant-carousel .slick-prev
и .ant-carousel .slick-prev
прозрачный.
![стиль для стрелок карусели antd по умолчанию](https://i.stack.imgur.com/02kNE.png)
На этом этапе вы уже можете изменить стиль (пример display: block; background: red
).
Другой вариант - управлять стилем изнутри опоры, используя свойства React Slick, поскольку antd использует это под капотом для компонента Карусель.
Это пример полного компонента:
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
![пример стрелок](https://i.stack.imgur.com/kz2dK.png)
Существует селектор ::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}
/>
)
}
![введите описание изображения здесь](https://i.stack.imgur.com/krDQn.png)
Вы можете переопределить стиль 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>
)
}
Наконец, желаемый результат:
![введите описание изображения здесь](https://i.stack.imgur.com/S3vkz.png)
person
Nicolas Hevia
schedule
11.09.2020