round-carousel-component
Version:
An infinitely scrollable 3D carousel component for the web
121 lines (108 loc) • 5.2 kB
CSS
.carousel {
width: 13.125rem;
height: 13.125rem;
position: relative;
margin: 0 auto;
perspective: 62.5rem;
}
.carousel__container {
width: 100%;
height: 100%;
position: absolute;
transform-style: preserve-3d;
transition: transform 1s;
}
.carousel__slide {
position: absolute;
width: 11.875rem;
height: 11.875rem;
left: 0.625rem;
top: 0.625rem;
border: 0.125rem solid;
transition: transform 1s, opacity 1s;
}
.carousel__slide img {
width: 100%;
height: auto;
display: block;
}
.carousel__slide-overlay {
color: #fff;
text-align: center;
display: flex;
flex-flow: row wrap;
align-items: center;
justify-content: center;
align-content: center;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
opacity: 0;
transition: opacity 0.35s ease-in-out;
background-color: rgba(0, 0, 0, 0.7);
user-select: none;
}
.carousel__slide-overlay span,
.carousel__slide-overlay strong {
display: block;
flex: 0 0 100%;
}
.carousel__slide:hover .carousel__slide-overlay {
opacity: 1;
}
.carousel__controls {
display: flex;
flex-flow: row wrap;
align-items: center;
justify-content: center;
}
.carousel__control {
font-size: 0;
line-height: 0;
text-indent: -100%;
width: 2.5rem;
height: 2.5rem;
display: block;
position: relative;
border: 1px solid;
margin: 0 2rem;
background: rgba(0, 0, 0, 0.7);
border-radius: 50%;
box-shadow: none;
}
.carousel__control::before,
.carousel__control::after {
content: '';
display: block;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
}
.carousel__control::before {
width: 50%;
height: 1px;
background-color: #fff;
}
.carousel__control::after {
content: '';
width: 0.9375rem;
height: 0.9375rem;
display: inline-block;
vertical-align: middle;
border-color: #fff;
border-style: solid;
border-width: 0 0 1px 1px;
margin: auto;
transform: rotate(-135deg);
transform-origin: 50% 50%;
transition: all 0.35s ease-in-out;
}
.carousel__control--prev::after {
transform: rotate(45deg);
}
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yb3VuZC1jYXJvdXNlbC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoicm91bmQtY2Fyb3VzZWwuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmNhcm91c2VsIHtcblx0d2lkdGg6IDEzLjEyNXJlbTtcblx0aGVpZ2h0OiAxMy4xMjVyZW07XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0bWFyZ2luOiAwIGF1dG87XG5cdHBlcnNwZWN0aXZlOiA2Mi41cmVtO1xufVxuXG4uY2Fyb3VzZWxfX2NvbnRhaW5lciB7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcblx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIDFzO1xufVxuXG4uY2Fyb3VzZWxfX3NsaWRlIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR3aWR0aDogMTEuODc1cmVtO1xuXHRoZWlnaHQ6IDExLjg3NXJlbTtcblx0bGVmdDogMC42MjVyZW07XG5cdHRvcDogMC42MjVyZW07XG5cdGJvcmRlcjogMC4xMjVyZW0gc29saWQ7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSAxcywgb3BhY2l0eSAxcztcbn1cblxuLmNhcm91c2VsX19zbGlkZSBpbWcge1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiBhdXRvO1xuXHRkaXNwbGF5OiBibG9jaztcbn1cblxuLmNhcm91c2VsX19zbGlkZS1vdmVybGF5IHtcblx0Y29sb3I6ICNmZmY7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1mbG93OiByb3cgd3JhcDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDA7XG5cdHJpZ2h0OiAwO1xuXHRib3R0b206IDA7XG5cdGxlZnQ6IDA7XG5cdG9wYWNpdHk6IDA7XG5cdHRyYW5zaXRpb246IG9wYWNpdHkgMC4zNXMgZWFzZS1pbi1vdXQ7XG5cdGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43KTtcblx0dXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi5jYXJvdXNlbF9fc2xpZGUtb3ZlcmxheSBzcGFuLFxuLmNhcm91c2VsX19zbGlkZS1vdmVybGF5IHN0cm9uZyB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRmbGV4OiAwIDAgMTAwJTtcbn1cblxuLmNhcm91c2VsX19zbGlkZTpob3ZlciAuY2Fyb3VzZWxfX3NsaWRlLW92ZXJsYXkge1xuXHRvcGFjaXR5OiAxO1xufVxuXG4uY2Fyb3VzZWxfX2NvbnRyb2xzIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1mbG93OiByb3cgd3JhcDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5jYXJvdXNlbF9fY29udHJvbCB7XG5cdGZvbnQtc2l6ZTogMDtcblx0bGluZS1oZWlnaHQ6IDA7XG5cdHRleHQtaW5kZW50OiAtMTAwJTtcblx0d2lkdGg6IDIuNXJlbTtcblx0aGVpZ2h0OiAyLjVyZW07XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGJvcmRlcjogMXB4IHNvbGlkO1xuXHRtYXJnaW46IDAgMnJlbTtcblx0YmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjcpO1xuXHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi5jYXJvdXNlbF9fY29udHJvbDo6YmVmb3JlLFxuLmNhcm91c2VsX19jb250cm9sOjphZnRlciB7XG5cdGNvbnRlbnQ6ICcnO1xuXHRkaXNwbGF5OiBibG9jaztcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDA7XG5cdHJpZ2h0OiAwO1xuXHRib3R0b206IDA7XG5cdGxlZnQ6IDA7XG5cdG1hcmdpbjogYXV0bztcbn1cblxuLmNhcm91c2VsX19jb250cm9sOjpiZWZvcmUge1xuXHR3aWR0aDogNTAlO1xuXHRoZWlnaHQ6IDFweDtcblx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cblxuLmNhcm91c2VsX19jb250cm9sOjphZnRlciB7XG5cdGNvbnRlbnQ6ICcnO1xuXHR3aWR0aDogMC45Mzc1cmVtO1xuXHRoZWlnaHQ6IDAuOTM3NXJlbTtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRib3JkZXItY29sb3I6ICNmZmY7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdGJvcmRlci13aWR0aDogMCAwIDFweCAxcHg7XG5cdG1hcmdpbjogYXV0bztcblx0dHJhbnNmb3JtOiByb3RhdGUoLTEzNWRlZyk7XG5cdHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7XG5cdHRyYW5zaXRpb246IGFsbCAwLjM1cyBlYXNlLWluLW91dDtcbn1cblxuLmNhcm91c2VsX19jb250cm9sLS1wcmV2OjphZnRlciB7XG5cdHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbn1cbiJdfQ== */