【问题标题】:Text not breaking inside of flexbox文本没有在 flexbox 内部中断
【发布时间】:2016-07-09 08:34:26
【问题描述】:

由于某种原因,当水平区域太小而无法显示时,flex 容器内的文本无法正确中断。 但即使在“正常”状态下也应该不会中断?

我在这里做错了什么?

(function () {
    var el;
    el = document.getElementById('clicker');
    el.onclick = function () {
        el.classList.toggle('container_changed');
        return null;
    };
}.call(this));
body {
  background: #333;
}

.container {
  width: 100px;
  position: relative;
}
.container img {
  width: 100%;
  height: auto;
}
.container .caption {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
  -webkit-align-items: flex-end;
      -ms-flex-align: end;
          align-items: flex-end;
  -webkit-box-pack: center;
  -webkit-justify-content: center;
      -ms-flex-pack: center;
          justify-content: center;
  vertical-align: middle;
}
.container span {
  color: white;
  font-family: 'Nobile', sans-serif;
  font-size: 1em;
  text-align: right;
}

.container_changed {
  height: 200px;
  width: 200px;
}
.container_changed img {
  width: initial;
  height: 100%;
}
<div id="clicker" class="container">
  <img src="http://www.placebear.com/300/800">
  <div class="caption">
    <span>Ceci n'est pas un ours</span>
  </div>
</div>

【问题讨论】:

  • 在 sn-p 中工作正常。 ¿?
  • 您的容器在点击前是 100 像素,点击后是 200 像素:行为对我来说似乎很好;如果您想确定的话,可以在 flex 容器和 flex 项目周围添加轮廓或在下方添加华丽的背景。还有为什么这里有图?它是您的 flex 容器的兄弟(因此与它无关)

标签: html css flexbox


【解决方案1】:

为您的代码添加一些华丽的调试颜色:

  • 您的 flex 容器是半透明的石板蓝背景(ours ours 图像的兄弟 :))
  • 您的弹性项目是包含文本的跨度。

(以防万一)尽管有它的类名,.container 并不是你的弹性容器。这是.caption。而 span 是这里唯一的弹性项目。

您可以看到,如果文本较长,点击后它仍然会换行,因为 flex 容器是 200px 宽,而您的文本占用的空间不止于此。

如果您是 flexbox 的新手,终极 chetsheet 位于 CSS Tricks。等等,即使不是新的,你仍然会发现它很有用:)

(function () {
    var el;
    el = document.getElementById('clicker');
    el.onclick = function () {
        el.classList.toggle('container_changed');
        return null;
    };
}.call(this));
body {
  background: #333;
}

.container {
  width: 100px;
  position: relative;
}
.container img {
  width: 100%;
  height: auto;
}
.container .caption {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
  -webkit-align-items: flex-end;
      -ms-flex-align: end;
          align-items: flex-end;
  -webkit-box-pack: center;
  -webkit-justify-content: center;
      -ms-flex-pack: center;
          justify-content: center;
  vertical-align: middle;
  background: rgba(106,90,205, 0.7); /*slateblue*/
}
.container span {
  color: white;
  font-family: 'Nobile', sans-serif;
  font-size: 1em;
  text-align: right;
  background: tomato;
}

.container_changed {
  height: 200px;
  width: initial;
}
.container_changed img {
  width: initial;
  height: 100%;
}
<div id="clicker" class="container">
  <img src="http://www.placebear.com/300/800">
  <div class="caption">
    <span>Ceci n'est pas un ours (also click me!)</span>
  </div>
</div>

【讨论】:

  • 您好,感谢颜色魔术和链接 :) 但是文本仍然没有正确中断。我也编辑了代码,因为我在复制时犯了一个错误它应该是:.container_changed { height: 200px;宽度:初始; } 所以整个事情调整到图像大小。我也知道 .container 不是 flex-container 的事实。从语义上讲,它是带有标题和所有内容的完整缩略图的容器。所以 .caption 应该是弹性容器。嗯,现在怎么办,我说。 (CSS 真的不是我的强项……)
【解决方案2】:

像这样在你的 css 中更改 .container_changed 的​​宽度:

.container_changed {
    height: 200px;
    width: 75px;
}

【讨论】:

  • 谢谢,但是啊。我应该提到:在最终版本中,此代码应动态处理各种比例的图像。所以手动设置 with 将无济于事。
猜你喜欢
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 2018-07-16
  • 2017-02-07
相关资源
最近更新 更多