配置Reactstrap轮播图像以响应的最佳方法

时间:2018-04-05 21:25:43

标签: css image reactjs responsive-design reactstrap

我已经做了很多寻找但是关于反应带旋转木马图像响应性的文件很少令人惊讶。

我的ReactStrap轮播响应式调整大小,但图像没有。

我研究过的选项:

  1. CSS通过carousel组件本身的className?这是我认为可能是最好的,但我还没有找到适当调整图像大小的背景大小,高度和最大宽度的组合。

  2. srcset?鉴于轮播是一个组件,我不确定如何实现这个或任何其他内联属性

  3. 也许旋转木马组件本身有一些位置?

  4. 或者我有更好的方法来修改图像吗?

  5. 或者@media是通过css的答案吗?

  6. `

    const items = [
      {
        src: 'img1.png',
        altText: '',
        caption: ''
      },
      {
        src: 'img2.png',
        altText: '',
        caption: 'Freedom Isn\'t Free'
      },
      {
        src: 'img3.png',
        altText: '',
        caption: ''
      }
    ];
    
    class HomeCarousel extends Component {
      constructor(props) {
        super(props);
        this.state = { activeIndex: 0 };
        this.next = this.next.bind(this);
        this.previous = this.previous.bind(this);
        this.goToIndex = this.goToIndex.bind(this);
        this.onExiting = this.onExiting.bind(this);
        this.onExited = this.onExited.bind(this);
      }
    
      onExiting() {
        this.animating = true;
      }
    
      onExited() {
        this.animating = false;
      }
    
      next() {
        if (this.animating) return;
        const nextIndex = this.state.activeIndex === items.length - 1 ? 0 : this.state.activeIndex + 1;
        this.setState({ activeIndex: nextIndex });
      }
    
      previous() {
        if (this.animating) return;
        const nextIndex = this.state.activeIndex === 0 ? items.length - 1 : this.state.activeIndex - 1;
        this.setState({ activeIndex: nextIndex });
      }
    
      goToIndex(newIndex) {
        if (this.animating) return;
        this.setState({ activeIndex: newIndex });
      }
    
      render() {
        const { activeIndex } = this.state;
    
        const slides = items.map((item) => {
          return (
            <CarouselItem
              className="carouselImg"
              onExiting={this.onExiting}
              onExited={this.onExited}
              key={item.src}
            >
              <img src={item.src} alt={item.altText} />
              <CarouselCaption captionText={item.caption} captionHeader={item.caption} />
            </CarouselItem>
          );
        });
    
        return (
          <Carousel
            activeIndex={activeIndex}
            next={this.next}
            previous={this.previous}
          >
            <CarouselIndicators items={items} activeIndex={activeIndex} onClickHandler={this.goToIndex} />
            {slides}
            <CarouselControl direction="prev" directionText="Previous" onClickHandler={this.previous} />
            <CarouselControl direction="next" directionText="Next" onClickHandler={this.next} />
          </Carousel>
        );
      }
    }
    
    
    export default HomeCarousel;
    

    `

4 个答案:

答案 0 :(得分:3)

.carousel-item > img { 
  width: 100%; 
}

...将解决您的问题 它与Reactstrap无关。这可能就是你找不到的原因。仅与TwBs Carousel有关。我个人没有看到为什么该规则不属于TwBs轮播CSS的原因,因为每个人都希望<img>的父级宽度为100%

如果要将其限制为特定轮播,请相应地修改选择器。

另一个经常要求的TwBs轮播模式是:

.carousel-control-prev,.carousel-control-next {
  cursor:pointer;
}

答案 1 :(得分:1)

鉴于bootstrap使用flexbox,您可以通过将其添加到CSS中来使reactstrap轮播图片具有响应性:

.carousel-item, .carousel-item.active {
    align-items:center;
}

这似乎防止了图像高度拉伸。为我工作!

答案 2 :(得分:0)

早上好,你好,

我已经在我的reactjs应用程序中使用Carousel组件尝试了此reactstrap。 我通过添加引导程序4类“ d-block w-100”解决了这一问题。

我在reactstrap Carousel组件和此元素中创建了

来自:

<img src={item.src} alt={item.altText} />

我更改为:

<img className="d-block w-100" src={item.src} alt={item.altText} />

我刚刚从bootstrap 4文档中复制了这些类(d块w-100) https://getbootstrap.com/docs/4.0/components/carousel/

这是我的示例,我将Reactstrap Carousel与WordPress Rest API数据中的动态数据一起使用。 https://github.com/jun20/React-JS-and-WP-Rest-API/tree/home-carousel-final

答案 3 :(得分:0)

基于此页面上的reactstrap Carousel示例1 https://reactstrap.github.io/components/carousel/

在我的用例中,这就是我如何使其响应:

        <CarouselItem
          onExiting={() => setAnimating(true)}
          onExited={() => setAnimating(false)}
          key={item.src}
        >
          <img src={item.src} alt={item.altText} style={{ width: "100%"}}/>
          <CarouselCaption captionText={item.caption} captionHeader={item.caption} />
        </CarouselItem>

因此,将style={{ width: "100%"}}传递到img标签中,可使我的超大图像完全适合屏幕,并且可能适合其他人来到这里。