shineout
Version:
Shein 前端组件库
346 lines (292 loc) • 7.04 kB
text/less
@import '../../styles/variables.less';
@import '../../styles/themes/@{so-theme}.less';
@carousel-arrow-bg: hsla(0, 0%, 100%, 0.3);
@carousel-arrow-bg-hover:hsla(0,0%,100%,.5);
@carousel-arrow-color: #fff;
@carousel-arrow-circle-size: 24px;
@carousel-arrow-circle-margin: 12px;
@carousel-arrow-size: 8px;
@carousel-arrow-border: 1px;
@carousel-prefix: ~'@{so-prefix}-carousel';
.@{carousel-prefix} {
@keyframes-r2c: ~'@{carousel-prefix}-r2c';
@keyframes-c2r: ~'@{carousel-prefix}-c2r';
@keyframes-l2c: ~'@{carousel-prefix}-l2c';
@keyframes-c2l: ~'@{carousel-prefix}-c2l';
@keyframes-t2c: ~'@{carousel-prefix}-t2c';
@keyframes-c2t: ~'@{carousel-prefix}-c2t';
@keyframes-b2c: ~'@{carousel-prefix}-b2c';
@keyframes-c2b: ~'@{carousel-prefix}-c2b';
@keyframes-fade-in: ~'@{carousel-prefix}-fade-in';
@keyframes-fade-out: ~'@{carousel-prefix}-fade-out';
@keyframes @keyframes-r2c {
0% {
transform: translateX(100%);
left: @carousel-caption-color;
}
100% {
transform: translateX(0);
}
}
@keyframes @keyframes-c2r {
0% {
transform: translateX(0);
}
100% {
transform: translateX(100%);
}
}
@keyframes @keyframes-l2c {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(0);
}
}
@keyframes @keyframes-c2l {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-100%);
}
}
@keyframes @keyframes-t2c {
0% {
transform: translateY(-100%);
}
100% {
transform: translateY(0);
}
}
@keyframes @keyframes-c2t {
0% {
transform: translateY(0);
}
100% {
transform: translateY(-100%);
}
}
@keyframes @keyframes-b2c {
0% {
transform: translateY(100%);
}
100% {
transform: translateY(0);
}
}
@keyframes @keyframes-c2b {
0% {
transform: translateY(0);
}
100% {
transform: translateY(100%);
}
}
@keyframes @keyframes-fade-in {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes @keyframes-fade-out {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
position: relative;
overflow: hidden;
&-rtl {
direction: rtl;
text-align: right;
}
&-item {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
& > * {
width: 100%;
height: 100%;
}
&-current {
z-index: 10;
}
&-pre {
z-index: 9;
}
}
&-slide&-forward {
.@{carousel-prefix}-item-current {
animation: @keyframes-r2c @carousel-duration ease-in-out;
}
.@{carousel-prefix}-item-pre {
animation: @keyframes-c2l @carousel-duration ease-in-out;
}
}
&-slide&-backward {
.@{carousel-prefix}-item-current {
animation: @keyframes-l2c @carousel-duration ease-in-out;
}
.@{carousel-prefix}-item-pre {
animation: @keyframes-c2r @carousel-duration ease-in-out;
}
}
&-slide-y&-forward {
.@{carousel-prefix}-item-current {
animation: @keyframes-b2c @carousel-duration ease-in-out;
}
.@{carousel-prefix}-item-pre {
animation: @keyframes-c2t @carousel-duration ease-in-out;
}
}
&-slide-y&-backward {
.@{carousel-prefix}-item-current {
animation: @keyframes-t2c @carousel-duration ease-in-out;
}
.@{carousel-prefix}-item-pre {
animation: @keyframes-c2b @carousel-duration ease-in-out;
}
}
&-fade {
.@{carousel-prefix}-item-current {
animation: @keyframes-fade-in @carousel-duration ease-in-out;
}
}
&-indicator {
position: absolute;
z-index: 100;
bottom: @carousel-indicator-position;
a {
display: block;
width: @carousel-indicator-size;
height: @carousel-indicator-size;
margin-right: @carousel-indicator-margin;
border: solid 1px @carousel-indicator-border;
background-color: @carousel-indicator-bg;
border-radius: 50%;
color: @carousel-indicator-color;
float: left;
&:last-child {
margin-right: 0;
}
&:hover,
&:focus {
text-decoration: none;
}
}
&&-left {
left: @carousel-indicator-position;
}
&&-center {
left: 50%;
transform: translateX(-50%);
}
&&-right {
right: @carousel-indicator-position;
}
a&-active {
background-color: @carousel-indicator-active-bg;
color: @carousel-indicator-active-color;
}
&-number a {
width: @carousel-indicator-number-size;
height: @carousel-indicator-number-size;
border-radius: 1px;
font-size: @carousel-indicator-font-size;
line-height: @carousel-indicator-number-size;
text-align: center;
}
&-line a {
width: @carousel-indicator-line-width;
height: @carousel-indicator-line-height;
border-width: 0;
background-color: @carousel-indicator-line-bg;
border-radius: 0;
}
&-line a&-active {
width: @carousel-indicator-line-width + 4;
background-color: @carousel-indicator-line-active-bg;
}
}
&-slide-y &-indicator {
&.@{carousel-prefix}-indicator-left,
&.@{carousel-prefix}-indicator-right {
bottom: 50%;
transform: translate(0, 50%);
a {
margin-right: 0;
margin-bottom: @carousel-indicator-margin;
clear: both;
&:last-child {
margin: 0;
}
}
}
&.@{carousel-prefix}-indicator-left,
&.@{carousel-prefix}-indicator-right {
&.@{carousel-prefix}-indicator-line a {
width: @carousel-indicator-line-height;
height: @carousel-indicator-line-width;
&.@{carousel-prefix}-indicator-active {
height: @carousel-indicator-line-width + 4;
}
}
}
}
&-arrow {
&>div {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: @carousel-arrow-circle-size;
height: @carousel-arrow-circle-size;;
border-radius: 50%;
color: @carousel-arrow-color;
background-color: @carousel-arrow-bg;
z-index: 100;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
&::after {
content: " ";
width: @carousel-arrow-size;
height: @carousel-arrow-size;
display: block;
border-width: @carousel-arrow-border @carousel-arrow-border 0px 0px;
border-style: solid;
border-color: currentColor;
}
&:hover {
background-color: @carousel-arrow-bg-hover;
}
}
&-hover > div {
opacity: 0;
transition: opacity .3s;
.@{carousel-prefix}:hover & {
opacity: 1;
}
}
&-left {
left: 12px;
&::after {
transform: translateX(35%) rotate(-135deg) ;
}
}
&-right {
right: 12px;
&::after {
transform: translateX(-15%) rotate(45deg) ;
}
}
}
}