<!--此处的样式并不必须-->
<div class="wrap" style="width:200px;border:1px solid red;">这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。</div>

效果1:单行显示不换行,超出部分用省略号代替

.wrap {

/* 超出的文本隐藏 */
overflow:hidden;

/* 溢出不换行 */
white-space:nowrap; 

/* 溢出用省略号显示 */ 
text-overflow:ellipsis; 

}

效果2:多行文本显示,此处显示2行,超出部分用省略号代替

方法1:使用webkit的css扩展属性

注:该方法适用于Safari、chrome和大多数移动端浏览器,但在ie等旧版浏览器下不支持。

.wrap {

/* 将对象作为弹性伸缩盒子模型显示 */
display: -webkit-box;

/* 设置子元素排列方式 */
-webkit-box-orient: vertical;

/* 设置显示的行数,多出的部分会显示为... */
-webkit-line-clamp: 2;

}

方法2:使用伪元素实现,将伪元素放在最后一个字的上方,达到显示省略号的目的。

注:该方法兼容性较好,但文字未超出的情况下也会出现省略号。需要结合js优化

.wrap{

/* 超出的文本隐藏 */
overflow: hidden;

position: relative;
/* line-height X 显示行数 = max-height */
line-height: 20px;
max-height: 40px;

/* 设置文本为两端对齐 */
text-align: justify;

}
.wrap:after {

content: "...";
position: absolute;
bottom: 0;
right: 0;

/* 将省略号的大小设置为1个字体稍大一些的宽度,可以根据覆盖效果自己设置 */
width: 16px;
text-align: center;

/* 设置背景,将最后一个字覆盖掉 */
background: -webkit-linear-gradient(left, transparent, #fff 55%);
background: -moz-linear-gradient(left, transparent, #fff 55%);
background: -o-linear-gradient(left, transparent, #fff 55%);
background: linear-gradient(to right, transparent, #fff 55%);
}

优:1:由于ie6-7不显示content内容,所以要添加标签兼容ie6-7(如:<span>…<span/>)

<div class=”wrap p-after” style=”width:200px;border:1px solid red;”>这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。<span>…</span></div>

优化2:兼容ie8需要将::after替换成:after。

优化3:js判断是否展示省略号

<div class="wrap p-after" style="width:200px;border:1px solid red;">这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。<span>...</span></div>
.wrap{

/* 超出的文本隐藏 */
overflow: hidden;

position: relative;
/* line-height X 显示行数 = max-height */
line-height: 20px;
max-height: 40px;

/* 设置文本为两端对齐 */
text-align: justify;

}
/* 结合要兼容的浏览器类型,设置显示后的样式 */
.p-after span{
position: absolute; bottom: 0; right: 0; 
display:inline-block; width: 16px; 
text-align: center;
background: -webkit-linear-gradient(left, transparent, #fff 55%); background: -moz-linear-gradient(left, transparent, #fff 55%); background: -o-linear-gradient(left, transparent, #fff 55%); background: linear-gradient(to right, transparent, #fff 55%);
}
$(function(){
   $('wrap').each(function(i, obj){ 
        //获取文本的行高,并获取文本的高度
        var lineHeight = parseInt($(this).css("line-height"));
        var height = parseInt($(this).height());
        //规定的行数是2行,那么对超过行数的部分进行限制高度,并加上省略号
        if((height / lineHeight) > 2 ){
            $(this).addClass("p-after")
        }else{
            $(this).removeClass("p-after");
        }
    });
})

方法3:使用js脚本控制

  • 监听DOM尺寸变化
  • 判断是否溢出 scrollHeight > offsetHeight
  • 二分查找多行截取字符临界值(算法的解法:判断字符串是否溢出,二分查找字符串溢出临界子串,控制…显示)

<div class=”wrap” style=”width:200px;border:1px solid red;”>这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。这是一段超长文本。<span>…</span></div>

<style>.wrap{line-height: 20px; height:40px;} </style>
<script type="text/javascript">
        $(function() {
            //定义一个空数组
            var content_arr = [];
 
            //遍历box内容
            $('.wrap').each(function() { 
                //去掉前后文空格
                var content = $.trim($(this).text()); 
                //内容放进数组
                content_arr.push(content); 
            })
            //遍历循环数组
            for (var i = 0; i < content_arr.length; i++) { 
                //如果数组长度(也就是文本长度)>=50(数字可自己定义)
                if (content_arr[i].length >= 50) { 
                    //添加省略号并放进box文字内容后面
                    content = content_arr[i].substr(0, 50) + '...'; 
                    $(".wrap").eq(i).text(content);
                } else {
                    content = content_arr[i];
                    $(".wrap").eq(i).text(content);
                }
            }
        })
    </script>

插件:

clamp.js
jQuery.dotdotdot
(对于这两个插件我没有尝试过,所以就先不介绍了,在网上了解到运用此插件可以兼容IE和FF)

附件一:

CSS3 display:flex和display:box有什么区别?

作者 admin

百度广告效果展示