Skip to content

文本超出

实现文本超出显示省略号(...)的方法

当文本内容超出容器宽度时,可以通过 CSS 或 JavaScript 实现显示省略号的效果。以下是几种常见的实现方式:

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

css
.ellipsis {
  white-space: nowrap;      /* 禁止换行 */
  overflow: hidden;         /* 隐藏溢出内容 */
  text-overflow: ellipsis;  /* 显示省略号 */
  width: 200px;            /* 需要指定宽度 */
}

2. 多行文本溢出显示省略号(WebKit内核浏览器)

css
.multiline-ellipsis {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;    /* 限制显示行数 */
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 200px;         /* 可选,限制最大宽度 */
}

3. 使用 JavaScript 实现(兼容性更好)

javascript
function truncateText(element, maxLength) {
  const text = element.textContent;
  if (text.length > maxLength) {
    element.textContent = text.substring(0, maxLength) + '...';
  }
}

// 使用示例
const textElement = document.querySelector('.text');
truncateText(textElement, 50);

4. 响应式解决方案(结合 CSS 和 JS)

css
.responsive-ellipsis {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

@media (max-width: 768px) {
  .responsive-ellipsis {
    max-width: 150px;
  }
}

5. 在 Vue/React 等框架中的实现

Vue 示例

vue
<template>
  <div class="ellipsis" :title="fullText">
    {{ truncatedText }}
  </div>
</template>

<script>
export default {
  props: ['text', 'maxLength'],
  computed: {
    truncatedText() {
      return this.text.length > this.maxLength 
        ? this.text.substring(0, this.maxLength) + '...'
        : this.text;
    },
    fullText() {
      return this.text;
    }
  }
}
</script>

<style>
.ellipsis {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  width: 200px;
}
</style>

6. 表格单元格中的文本省略

css
table td {
  max-width: 150px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

注意事项

  1. 宽度限制:必须为元素设置明确的宽度或最大宽度
  2. Flex布局:在 flex 容器中,可能需要添加 min-width: 0 使省略号生效
  3. 可访问性:考虑使用 titlearia-label 属性显示完整文本
  4. 多行限制-webkit-line-clamp 是非标准属性,主要在现代浏览器中支持

选择哪种方法取决于你的具体需求和浏览器兼容性要求。CSS 方案更简洁高效,而 JavaScript 方案则提供更多控制和更好的兼容性。