CSS ellipsis 与 padding 结合时的问题详解

所属分类: 网页制作 / CSS 阅读数: 1025
收藏 0 赞 0 分享

CSS 实现的文本截断

考察如下代码实现文本超出自动截断的样式代码:

.truncate-text-4 {
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 4;
}

使用如下的 HTML 片段进行测试:

<style>
  .my-div {
    width: 300px;
    margin: 10px auto;
    background: #ddd;
  }
</style>
<div class="my-div truncate-text-4">
  How Not To Shuffle - The Knuth Fisher-Yates Algorithm. Written by Mike James.
  Thursday, 16 February 2017. Sometimes simple algorithms are just wrong. In
  this case shuffling an .... In other words as the array is scanned the element
  under
</div>

运行效果:

通过 CSS ellipsis 实现的文本截断效果

padding 的问题

一切都很完美,直到给文本容器加上 padding 样式后。

  .my-div {
    width: 300px;
    margin: 10px auto;
    background: #ddd;
+    padding: 30px;
  }
现在的效果

现在的效果是这样的:

padding 破坏了文本截断

因为 padding 占了元素内部空间,但这部分区域却是在元素内部的,所以不会受 overflow: hidden 影响。

解决办法

line-height

当设置的 line-height 适当时,或足够大时,可以将 padding 的部分抵消掉以实现将多余部分挤出可见范围的目标。

.my-div {
  width: 300px;
  margin: 10px auto;
  background: #ddd;
  padding: 30px;
+  line-height: 75px;
}

通过 line-height 修复

这种方式并不适用所有场景,因为不是所有地方都需要那么大的行高。

替换掉 padding

padding 无非是要给元素的内容与边框间添加间隔,或是与别的元素间添加间隔。这里可以考虑其实方式来替换。

比如 margin。但如果元素有背景,比如本例中,那 margin 的试就不适用了,因为元素 margin 部分是不带背景的。

还可用 border 代替。

.my-div {
  width: 300px;
  margin: 10px auto;
  background: #ddd;
-  padding: 30px;
+  border: 30px solid transparent;
}

使用 border 替换 padding

毫不意外,它仍然有它的局限性。就是在元素本身有自己的 border 样式要求的时候,就会冲突了。

将边距与内容容器分开

比较普适的方法可能就是它了,即将内容与边距分开到两个元素上,一个元素专门用来实现边距,一个元素用来实现文本的截断。这个好理解,直接看代码:

<div className="my-div">
  <div className="truncate-text-4">
    How Not To Shuffle - The Knuth Fisher-Yates Algorithm. Written by Mike
    James. Thursday, 16 February 2017. Sometimes simple algorithms are just
    wrong. In this case shuffling an .... In other words as the array is scanned
    the element under
  </div>
</div>

而我们的样式可以保持不动。

将边距与内容容器分开

相关资源

overflow:hidden ignoring bottom padding

How can I force overflow: hidden to not use up my padding-right space

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

js 解决隐藏与显示div的相关问题

我的导航中就有一栏产品中心下面用隐藏个div然后鼠标放上去就显示出来,但是导航那一块div一直出不来,什么都没有,很是郁闷不知道是什么原因
收藏 0 赞 0 分享

关于clearBoth在GOOGLE Chrome中的问题解决方法

下面这段CSS在IE中好好的,但在GOOGLE Chrome中总是不行,我调测了无数次。问题就出在 clearBoth 这个样式上,此问题如何解决,写下来详细介绍
收藏 0 赞 0 分享

用css margin去掉横排图片之间的间距

HTM,CSS,怎样去掉横排图片之间的间距,是我们的一大头疼问题,于是本人搜集整理一下,晒出来和大家分享,希望可以帮助你们
收藏 0 赞 0 分享

关于li:hover的怎么清除浮动问题实现代码

当鼠标移动上去时,周围显示一个方框,但是后面的会向后移动,如何才能使得当鼠标移上去时后面的li不浮动
收藏 0 赞 0 分享

ie6不支持两个连续并列class类名怎么解决

在网页布局中会使用到两个连续的class,但唯独ie6不支持,很郁闷,于是搜索整理下,晒出来和大家分享
收藏 0 赞 0 分享

如何在class内写xsl标记注意事项

想要在class中写一个xsl标记,想要知道应该如何来写出正确的代码语句,请详看本文
收藏 0 赞 0 分享

ie10 css hack 条件注释等兼容方式整理

ie10已经上线一段时间了,相信已经有一部分前端潮人体验过了,截至到现在,在ie6到ie9的浏览器各种各样的古怪行为,开发人员不得不使用条件注释,有条件的类,和其他特定于IE的css hack来解决
收藏 0 赞 0 分享

IE6双倍边距 IE6浏览器会出现双倍边距解决方法

所谓的IE6双倍边距就是指当元素有float属性,又有margin属性时,在IE6下面显示的margin的值是设置值的两倍,这个问题从有css技术时就已经诞生,本文将介绍详细解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

css 网页背景图片 怎样用CSS实现大背景网页效果

在网页设计制作中经常会遇到这样的问题:用图片做背景时,由于显示器分辨率太大或者图片尺寸太小,在页面的两边或者下部了没有背景图片,使页面变的很僵硬,于是搜集整理一些,晒出来和大家分享
收藏 0 赞 0 分享

CSS字体中英文名称对照表 CSS常用中文字体英文名称对照表

在CSS文件中,我们常看到有些字体名称变成了乱码,这是由于编写者将中文字体的名字直接写成了中文,为了避免这种状况出现,在CSS文件中使用中文字体时,最好使用中文字体的英文名称,需要的朋友可以注意下
收藏 0 赞 0 分享
查看更多