我目前正在开发一个Angular 的图像滑块组件,但我遇到了滑块无法按预期显示的问题.我在下面提供了我的滑块组件的代码.

slider.component.html:

<div class="slider">
  <div class="container-slider">
    <div *ngFor="let image of images; let i = index" [ngClass]="{'slide': true, 'active-anim': currentSlideIndex === i}">
      <img [src]="getImageUrl(i)" alt="">
    </div>
    <button class="btn-slide prev" (click)="prevSlide()">
      <img src="../../../../assets/icons/prev.svg" alt="Previous">
    </button>
    <button class="btn-slide next" (click)="nextSlide()">
      <img src="../../../../assets/icons/next.svg " alt="Next">
    </button>
    <div class="container-dots">
      <div *ngFor="let image of images; let i = index" class="dot" [ngClass]="{'active': currentSlideIndex === i}" (click)="currentSlideIndex = i"></div>
    </div>
  </div>
</div>

slider.component.css:

.container-slider {
  max-width: 650px;
  height: 500px;
  position: relative;
  overflow: hidden;
  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
  border-radius: 36px;
  margin-left: 85px;
  margin-right: 60px;
  width: 100%;
  float: left;
}

@media (max-width: 1199px) {
  .container-slider {
    margin-right: 20px;
    margin-left: 20px;
  }
}

@media (max-width: 1000px) {
  .container-slider {
    margin: 100px auto;
    width: 95%;
    float: none;
    max-width: none;
    align-items: center;
  }
}

.slide {
  width: 100%;
  height: 100%;
  position: absolute;
  opacity: 0;
  transition: opacity ease-in-out 0.4s;
}
.slide img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.active-anim {
  opacity: 1;
}

.btn-slide {
  width: 60px;
  height: 60px;
  border-radius: 50%;
  background: #f1f1f1;
  border: 1px solid rgba(34, 34, 34, 0.287);
  position: absolute;
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
}

.btn-slide img {
  width: 25px;
  height: 25px;
  pointer-events: none;
}

.prev {
  top: 50%;
  left: 20px;
  transform: translateY(-60%);
}

.next {
  top: 50%;
  right: 20px;
  transform: translateY(-60%);
}

.container-dots {
  position: absolute;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
}
.dot {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 3px solid #f1f1f1;
  margin: 0 5px;
  background: #f1f1f1;
}
.dot.active {
  background: rgb(32, 32, 32);
}

slider.component.ts:

import { Component, Input } from '@angular/core';

@Component({
  selector: 'app-slider',
  templateUrl: './slider.component.html',
  styleUrls: ['./slider.component.css']
})
export class SliderComponent {
  @Input() images: string[];
  currentSlideIndex = 0;

  nextSlide() {
    this.currentSlideIndex = (this.currentSlideIndex + 1) % this.images.length;
  }

  prevSlide() {
    this.currentSlideIndex = (this.currentSlideIndex - 1 + this.images.length) % this.images.length;
  }

  getImageUrl(index: number): string {
    return this.images[index];
  }
}

This is how I use my slider:

<app-slider [images]="['../assets/images/img1.jpg', '../assets/images/img2.jpg', '../assets/images/img3.jpg']"></app-slider>

This is how my slider currently looks: enter image description here

This is how slider should look: enter image description here

我注意到滑块的布局和外观与我的预期不符.具体来说,我希望滑块有一个固定的宽度为650px,高度为500px,并在页面上水平居中.但是,尽管应用了这些样式,滑块仍未按预期显示.

有人能判断一下我的代码并提供如何解决此问题的指导吗?如有任何见解或建议,我们将不胜感激.谢谢!

推荐答案

我使用:host使滑块始终为全宽和flexbox,以便使用align-items: center;justify-content: center;使子元素居中,之后,我们需要将组件.slider的第一个元素的尺寸设置为flex,并将其设置为增长到内容.

使用下面的样式后,它似乎工作!

.container-slider {
  position: relative;
  overflow: hidden;
  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
  border-radius: 36px;
  margin-left: 85px;
  margin-right: 60px;
  width: 100%;
  float: left;
}

.slider {
  display: flex;
  flex-grow: 1;
  max-width: 650px;
  height: 500px;
}

:host {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

Stackblitz Demo

Html相关问答推荐

如何防止下拉菜单内的Bootstrap列表行包装?

Blazor中有1像素高行的表格

Vue.js复选框对齐问题:在表格单元格中居中复选框

<;img>;和具有负边距的元素的堆叠顺序

如何阻止Chromecast图标出现在HTML5视频

获得一个css框,以便在页面太小时不再粘在页面的角落.

如何在元素的三条边中间换行边框?

在网页上的 Select 器中显示选项时出现问题:未在GO模板中传递循环{{range}}的数据

防止position:relative的child在出界时收缩

Style=背景图像URL引用变成&;Quot;

元素在向x提供溢出时被隐藏

希望平稳过渡到悬停状态

如何在css中旋转块时调整内容宽度、高度

视频重新加载而不是在 Swift 中暂停 WKWebView

标题在实时网站上闪烁

调整 Rmarkdown 输出的 html_document 的标题和副标题之间的间距

如何使用 :before 在 CSS 中为列表增加计数器

浮动元素忽略 margin-top 属性后的块元素

使用 htmloutput 在shiny 的应用程序中呈现文本

无法在 css 的 body 标签中正确呈现(内联显示)