【问题标题】:How to make image scale to the size of div [ReactJS TS]如何使图像缩放到 div 的大小 [ReactJS TS]
【发布时间】:2020-01-26 22:31:42
【问题描述】:

我目前正在开发一个必须在卡片上显示视频/文本链接列表的管理面板。

我正在处理的环境不使用引导程序,所以我不能简单地使用他们的卡。这意味着我必须重新创建卡片组件。

我已经做到了,所以卡片可以正常显示,就好像它是普通卡片一样,如下所示:

代码如下:

<div className="">
        <Link className="styledLink" to={`adminhelpcard/${this.state.id}`}>
          <div className="card">
            <h5 className="card-header">{this.state.title}</h5>

            <div>
              <img
                className="Sprite"
                onLoad={() => this.setState({ imageLoading: false })}
                onError={() => this.setState({ tooManyRequests: true })}
                src={this.state.thumbnail}
                style={
                  this.state.tooManyRequests
                    ? { display: "none" }
                    : this.state.imageLoading
                    ? { display: "null" }
                    : { display: "null" }
                }
              />
            </div>
            <div>
              {this.state.tooManyRequests ? (
                <h6 className="mx-auto">
                  <span className="badge badge-danger mt-2"></span>
                </h6>
              ) : null}
              <div className="card-body mx-auto">
                <h6 className="card-title">
                  {this.state.title
                    .toLowerCase()
                    .split(" ")
                    .map((letter) => letter.charAt(0).toUpperCase() + letter.substring(1))
                    .join(" ")}
                </h6>
              </div>
            </div>
          </div>
        </Link>
      </div>

我正在尝试重新创建水平卡片 (https://getbootstrap.com/docs/4.3/components/card/#horizontal)

特别是包含视频的链接。但结果是这样的

重新创建尝试的代码如下:

<div className="horizontalCard">
          <div className="innerCard">
            <div className="leftImage">
              <img
                className="Sprite"
                onLoad={() => this.setState({ imageLoading: false })}
                onError={() => this.setState({ tooManyRequests: true })}
                src={this.state.thumbnail}
                style={
                  this.state.tooManyRequests
                    ? { display: "none" }
                    : this.state.imageLoading
                    ? { display: "null" }
                    : { display: "null" }
                }
              />
            </div>
            <div className="rightText">
              <div className="card-body">
                <h5 className="card-title">{this.state.title}</h5>
                <p className="card-text">...</p>
                <p className="card-text">...</p>
              </div>
            </div>
          </div>
        </div>

所以我的主要问题是,我该如何重新创建/调整图像大小以使其保持在 leftImage div 的尺寸范围内。

【问题讨论】:

  • 第一步是确保您的图像和文本内容在一行中对齐。您可以使用浮动、flexbox 或网格布局来做到这一点。在那之后,这是(可能)限制您希望图像占用多少水平空间的问题。然后将响应式 CSS 属性应用于图像(通常包括 { max-width: 100%; height: auto; 之类的内容)。
  • @hungerstar 嘿,谢谢你的建议。当我将最大宽度更改为 100% 并将高度更改为自动时,图像会重新缩放到更大,从而使整个 div 的大小扩大
  • 图像的容器元素需要一个宽度,因为图像将缩放到允许的最大尺寸。 Example

标签: javascript css reactjs typescript


【解决方案1】:

使用 height: auto 您可以根据纵横比调整图像。

img.Sprite {
  display: block;  /*optional*/
  width: 100%;     /*optional*/
  max-width: 100%;
  height: auto;
  border: 0;    
}

img 的父级必须有一个宽度(以 %、px、em、rem 为单位)

【讨论】:

  • 所以这实际上使它变得更好,但现在唯一的问题是图像的左侧,它延伸到卡片之外,而不是停留在它的圆角内。有没有办法解决这个问题?
  • 如果卡片有圆角,给img同样的border-radius。从图像和卡片中去掉边距、填充和边框,看看它是否更好。如果是这样,请使用其他尺寸。
猜你喜欢
  • 2013-06-21
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 2020-06-14
  • 2011-01-13
  • 2020-03-12
  • 2016-07-30
  • 2016-05-24
相关资源
最近更新 更多