@exadel/esl
Version:
Exadel Smart Library (ESL) is the lightweight custom elements library that provide a set of super-flexible components
206 lines (205 loc) • 5.23 kB
CSS
:root {
--esl-slide-initial-size: 100%;
--esl-carousel-side-space: 5px;
}
esl-carousel {
position: relative;
display: block;
max-width: 100%;
box-sizing: content-box;
margin: calc(var(--esl-carousel-side-space, 0) * -1);
padding: var(--esl-carousel-side-space, 0);
/* stylelint-disable */
overflow: hidden;
overflow: clip;
/* stylelint-enable */
}
esl-carousel:not(.esl-carousel) [esl-carousel-slide] {
max-width: 100%;
max-height: 100%;
}
esl-carousel.esl-carousel-vertical {
touch-action: pan-x;
}
esl-carousel.esl-carousel-vertical [esl-carousel-slides] {
flex-direction: column;
}
esl-carousel.esl-carousel-horizontal {
touch-action: pan-y;
}
esl-carousel.esl-carousel-horizontal [esl-carousel-slides] {
flex-direction: row;
}
esl-carousel[dragging] {
cursor: grabbing;
}
esl-carousel[animating] {
padding-inline: 0;
margin-inline: 0;
}
esl-carousel[dragging] [esl-carousel-slides],
esl-carousel[animating] [esl-carousel-slides] {
user-select: none;
pointer-events: none;
}
esl-carousel[empty] {
--esl-carousel-side-space: 0;
}
esl-carousel[empty] [esl-carousel-slides] {
display: none;
}
/* Default carousel area styles */
[esl-carousel-slides] {
position: relative;
width: 100%;
margin: 0;
display: flex;
gap: 20px;
z-index: 0;
transform: translate3d(0px, 0px, 0px);
}
/* Default carousel slide styles */
[esl-carousel-slide] {
flex: 0 0 auto;
margin: 0;
padding: 0;
position: relative;
z-index: 1;
list-style: none;
}
.esl-carousel-no-extra-space {
--esl-carousel-side-space: 0;
}
.esl-carousel-default-renderer [esl-carousel-slides] {
display: flex;
flex-wrap: nowrap;
transition: none;
max-width: 100%;
max-height: 100%;
}
.esl-carousel-default-renderer.esl-carousel-horizontal [esl-carousel-slide] {
width: var(--esl-slide-size, var(--esl-slide-initial-size));
}
.esl-carousel-default-renderer.esl-carousel-vertical [esl-carousel-slide] {
height: var(--esl-slide-size, var(--esl-slide-initial-size));
}
.esl-carousel-grid-renderer {
/* stylelint-disable-next-line */
/* stylelint-disable-next-line */
}
.esl-carousel-grid-renderer [esl-carousel-slides] {
display: grid;
grid-template-rows: 1fr 1fr;
grid-auto-columns: auto;
grid-auto-flow: column;
transition: none;
max-width: 100%;
max-height: 100%;
}
.esl-carousel-grid-renderer.esl-carousel-vertical [esl-carousel-slides] {
grid-template-columns: 1fr 1fr;
grid-auto-rows: auto;
grid-auto-flow: row;
}
.esl-carousel-grid-renderer.esl-carousel-horizontal :is([esl-carousel-slide], [esl-carousel-fake-slide]) {
width: var(--esl-slide-size, --esl-slide-initial-size, 100%);
}
.esl-carousel-grid-renderer.esl-carousel-vertical :is([esl-carousel-slide], [esl-carousel-fake-slide]) {
height: var(--esl-slide-size, --esl-slide-initial-size, 100%);
}
/** Nav control mixin defaults */
[esl-carousel-nav]:not([active]) {
display: none;
}
[esl-carousel-nav][disabled] {
pointer-events: none;
}
:root {
--esl-carousel-arrow-size: 40px;
--esl-carousel-arrow-padding: 0px;
--esl-carousel-arrow-bg: grey;
}
/** Arrow navigation styles */
.esl-carousel-nav-container {
position: relative;
/* stylelint-disable-next-line */
--esl-carousel-arrow-offset: calc((var(--esl-carousel-arrow-size) + var(--esl-carousel-arrow-padding) + var(--esl-carousel-side-space)) * -1);
}
.esl-carousel-arrow {
position: absolute;
z-index: 3;
top: 50%;
transform: translateY(-50%);
padding: var(--esl-carousel-arrow-padding);
display: grid;
place-content: center;
background: none;
border: none;
cursor: pointer;
appearance: none;
filter: drop-shadow(0 0 4px var(--esl-carousel-arrow-bg));
opacity: 0.75;
}
.esl-carousel-arrow:hover {
opacity: 1;
}
.esl-carousel-arrow[disabled] {
opacity: 0.25;
}
.esl-carousel-arrow.prev {
left: var(--esl-carousel-arrow-offset);
}
.esl-carousel-arrow.prev.inner {
left: 0;
}
.esl-carousel-arrow.next {
right: var(--esl-carousel-arrow-offset);
}
.esl-carousel-arrow.next.inner {
right: 0;
}
.esl-carousel-arrow::before {
content: '';
display: block;
width: var(--esl-carousel-arrow-size);
height: var(--esl-carousel-arrow-size);
background: var(--esl-carousel-arrow-bg);
clip-path: polygon(20% 50%, 70% 0%, 80% 5%, 35% 50%, 80% 95%, 70% 100%);
}
.esl-carousel-arrow.next::before {
transform: scaleX(-1);
}
/* ESLCarouselNavDots default styles */
.esl-carousel-dots {
display: flex;
align-items: center;
width: fit-content;
gap: 0.5rem;
margin: 1rem auto;
}
.esl-carousel-dots:empty {
display: none;
}
.esl-carousel-dot {
margin: 0;
padding: 0;
flex: 0 0 auto;
min-width: 9px;
box-sizing: content-box;
aspect-ratio: 1;
border-radius: 100%;
text-align: center;
vertical-align: middle;
cursor: pointer;
appearance: none;
}
.esl-carousel-dot:is(*, :focus, :active, :hover) {
border: var(--esl-carousel-dot-border, 1px solid transparent);
background: var(--esl-carousel-dot-color, rgba(118, 118, 118, 0.5));
background-clip: content-box;
}
.esl-carousel-dot[active] {
border: var(--esl-carousel-dot-active-border, 1px solid #bababa);
background: var(--esl-carousel-dot-active-color, rgba(255, 255, 255, 0.5));
background-clip: content-box;
}