网页制作 
首页 > 网页制作 > 浏览文章

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

(编辑:jimmy 日期: 2024/10/1 浏览:3 次 )

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 结合时的问题详解

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

padding 的问题

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

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

现在的效果是这样的:

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

padding 破坏了文本截断

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

解决办法

line-height

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

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

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

通过 line-height 修复

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

替换掉 padding

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

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

还可用 border 代替。

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

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

使用 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>

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

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

将边距与内容容器分开

相关资源

overflow:hidden ignoring bottom padding

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

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

上一篇:使用CSS3实现SVG路径描边动画效果入门教程
下一篇:CSS3 实现footer 固定在底部(无论页面多高始终在底部)
一句话新闻
一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?