【问题标题】:How to center text on top of fluidly changing image (flexbox)? [duplicate]如何在流畅变化的图像(flexbox)上居中文本? [复制]
【发布时间】:2016-06-05 09:45:45
【问题描述】:

这是一个棘手的问题,如果太棘手,我想图像可以保持相同的大小。

我想将文本在图像内部/顶部居中,就好像它是背景一样,但我不想使用实际背景。

我还想保留我当前的 flexbox 的行为,因为我喜欢它。这意味着:

  • 每行三个项目。
  • 图片宽度上限为 66 像素。
  • 在较小的浏览器宽度上调整图像大小(并非绝对需要)。
  • 没有对行进行硬编码,它应该会自动溢出到新行中。

HTML:

<div class="container">
  <div class="circle box">
    <img src="http://i.imgur.com/4JtXH2S.png">
    <div class="circle text">
      70
    </div>
  </div>
  <div class="circle box">
    <img src="http://i.imgur.com/4JtXH2S.png">
    <div class="circle text">
      70
    </div>
  </div>
  <div class="circle box">
    <img src="http://i.imgur.com/4JtXH2S.png">
    <div class="circle text">
      70
    </div>
  </div>
  <div class="circle box">
    <img src="http://i.imgur.com/4JtXH2S.png">
    <div class="circle text">
      70
    </div>
  </div>
  <div class="circle box">
    <img src="http://i.imgur.com/4JtXH2S.png">
    <div class="circle text">
      70
    </div>
  </div>
  <div class="circle box">
    <img src="http://i.imgur.com/4JtXH2S.png">
    <div class="circle text">
      70
    </div>
  </div>
</div>

CSS:

.container {
  display: -webkit-flex;
  display: flex;
  align-items: center;
  justify-content: center;
  max-width: 100%;
  height: auto;
  flex-wrap: wrap;
}

.container .circle.box {
  width: 33.33%;
    width: calc(100% / 3);
  height: auto;
}

.circle.box img {
  width: 100%;
    max-width: 66px;
}

.circle.box .text {
  font-size: 30px;
}

jsfiddle:https://jsfiddle.net/hceac6mx/

还应该注意的是,虽然我在这里使用了一个可以 css'ed 的简单圆圈,但这只是一个示例。因此,对实际图像的需求是真实的。

如何做到这一点?

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    这是一种可能对您有用的方法(或者至少是朝着正确方向迈出的一步,希望如此):

    • 使每个包含图像和文本的 div 成为绝对定位的包含块。

      .container .circle.box { position: relative; }
      
    • 使用绝对定位使文本在图像上居中。

      .circle.box .text {
          position: absolute;
          top: 0;
          left: 0;
          transform: translate(50%, 50%);
       }
      

    Revised Fiddle

    当图像非常小时,文本居中确实会中断,但我发布了这个答案,因为您提到图像重新调整大小并不是绝对必要的。


    更新

    在 cmets 中,Gerrit Bertier 发布了一个 enhanced demo,使文本也具有响应性。

    【讨论】:

    • 我对您的解决方案进行了一些更新,以便在圆圈重新缩放时允许文本居中:jsfiddle.net/hceac6mx/2 在文本中添加了widthmax-width,将left 设置为0text-aligncenter
    • @GerritBertier,干得好!谢谢。
    • 谢谢你们俩。如果我希望图像行居中,知道该怎么做吗?使用margintext-align 会打乱绝对定位。为什么align-items: center 不起作用?
    • @Yeats,要使图像居中,只需将它们的容器居中 (.container)。 Flexbox 非常适合:jsfiddle.net/hceac6mx/3
    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多