CSS超出显示省略号

CSS超出显示省略号

在网页开发中,经常会遇到文本内容过长,超出容器边界的情况。为了美观和节省空间,我们可以使用CSS来控制超出部分的显示效果,其中最常用的方式就是使用省略号来表示被截断的文本。本文将详细介绍如何使用CSS来实现超出显示省略号的效果。

1. 单行文本超出显示省略号

当文本内容超出容器宽度时,我们可以使用text-overflow: ellipsis来实现单行文本的省略号显示效果。同时,需要设置white-space: nowrapoverflow: hidden来确保文本不换行且超出部分被隐藏。

示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Single Line Text Ellipsis</title>
<style>
.ellipsis {
  width: 200px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
</style>
</head>
<body>
<div class="ellipsis">This is a long text that will be truncated with an ellipsis.</div>
</body>
</html>

Output:

CSS超出显示省略号

2. 多行文本超出显示省略号

对于多行文本的省略号显示效果,我们可以结合使用-webkit-line-clampdisplay: -webkit-box来实现。需要注意的是,这种方式只在WebKit浏览器中有效,如Chrome和Safari。

示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Multi Line Text Ellipsis</title>
<style>
.ellipsis {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
</style>
</head>
<body>
<div class="ellipsis">This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis.</div>
</body>
</html>

Output:

CSS超出显示省略号

3. 结合JavaScript动态计算省略号位置

有时候,我们需要根据文本内容和容器宽度动态计算省略号的位置。这时可以结合JavaScript来实现动态计算省略号位置的效果。

示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamic Ellipsis Position</title>
<style>
.ellipsis {
  white-space: nowrap;
  overflow: hidden;
}
</style>
</head>
<body>
<div class="ellipsis" id="dynamicEllipsis"></div>
<script>
const text = "This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis.";
const container = document.getElementById('dynamicEllipsis');
container.textContent = text;

const containerWidth = container.offsetWidth;
const textWidth = container.scrollWidth;

if (textWidth > containerWidth) {
  const ellipsisWidth = container.offsetWidth;
  const ellipsisText = '...';
  let newText = text;

  while (container.scrollWidth > containerWidth) {
    newText = newText.slice(0, -1);
    container.textContent = newText + ellipsisText;
  }
}
</script>
</body>
</html>

Output:

CSS超出显示省略号

4. 使用CSS Grid实现动态省略号位置

另一种实现动态省略号位置的方式是使用CSS Grid布局。通过设置grid-template-columnsgrid-auto-flow属性,我们可以实现动态计算省略号位置的效果。

示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamic Ellipsis Position with CSS Grid</title>
<style>
.container {
  display: grid;
  grid-template-columns: auto 1fr;
  grid-auto-flow: column;
  white-space: nowrap;
  overflow: hidden;
}
</style>
</head>
<body>
<div class="container" id="dynamicEllipsisGrid"></div>
<script>
const text = "This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis.";
const container = document.getElementById('dynamicEllipsisGrid');
container.textContent = text;

const containerWidth = container.offsetWidth;
const textWidth = container.scrollWidth;

if (textWidth > containerWidth) {
  const ellipsisWidth = container.offsetWidth;
  const ellipsisText = '...';
  let newText = text;

  while (container.scrollWidth > containerWidth) {
    newText = newText.slice(0, -1);
    container.textContent = newText + ellipsisText;
  }
}
</script>
</body>
</html>

Output:

CSS超出显示省略号

5. 使用CSS Flexbox实现动态省略号位置

除了CSS Grid布局,我们还可以使用CSS Flexbox布局来实现动态省略号位置。通过设置flex-direction: rowflex-wrap: nowrap属性,我们可以实现动态计算省略号位置的效果。

示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamic Ellipsis Position with CSS Flexbox</title>
<style>
.container {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  overflow: hidden;
}
</style>
</head>
<body>
<div class="container" id="dynamicEllipsisFlexbox"></div>
<script>
const text = "This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis.";
const container = document.getElementById('dynamicEllipsisFlexbox');
container.textContent = text;

const containerWidth = container.offsetWidth;
const textWidth = container.scrollWidth;

if (textWidth > containerWidth) {
  const ellipsisWidth = container.offsetWidth;
  const ellipsisText = '...';
  let newText = text;

  while (container.scrollWidth > containerWidth) {
    newText = newText.slice(0, -1);
    container.textContent = newText + ellipsisText;
  }
}
</script>
</body>
</html>

Output:

CSS超出显示省略号

6. 使用CSS Clamp函数实现动态省略号位置

CSS Clamp函数是CSS3新增的一个函数,可以实现动态计算省略号位置的效果。示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamic Ellipsis Position with CSS Clamp</title>
<style>
.container {
  width: 200px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
}
</style>
</head>
<body>
<div class="container" id="dynamicEllipsisClamp">This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis.</div>
</body>
</html>

Output:

CSS超出显示省略号

7. 使用JavaScript库实现动态省略号位置

除了原生JavaScript,我们还可以使用一些JavaScript库来实现动态省略号位置的效果。例如,使用clamp.js库可以方便地实现多行文本的省略号显示。

示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamic Ellipsis Position with Clamp.js</title>
<style>
.container {
  width: 200px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
}
</style>
</head>
<body>
<div class="container" id="dynamicEllipsisClampJs">This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis.</div>
<script src="https://cdn.jsdelivr.net/npm/clamp-js@0.11.0/dist/clamp.min.js"></script>
<script>
const element = document.getElementById('dynamicEllipsisClampJs');
$clamp(element, { clamp: 3 });
</script>
</body>
</html>

Output:

CSS超出显示省略号

8. 使用CSS Grid和JavaScript实现动态省略号位置

结合CSS Grid布局和JavaScript,我们可以实现更加灵活的动态省略号位置效果。通过动态计算文本内容和容器宽度,我们可以实现自适应的省略号显示效果。

示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamic Ellipsis Position with CSS Grid and JavaScript</title>
<style>
.container {
  display: grid;
  grid-template-columns: auto 1fr;
  grid-auto-flow: column;
  white-space: nowrap;
  overflow: hidden;
}
</style>
</head>
<body>
<div class="container" id="dynamicEllipsisGridJs"></div>
<script>
const text = "This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis.";
const container = document.getElementById('dynamicEllipsisGridJs');
container.textContent = text;

const containerWidth = container.offsetWidth;
const textWidth = container.scrollWidth;

if (textWidth > containerWidth) {
  const ellipsisWidth = container.offsetWidth;
  const ellipsisText = '...';
  let newText = text;

  while (container.scrollWidth > containerWidth) {
    newText = newText.slice(0, -1);
    container.textContent = newText + ellipsisText;
  }
}
</script>
</body>
</html>

Output:

CSS超出显示省略号

9. 使用CSS Flexbox和JavaScript实现动态省略号位置

类似于CSS Grid布局,我们也可以结合CSS Flexbox布局和JavaScript来实现动态省略号位置的效果。通过动态计算文本内容和容器宽度,我们可以实现自适应的省略号显示效果。

示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamic Ellipsis Position with CSS Flexbox and JavaScript</title>
<style>
.container {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  overflow: hidden;
}
</style>
</head>
<body>
<div class="container" id="dynamicEllipsisFlexboxJs"></div>
<script>
const text = "This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis. This is a long text that will be truncated with an ellipsis.";
const container = document.getElementById('dynamicEllipsisFlexboxJs');
container.textContent = text;

const containerWidth = container.offsetWidth;
const textWidth = container.scrollWidth;

if (textWidth > containerWidth) {
  const ellipsisWidth = container.offsetWidth;
  const ellipsisText = '...';
  let newText = text;

  while (container.scrollWidth > containerWidth) {
    newText = newText.slice(0, -1);
    container.textContent = newText + ellipsisText;
  }
}
</script>
</body>
</html>

Output:

CSS超出显示省略号

10. 总结

通过本文的介绍,我们学习了如何使用CSS来实现超出显示省略号的效果。无论是单行文本还是多行文本,我们都可以通过设置合适的CSS属性和结合JavaScript来实现动态省略号位置的效果。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程