首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文本元素宽度与图像元素对齐位于同一容器中

将文本元素宽度与图像元素对齐位于同一容器中
EN

Stack Overflow用户
提问于 2017-08-02 11:54:59
回答 3查看 50关注 0票数 2

我正在开发一个web应用程序,使用带bootstrap的React,并尝试实现一个包含文本和图像元素的卡片盒。

虽然在通过外部API (flickr等)获取图像之前,图像大小是未知的。我想设置整个卡片框的大小调整为获取的图像的大小,也使文本元素调整到它的大小。

我目前的实现部分满足了上面的要求,但问题是文本元素占用了太多的宽度空间,并且没有根据图像大小进行自我调整。

我一直在尝试可能的属性来解决这个问题,但还没有弄清楚,所以我很感谢大家的建议。

当前结构:

代码语言:javascript
复制
render() {
    return (
      <div>
        <div className="row text-center">
          {
              this.props.photos.map((item, index) => {
                return (
                  <div className="col-md-3" key={`Photo_${index}`}>
                    <div className="card-box" key={`Photo_${index}`}>
                      <div>
                        <p>{item.title}</p>
                      </div>
                      <img src={`${item.media.m}`}/>
                    </div>
                  </div>
                );
              })
          }
          <div className="clearfix" />
        </div>
      </div>
    );
  }

当前样式:

代码语言:javascript
复制
.card-box {
    display: inline-block;
    margin-top: 10px;
    margin-bottom: 10px;
    padding-top: 10px;
    background-color: white;
    box-shadow: 3px 3px 2px #888888;
}

.card-box p {
    text-align: center;
    display: block;
}

.card-box img {
    padding-top: 10px;
    padding-bottom: 10px;
    padding-left: 10px;
    padding-right: 10px;
    top:50%;
    left:50%;
}
EN

回答 3

Stack Overflow用户

发布于 2017-08-02 12:00:00

您是否考虑过使用css max-width属性?您可以指定图像和文本的列容器的最大宽度。

票数 0
EN

Stack Overflow用户

发布于 2017-08-02 14:14:20

您可以使用display:table属性让元素扩展到最宽的位置。

要强制框尽可能小,您需要为width设置一个较小的值,甚至可以使用0

不要一起使用table-layout:fixed;,它不会再扩展。

示例

代码语言:javascript
复制
.squeezeIt {
display:table;
width:0; /* will expand width according to the widest content*/
margin:auto;/* mind behavior here */
}
/* inline-table can also be used */
.squeezeIt + .squeezeIt {
display:inline-table;
margin:5px;
}
/*makup*/
.squeezeIt {
border:solid;
padding:5px;
}
p {
margin:0;
text-align:justify;
text-align-last:justify;
}
body {
text-align:center;
}
代码语言:javascript
复制
<div class="squeezeIt">
<p>Some random text  up here</p>
<img src="http://dummyimage.com/150x50" />
</div>
<div class="squeezeIt">
<p>Some random  </p>
<img src="http://dummyimage.com/50x50" />
</div>
<div class="squeezeIt">
<p>Some random text showing </p>
<img src="http://dummyimage.com/100x50" />
</div>
<div class="squeezeIt">
<p>Some random text showing up here</p>
<img src="http://dummyimage.com/200x50" />
</div>
<div class="squeezeIt">
<p>Some random  </p>
<img src="http://dummyimage.com/40x50" />
</div>

票数 0
EN

Stack Overflow用户

发布于 2017-08-02 15:40:54

你只能通过CSS来实现你想要的布局,但是你可以在这里使用JavaScript。演示:

代码语言:javascript
复制
var cardBoxImages = document.querySelectorAll(".card-box > img");

for (var i = 0; i < cardBoxImages.length; i++) {
  var cardBoxImage = cardBoxImages[i];
  var cardBox = cardBoxImage.parentElement
  cardBox.style.width = cardBoxImage.offsetWidth + "px";
}
代码语言:javascript
复制
.card-box {
  display: inline-flex;
  flex-direction: column;
  
  /* specify width only by content */
  box-sizing: content-box;

  /* centering for text and image */
  text-align: center;
  align-items: center;
  
  /* just styles for demo */
  outline: 1px solid yellow;
  margin: 10px;
  padding: 10px;
}
代码语言:javascript
复制
<div class="card-boxes">
  <div class="card-box">
    <div class="card-box__text">Short text</div>
    <img class="card-box__image" src="https://placehold.it/200x300/a00/fff">
  </div>
  <div class="card-box">
    <div class="card-box__text">This text container contais very long text</div>
    <img class="card-box__image" src="https://placehold.it/250x175/a00/fff">
  </div>
  <div class="card-box">
    <div class="card-box__text">This text container contais very long text. This text container very long text.</div>
    <img class="card-box__image" src="https://placehold.it/250x175/a00/fff">
  </div>
  <div class="card-box">
    <div class="card-box__text">This text container contais very long text. This text container very long text.</div>
    <img class="card-box__image" src="https://placehold.it/250x175/a00/fff">
  </div>
  <div class="card-box">
    <div class="card-box__text">This text container contais very long text. This text container very long text.</div>
    <img class="card-box__image" src="https://placehold.it/250x175/a00/fff"></div>
  <div class="card-box">
    <div class="card-box__text">This text container contais very long text. This text container very long text.</div>
    <img class="card-box__image" src="https://placehold.it/100x100/a00/fff">
  </div>
  <div class="card-box">
    <div class="card-box__text">This text container contais very long text. This text container contais very long text. This text container contais very long text. This text container contais very long text. This text container contais very long text. This text container very long
      text.</div>
    <img class="card-box__image" src="https://placehold.it/400x600/a00/fff">
  </div>
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45451196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档