对超出父元素的文本进行处理

#设置文本内容超出父元素时截断

在页面开发时,经常会遇到需要把文本内容截取一部分显示的情况,比如QQ空间中对长内容进行折叠。
这里牵扯到三个CSS属性

**text-overflow**
**white-space**
**overflow**

overflow

overflow 属性定义了当元素大小溢出父元素的框时触发溢出事件的操作(常见于P与span元素),比如超出部分被截断或者应滚动条显示
取值如下

  1. visible 默认值。内容不会被修剪,会呈现在元素框之外。
  2. hidden 内容会被修剪,并且其余内容是不可见的。
  3. scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
  4. auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
  5. inherit 规定应该从父元素继承 overflow 属性的值。

#text-overflow
text-overflow属性定义文本内容溢出时的代替文本,需要和overflow属性配合使用,因为其本身并不能设置触发溢出事件,只有当overflow设置为hidden时该属性才有意义
语法如下:

text-overflow: clip|ellipsis|string;

	 1. clip	    修剪文本。
	 2. ellipsis	显示省略符号来代表被修剪的文本。
	 3. string	    使用给定的字符串来代表被修剪的文本。	

#white-space
父元素大小未确定情况下 使用p元素放置长文本时,P元素会自动换行然后把父元素的大小撑开,不会触发溢出事件,很多时候我们也希望只显示一行文本内容,white-space属性就可以做到这一点 (实际上是对文本中空格符的处理)

  1. normal 默认。空白会被浏览器忽略。
  2. pre 空白会被浏览器保留。其行为方式类似 HTML 中的
     标签。
  3. nowrap 文本不会换行,文本会在在同一行上继续,直到遇到
    标签为止。
  4. pre-wrap 保留空白符序列,但是正常地进行换行。
  5. pre-line 合并空白符序列,但是保留换行符。
  6. inherit 规定应该从父元素继承 white-space 属性的值。

于是 想要实现P元素保留单行文字并用省略号填充 需要设置CSS如下

p
{
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在React中实现文本超出一定像素长度时,使用三个点代替,并在鼠标悬浮时显示完整文本的弹窗,同时根据元素的长度进行自适应变化,你可以按照以下步骤操作: 1. 首先,安装所需的依赖包。在终端中运行以下命令: ``` npm install react-tooltip ``` 2. 创建一个名为`TruncatedText`的组件,并实现文本截断和弹窗功能。 ```jsx import React, { useState, useRef, useEffect } from 'react'; import ReactTooltip from 'react-tooltip'; const TruncatedText = ({ text, maxWidth }) => { const [isTooltipVisible, setTooltipVisible] = useState(false); const textRef = useRef(null); useEffect(() => { if (textRef.current.offsetWidth < textRef.current.scrollWidth) { setTooltipVisible(true); } }, []); const handleMouseEnter = () => { if (textRef.current.offsetWidth < textRef.current.scrollWidth) { setTooltipVisible(true); } }; const handleMouseLeave = () => { setTooltipVisible(false); }; return ( <React.Fragment> <div ref={textRef} style={{ maxWidth: `${maxWidth}px`, overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis', }} onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave} > {text} </div> {isTooltipVisible && ( <ReactTooltip place="top" type="dark" effect="solid"> {text} </ReactTooltip> )} </React.Fragment> ); }; export default TruncatedText; ``` 在上述代码中,我们使用`useState`来管理弹窗的可见性状态。使用`useRef`来引用文本元素,并通过`useEffect`在组件挂载时检查文本是否超出指定的最大宽度。然后,我们使用`handleMouseEnter`和`handleMouseLeave`处理鼠标悬浮事件,并根据需要显示或隐藏弹窗。 3. 在组件中使用`TruncatedText`组件。 ```jsx import React from 'react'; import TruncatedText from './TruncatedText'; const App = () => { return ( <div style={{ width: '300px' }}> <TruncatedText text="This is a long text that will be truncated with ellipsis when it exceeds the maximum width." maxWidth={200} /> </div> ); }; export default App; ``` 在上述代码中,我们创建一个组件`App`,并在其中使用`TruncatedText`组件。通过设置元素的宽度,可以实现最大像素长度的自适应变化。 这样,当文本超出最大宽度时,将会显示三个点,并且鼠标悬浮时会弹出完整的文本内容。你可以根据需要进行进一步的样式调整和功能扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值