代码之家  ›  专栏  ›  技术社区  ›  Khepf

将Reactstrap carousel图像配置为响应的最佳方法

  •  1
  • Khepf  · 技术社区  · 6 年前

    我做了很多研究,但令人惊讶的是,关于reactstrap carousel图像响应性的文档很少。

    我的ReactStrap旋转木马会相应调整大小,但图像不会。

    我研究/尝试过的选项:

    1. 通过carousel组件本身中的className实现CSS?这是我认为最好的一个,但我还没有找到背景大小、高度和最大宽度的组合来正确调整图像的大小。

    2. srcset?我不知道如何实现这个或任何其他内联属性,因为旋转木马是一个组件

    3. 可能是转盘组件本身的某个位置?

    4. 还是有更好的方法来修改图像?

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

    `

    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 回复  |  直到 6 年前
        1
  •  6
  •   baymax    6 年前

    你好,你好,

    我已经在我的reactjs应用程序中使用Carousel组件尝试了这个reactstrap。 我通过添加bootstrap 4 classess“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-block 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

        2
  •  4
  •   tao    6 年前
    .carousel-item > img { 
      width: 100%; 
    }
    

    。。。将解决您的问题。
    它与Reactstrap无关。这可能就是你没找到多少东西的原因。仅与TwBs旋转木马有关。我个人看不出有任何理由认为该规则不是TwBs carousel CSS的一部分,因为每个人都期望这样 <img> 宽度为 100% 其母公司的。

    如果要将其限制为特定的旋转木马,请相应地修改选择器。


    另一个经常请求的TwBs carousel mod是:

    .carousel-control-prev,.carousel-control-next {
      cursor:pointer;
    }
    
        3
  •  1
  •   BCoop    6 年前

    如果引导使用flexbox,您可以通过将以下内容添加到css中,使reactstrap carousel图像响应:

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

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

        4
  •  0
  •   rom    4 年前

    基于本页的reactstrap转盘示例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 tag,使我的超大图像与屏幕完美契合,并可能适用于其他来到这里的人。