当前位置: 首页 > 面试题库 >

使用CSS时,对多行的溢出块使用“…”

苏鸿波
2023-03-14
问题内容

overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;

如果溢出,将在行的末尾显示“ …”。但是,这将仅显示在一行中。但我希望将其以多行显示。

它可能看起来像:

+--------------------+
|abcde feg hij   dkjd|
|dsji jdia js ajid  s|
|jdis ajid dheu d ...|/*Here it's overflowed, so "..." is shown. */
+--------------------+

问题答案:

我设法做到这一点。它带有一些警告:

  1. 它不是纯CSS;它不是纯CSS。您必须添加一些HTML元素。但是,不需要JavaScript。
  2. 省略号在最后一行右对齐。这意味着,如果您的文本未正确对齐或对齐,则最后一个可见单词和省略号之间可能会有明显的差距(取决于第一个隐藏单词的长度)。
  3. 省略号始终保留。这意味着,如果文本几乎完全适合文本框,则可能会不必要地将其截断(最后一个单词是隐藏的,尽管从技术上讲不是必须的)。
  4. 您的文本必须具有固定的背景色,因为在不需要的情况下,我们使用彩色矩形隐藏省略号。
    我还应注意,文本将在单词边界而不是字符边界处断开。这是有意的(因为我认为较长的文本比较好),但是因为它与实际text-overflow: ellipsis情况有所不同,所以我认为我应该提一下。

如果您可以忍受这些警告,那么HTML如下所示:

<div class="ellipsify">
    <div class="pre-dots"></div>
    <div class="dots">&hellip;</div>
    <!-- your text here -->
    <span class="hidedots1"></span>
    <div class="hidedots2"></div>
</div>

这是相应的CSS,以一个150像素宽的框为例,在白色背景上带有三行文本。假定您有CSS重置或类似的重置,可在必要时将边距和填充设置为零。

/* the wrapper */
.ellipsify {
    font-size:12px;
    line-height:18px;
    height: 54px;       /* 3x line height */
    width: 150px;
    overflow: hidden;
    position: relative; /* so we're a positioning parent for the dot hiders */
    background: white;
}

/* Used to push down .dots. Can't use absolute positioning, since that
   would stop the floating. Can't use relative positioning, since that
   would cause floating in the wrong (namely: original) place. Can't 
   change height of #dots, since it would have the full width, and
   thus cause early wrapping on all lines. */
.pre-dots {
    float: right;
    height: 36px;  /* 2x line height (one less than visible lines) */
}

.dots {
    float: right; /* to make the text wrap around the dots */
    clear: right; /* to push us below (not next to) .pre-dots */
}

/* hides the dots if the text has *exactly* 3 lines */
.hidedots1 {
    background: white;
    width: 150px;
    height: 18px;       /* line height */
    position: absolute; /* otherwise, because of the width, it'll be wrapped */
}

/* hides the dots if the text has *less than* 3 lines */
.hidedots2 {
    background: white; 
    width: 150px;
    height: 54px;       /* 3x line height, to ensure hiding even if empty */
    position: absolute; /* ensures we're above the dots */
}

为了阐明其工作原理,以下是同一张图片,不同的.hidedots1是用红色和.hidedots2青色突出显示。当没有不可见的文本时,这些矩形将隐藏省略号:

在IE9,IE8(模拟),Chrome,Firefox,Safari和Opera中进行了测试。在IE7中不起作用。



 类似资料:
  • 问题内容: 与 如果溢出,将在行的末尾显示“ …”。但是,这将仅显示在一行中。但我希望将其以多行显示。 它可能看起来像: 问题答案: 使用PushState和预合成 实现方法是使用JavaScript pushState方法。 PushState更改顶部浏览器栏中的URL,而无需重新加载页面。假设您有一个包含标签的页面。选项卡隐藏和显示内容,并且可以使用AJAX或通过简单地设置display:no

  • 预备条件: 这篇文章中,让我们了解如何使用 unlink 技巧成功利用堆溢出。但是在了解它之前,首先让我们看看漏洞程序: 上面程序的行会导致堆溢出。用户输入argv[1]复制给了堆缓冲区first,没有任何大小限制。因此,当用户输入大于 666 字节时,它就会覆盖下一个块的头部。这个溢出会导致任意代码执行。 看一看漏洞程序的堆内存图片: unlink:这个技巧的核心思想,就是欺骗 glibc ma

  • 问题内容: 我想使用rxjava Observable处理翻新中的分页。我听了另一个问题的建议。 我有100多个页面需要获取,但是链在第20页左右失败,并且在logcat中使用以下日志停止了对可观察对象的任何进一步订阅 有人知道为什么会发生这种情况吗? 更新: 我知道这是由于递归而发生的,但是有没有更优雅的方式来处理带有翻新和rxjava的分页? 问题答案: 因此,鉴于我回答了您引用的原始问题,我

  • 问题内容: 最近,我在尝试执行操作时遇到了很奇怪的错误: SqlDateTime溢出。必须介于1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。 关键是,我只用于在对象中设置属性,并且在调用该属性后将其显示为应有的状态。 以前没有发生过,现在该功能总是中断。我完全一无所知-我的SQL Server上的日期似乎还可以。 可能是什么原因造成的? 编辑 我认为这

  • 预备条件: 理解 glibc malloc 从 2004 年末开始,glibc malloc 变得更可靠了。之后,类似 unlink 的技巧已经废弃,攻击者没有线索。但是在 2005 年末,Phantasmal Phatasmagoria 带来了下面这些技巧,用于成功利用堆溢出。 House of Prime House of Mind House of Force House of Lore H

  • 在下面的代码中, 我有一个父div(.parent)和三个子div(.child1、.child2、.child3) 要求- 。儿童2应该重叠。儿童3 。child2应该可以水平滚动 问题- 使用绝对位置设置overflow-x不起作用。 如何使此表可滚动,以及使其与下面的所有div重叠? 企图-