首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >知道什么是溢出: hidden has hidden

知道什么是溢出: hidden has hidden
EN

Stack Overflow用户
提问于 2011-02-08 23:14:52
回答 4查看 4.7K关注 0票数 12

我想知道是否有任何方法可以调用和使用overflow:hidden隐藏得很好的东西。

为了澄清我的意思,在this example中,我想知道“这是隐藏的”是div的隐藏部分。

这有可能吗?你会怎么做呢?

我已经将问题标记为jQuery,但当然,无论完成什么工作都很棒,纯CSS或Javascript就可以了。

提前感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-08 23:47:06

试试这个:

CSS:

代码语言:javascript
复制
.text{


    outline:1px solid orange;

    width:100px;
    height:20px;
    overflow:hidden;

}

HTML:

代码语言:javascript
复制
<div class="text">This is shown. This is hidden</div>

<div id="result"></div>

<div id="container" style="visibility:hidden;"></div>

JS:

代码语言:javascript
复制
$("<span />").text($(".text").text()).appendTo("#container"); 

$("#result").append("<span>"+$(".text").width()+"</span><br />");
$("#result").append("<span>"+$("#container span").width()+"</span><br />");

$("#result").append("<span>Overflow: "+ (($("#container span").width() > $(".text").width()) ? "yes" : "no")+"</span><br />");

Example

编辑

试试这个:

based on this plugin

New Example

CSS:

代码语言:javascript
复制
.text{
    outline:1px solid orange;
    width:100px;
    height:20px;
    overflow:hidden;
}

HTML:

代码语言:javascript
复制
<br/>
<br/>
<div class="text" id="test1">This is shown. This is hidden</div>
<div class="text" id="test2">No hidden</div>
<br/>
<br/>
<div id="result"></div>

JS:

代码语言:javascript
复制
(function($) {

    $.fn.noOverflow = function(){

        return this.each(function() {

            var el = $(this);

            var originalText = el.text();
            var w = el.width();

            var t = $(this.cloneNode(true)).hide().css({
                'position': 'absolute',
                'width': 'auto',
                'overflow': 'visible',
                'max-width': 'inherit'
            });
            el.after(t);

            var text = originalText;
            while(text.length > 0 && t.width() > el.width()){
                text = text.substr(0, text.length - 1);
                t.text(text + "");
            }
            el.text(t.text());

            /*
            var oldW = el.width();
            setInterval(function(){
                if(el.width() != oldW){
                    oldW = el.width();
                    el.html(originalText);
                    el.ellipsis();
                }
            }, 200);
            */

            this["overflow_text"] = {
                hasOverflow: originalText != el.text() ? true : false,
                texOverflow: originalText.substr(el.text().length)
            };

            t.remove();

        });

    };

})(jQuery);

$("#test1").noOverflow();

$("#result").append("<span>Test 1</span><br />");

$("#result").append("<span>Has Overflow: "+ (($("#test1")[0].overflow_text.hasOverflow) ? "yes" : "no")+"</span><br />");

$("#result").append("<span>Text Overflow: "+ $("#test1")[0].overflow_text.texOverflow+"</span><br />");

$("#test2").noOverflow();

$("#result").append("<br /><span>Test 2</span><br />");
$("#result").append("<span>Has Overflow: "+ (($("#test2")[0].overflow_text.hasOverflow) ? "yes" : "no")+"</span><br />");
$("#result").append("<span>Text Overflow: "+ $("#test2")[0].overflow_text.texOverflow+"</span><br />");
票数 5
EN

Stack Overflow用户

发布于 2011-02-09 00:07:43

这是我的解决方案(使用jQuery)。

标记:

代码语言:javascript
复制
<div class="text">This is shown. This is hidden</div>

CSS:

代码语言:javascript
复制
.text{


    outline:1px solid orange;

    width:200px;
    height:20px;
    overflow:hidden;

}

(只有overflow: hidden才是真正重要的,代码仍然可以使用不同的高度和宽度值。)

JS:

代码语言:javascript
复制
$('.text').wrapInner('<div/>');
var originaltext = $('.text div').text();

var t = $('.text div').text();

while(true)
{
    if ($('.text div').height() <= $('.text').height()) { break; }

    $('.text div').text(t.substring(0, t.lastIndexOf(" ")));
    t = $('.text div').text();
}

$('.text div').text(originaltext);

alert("shown: " + originaltext.substring(0, t.length));
alert("hidden: " + originaltext.substring(t.length));

下面是它正在做的事情:

我们将原始文本保存到一个变量中,以便稍后恢复它。

然后,我们一次删除一个单词,直到内部div降低到与容器相同的高度(隐藏溢出)。仍然在div中的所有东西都是可见的,我们必须删除的所有东西都是隐藏的。

限制

我的解决方案假设div只包含文本。它将主要使用像span这样的内联元素,但目前在过程中将它们剥离。它可以很容易地修复以保留跨度,但处理图像或其他复杂情况(如定位元素)要复杂得多。

票数 3
EN

Stack Overflow用户

发布于 2011-02-08 23:43:52

这可以在div中的文本可以换行的特定情况下给出隐藏文本的估计。

代码语言:javascript
复制
 <div class="text"><div id="inner">This is shown. This is hidden</div></div>

添加到.text css类:

代码语言:javascript
复制
 line-height: 20px;

在运行时,您可以使用.height() jquery函数来获得内部div的计算高度。除以行高,可以得到文本被换行到的行数,只显示第一行。然后,你可以猜测最后一个显示/未显示的单词,并在那里子串你的文本。

代码语言:javascript
复制
var text = $("#inner").html();
var height = $("#inner").height();
var lineheight = $("div.text").height();
var rows = Math.round(height / lineheight);
alert("computed inner height: "
    + $("#inner").height()
    + " | rows: " + rows);
alert("Hidden text: "
    + text.substring(
        text.indexOf(" ",Math.round(text.length / rows))));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4934807

复制
相关文章

相似问题

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