css – 文本的动态最大宽度

前端之家收集整理的这篇文章主要介绍了css – 文本的动态最大宽度前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以,假设我有这个标记;
<div>
  <span>Text one</span>
  <span class="sticky">ABC</span>
</div>
<div>
  <span>Some other text</span>
  <span class="sticky">DEF</span>
</div>
<div>
  <span>Lorem dolor sit amet lorem ipsum dolor</span>
  <span class="sticky">GHI</span>
</div>

哪个 – 随附CSS – 产生如下图所示的结果.

但是,当第一个跨度中的文本长于div的分配宽度时,会出现此问题.通常情况只是正常的文本包装;第二个跨度被撞到第二行的末尾.

但是,我希望这个元素只是一行.现在,当然要做到这一点,你做;

white-space: nowrap;
overflow: hidden;

但接下来发生的是第二个跨度消失为遗忘,因为它被第一个跨度中文本的长度驱逐.

我想要实现的是下面第三个例子中的图片.当第一个跨度的内容太长而无法显示时,文本溢出:省略号;将用点点数切割字符串,第二个跨度将被推到最右边(div的填充允许).

基本上,第一个跨度的伪最大宽度将等于div的宽度,不包括其填充并扣除span.sticky的宽度,无论可能是什么(因为它的内容可能会有所不同,所以宽度未设定).

我不知道在接近这样的事情时,max-width是否真的是要走的路,但是我可以用它来最好地描述我想要的行为.

是否有非JS方法来实现这一目标?

解决方法

这绝对可以,而且应该在CSS中完成.在第一个跨度上应用固定宽度和固定高度.高度使其不会拉伸到多条线.然后可以定位.sticky跨度.甚至可以使用百分数或ems使其变得流畅.需要考虑的事情,我不知道’ABC’,’DEF’的上下文,但如果它们纯粹是视觉而非结构元素,它们最好使用:before或:after伪类.

这是一个简单的例子:

div { 
    width: 200px; /* some amount that you set */
}
span:not(.sticky) { /* can use another selector,just wanted it to be exceptionally clear what i was referring to here */
    display: inline-block; /* so height and width actually take affect */
    max-width: 80%;
    height: 1em; /* so overflow hidden works and keeps text on one row */
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap; /* important to show ellipsis,or words will just be broken off */
}
span.sticky {
    display: inline-block;
    width: 20%;
}

如果你想看到这个在现场工作,我在moolta.com上做了这个设计.点击“制作挑战”并打开模式以选择朋友.下拉列表中的li是我正在谈论的内容.他们必须成为省略,并按下按钮,不会破坏线条

原文链接:https://www.f2er.com/css/215005.html

猜你在找的CSS相关文章