问题背景: 显示一段文本,如果文本超过十行显示展开,收起按钮,按钮占一整行。文本有换行符。
问题:怎么计算文本实际占多少行。
尝试:使用z-index= -1先显示文本,计算文本高度。大于一个固定高度高度来判断。是否超过十行。
疑问:
1.中文和英文的文本高度不一样,固定高度不准确。
2.z-index = -1 来计算觉得要显示两遍文本信息
问题背景: 显示一段文本,如果文本超过十行显示展开,收起按钮,按钮占一整行。文本有换行符。
问题:怎么计算文本实际占多少行。
尝试:使用z-index= -1先显示文本,计算文本高度。大于一个固定高度高度来判断。是否超过十行。
疑问:
1.中文和英文的文本高度不一样,固定高度不准确。
2.z-index = -1 来计算觉得要显示两遍文本信息
要准确计算文本占用的行数,可以使用以下方法:
* 将文本放入一个固定宽度的容器中。
* 使用CSS的`line-height`属性来设置行高。
* 通过JavaScript计算容器的高度,并除以`line-height`来得到行数。
* 可以为英文和中文设置不同的`line-height`。
* 或者,使用字体度量API(如`measureText`)来测量每个字符的宽度,然后根据容器的宽度来计算大致的行数。但这种方法可能不太准确,尤其是当文本中有宽度可变的字符(如中文)时。
* 你可以使用一个隐藏的容器来测量文本高度,而不是使用`z-index`。这个隐藏的容器在视觉上不可见,但可以用于计算。
以下是一个简单的示例,展示如何使用HTML和JavaScript来计算文本的行数:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calculate Text Lines</title>
<style>
.text-container {
width: 300px; /* 设置容器宽度 */
line-height: 1.5em; /* 设置行高 */
visibility: hidden; /* 隐藏容器,但不影响其布局 */
position: absolute;
top: -9999px; /* 将容器移出视口 */
}
</style>
</head>
<body>
<div class="text-container" id="textContainer">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</div>
<script>
function calculateLines() {
const container = document.getElementById('textContainer');
const lineHeight = parseFloat(getComputedStyle(container).lineHeight);
const containerHeight = container.offsetHeight;
const lines = Math.ceil(containerHeight / lineHeight);
console.log(`The text takes up ${lines} lines.`);
}
window.onload = calculateLines;
</script>
</body>
</html>
在这个示例中,.text-container
是一个隐藏的容器,用于测量文本的高度。calculateLines
函数计算并输出文本的行数。这种方法考虑了line-height
,因此可以更准确地计算行数,而不管文本是中文还是英文。
里面还有一堆的链接
dom 获取不到?试试 CSS 动画监听元素渲染吧
尝试借助CSS @container实现多行文本展开收起
突发奇想!借助CSS自定义彩色字体来实现多行文本展开收起
CSS 实现多行文本“展开收起”
CSS 文本超出提示效果
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
6 回答2.2k 阅读
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
5 回答1.2k 阅读✓ 已解决
你的思路没有错,