rsuite
Version:
A suite of react components
193 lines (158 loc) • 3.69 kB
text/less
@import '../../styles/common';
// Carousel
// ----------------------
.rs-carousel {
position: relative;
height: 400px;
overflow: hidden;
background-color: var(--rs-carousel-bg);
&-content {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
}
&-slider {
position: relative;
left: 0;
height: 100%;
transition: transform @carousel-animation-duration ease;
will-change: transform;
&-item {
background-color: var(--rs-carousel-bg);
float: left;
height: 100%;
width: 100%;
}
}
&-slider-after {
position: absolute;
left: 0;
height: 100%;
width: 100%;
background-color: var(--rs-carousel-bg);
top: 0;
animation: moveLeftHalf @carousel-animation-duration ease forwards;
&-vertical {
animation: moveLeftHalf-vertical @carousel-animation-duration ease forwards;
}
}
&-toolbar {
display: flex;
align-items: center;
justify-content: center;
position: absolute;
> ul {
display: flex;
flex-wrap: wrap;
list-style: none;
margin: 0;
padding: 0;
}
}
&-label-wrapper {
margin: @carousel-handler-margin;
input {
width: 0;
height: 0;
position: absolute;
opacity: 0;
}
input:checked ~ label {
background-color: var(--rs-carousel-indicator-active);
}
}
&-label {
cursor: pointer;
display: block;
background-color: var(--rs-carousel-indicator);
transition: @carousel-handler-transition;
transition-property: background, width, height;
position: relative;
&::after {
content: '';
position: absolute;
top: -1 * @carousel-handler-sense-width;
right: -1 * @carousel-handler-sense-width;
bottom: -1 * @carousel-handler-sense-width;
left: -1 * @carousel-handler-sense-width;
}
&:hover {
background-color: var(--rs-carousel-indicator-hover);
}
}
// Handler Shape
&-shape-dot &-label {
width: @carousel-dot-side-length;
height: @carousel-dot-side-length;
border-radius: 50%;
}
&-shape-bar &-label {
border-radius: (@carousel-bar-height / 2);
}
&-placement-top&-shape-bar &-label,
&-placement-bottom&-shape-bar &-label {
width: @carousel-bar-width;
height: @carousel-bar-height;
&-wrapper input:checked ~ label {
width: @carousel-bar-active-width;
}
}
&-placement-left&-shape-bar &-label,
&-placement-right&-shape-bar &-label {
width: @carousel-bar-height;
height: @carousel-bar-width;
&-wrapper input:checked ~ label {
height: @carousel-bar-active-width;
}
}
// Placement
&-placement-top &-toolbar,
&-placement-bottom &-toolbar {
left: 0;
width: 100%;
> ul {
align-items: center;
justify-content: center;
}
}
&-placement-top &-toolbar {
top: @carousel-toolbar-wrapper-margin;
}
&-placement-bottom &-toolbar {
bottom: @carousel-toolbar-wrapper-margin;
}
&-placement-left &-toolbar,
&-placement-right &-toolbar {
top: 0;
width: @carousel-dot-wrapper-side-length;
height: 100%;
> ul {
align-items: center;
justify-content: center;
flex-direction: column;
}
}
&-placement-left &-toolbar {
left: @carousel-toolbar-wrapper-margin;
}
&-placement-right &-toolbar {
right: @carousel-toolbar-wrapper-margin;
}
@keyframes moveLeftHalf {
0% {
transform: none;
}
100% {
transform: translateX(-50%);
}
}
@keyframes moveLeftHalf-vertical {
0% {
transform: none;
}
100% {
transform: translateY(-50%);
}
}
}