首页 > 其他分享 >css3多行文本多行文本缩略点击更多展开显示全部

css3多行文本多行文本缩略点击更多展开显示全部

时间:2024-04-21 18:23:35浏览次数:32  
标签:多行 css3 省略 value lineHeight 文本 icon

比如我要实现如下效果:

image.png

数据集名称展示一行,超出自动省略,末尾增加编辑icon。点击编辑的icon,换成input 输入框

数据集描述最多展示三行,超出自动省略。末尾增加编辑icon。点击编辑的icon,换成textarea 输入框

展示一行省略+icon实现

单行省略实现,无非是这样

<div class="flex-row align-items-center full-width">
  <div style="max-width: 192px">
    <OverflowTitle>
      {name.value}
    </OverflowTitle>
  </div>
  <i
    class="bkvision-icon icon-bianji text-link ml-min font-medium"
    onClick={() => {
      isEditedName.value = false;
      nextTick(() => {
        isEditedNameRef?.value?.focus();
      });
    }}
  />
</div>

文本溢出省略加提示,可以参考 https://github.com/zhoulujun/textOverflowTitle

多行文本省略

多行文本省略,css3也有属性。主要靠webkit-line-clamp

具体样式如下:

.multi-text-over {
  background: #fff;
  position: relative;
  word-break: break-all;

  /* autoprefixer: off */
  display: box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  white-space: normal;
  overflow: hidden;

  &-more {
    position: absolute;
    right: 0;
    bottom: 0;
    background: inherit;
  }

  &-icon {
    margin-left: 4px;
    color: #3a84ff;
    cursor: pointer;
    font-size: 16px;
  }
}

如何做到自适应呢?

import { defineComponent, nextTick, onMounted, ref } from 'vue'
import './index.scss'
import { EditLine } from 'bkui-vue/lib/icon'

export default defineComponent({
  name: 'TextExpander',
  props: {
    emptyText: {
      type: String,
      default: '--'
    },
    line: {
      type: Number,
      default: 3
    },
    lineHeight: Number,
    content: String
  },
  emits: ['click'],
  setup(props, { emit, slots }) {
    const boxRef = ref<HTMLElement>(null)
    const icon = slots.icon ? slots.icon() : (
      <EditLine class='multi-text-over-icon' onClick={() => emit('click')} />
    )
    const isOverflow = ref(false)
    onMounted(() => {
      nextTick(() => {
        const { clientHeight, scrollHeight } = boxRef.value
        isOverflow.value = scrollHeight > clientHeight
      })
    })
    return () => (
      <div class='multi-text-over' ref={boxRef} style={{ '-webkit-line-clamp': props.line }}>
        <span title={isOverflow.value ? props.content : ''}>{props.content || '--'}</span>
        {isOverflow.value ? (<div class='multi-text-over-more'>...{icon}</div>) : (
          <span>{icon}</span>)}
      </div>
    )
  }
})

具体参看:https://github.com/zhoulujun/text-expander

当然这个高度,是外面容器给的。

如何自适应比如给定高度,自定计算webkit-line-clamp为几行呢?

这个这个不能直接用box.value.style.lineHeight,获取的为空字符串

具体代码如下:

let element = document.getElementById('yourElementId'); // 用你的元素ID替换 'yourElementId'
let style = window.getComputedStyle(element);
let lineHeight = style.getPropertyValue('line-height');

if (lineHeight === 'normal') {
    // 如果行高是 'normal',则获取字体大小并乘以约1.2
    let fontSize = parseFloat(style.getPropertyValue('font-size'));
    lineHeight = Math.round(fontSize * 1.2) + 'px';
}

console.log(lineHeight);

当然1.2 是不对,也有可能是1.5。这个代码么有通用性。这个需要给定行高。

然后通过高度除以函告,自动计算出展示几行。

 

参考文章:

CSS 实现多行文本“展开收起” https://juejin.cn/post/6963904955262435336

 


转载本站文章《css3多行文本多行文本缩略点击更多展开显示全部》,
请注明出处:https://www.zhoulujun.cn/html/webfront/style/css3/2023_0930_8985.html

标签:多行,css3,省略,value,lineHeight,文本,icon
From: https://www.cnblogs.com/zhoulujun/p/18149293

相关文章

  • 如何使用XSSFWorkbook读取文本薄?
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18146625出自【进步*于辰的博客】1、文件兼容类型。//兼容文件后缀列表privatestaticfinalStringFILE_TYPE;static{FILE_TYPE=".xls/.xlsx/.csv";}2、文......
  • reg2inf.exe 是一个 Windows 实用工具,用于将 Windows 注册表文件 (.reg) 转换为 Windo
    reg2inf.exe是一个Windows实用工具,用于将Windows注册表文件(.reg)转换为WindowsINF文件(.inf)。INF文件是一种文本文件,通常用于在Windows操作系统中安装设备驱动程序和配置设置。使用reg2inf.exe工具可以将注册表中的配置转换为INF格式,从而可以在Windows......
  • wangeditor5富文本中的图片点击放大
    放大图片组件img-preview.vue<template> <divclass="preview"@click="onClick"@keydown="onKeydown"> <divclass="preview-img"> <img:src="src"alt/> </div> </div>&l......
  • NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据|附代码数据
    全文链接:http://tecdat.cn/?p=2155最近我们被客户要求撰写关于NLP自然语言处理的研究报告,包括一些图形和统计输出。随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带。领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的时......
  • delphi中Memo1下拉ListBox1选择完成文本填充
    delphi中Memo1下拉ListBox2选择完成文本填充拖一个Memo1下拉ListBox2到界面上,假设ListBox2,里已加载列名最终效果:Memo1里输入.点号,带出ListBox2,选择好列名,回车,将点号和列名输入到Memo1原位置 ......
  • shell vi 文本替换字符串
     在shell中使用vi或vim编辑器进行文本替换可以通过以下步骤完成:打开终端。使用vi或vim命令打开目标文件,例如:vifilename.txt。进入替换模式,可以通过按:%s/old_string/new_string/g进行全局替换。 : 进入命令模式。% 表示文件中的所有行。......
  • vim多行注释与取消
    Step1:在命令行模式下,将光标固定在第一列,按Ctrl+V快捷键进入VB可视化模式: Step2:上下移动光标,选择你想要注释的行: Step3:选择好之后,按**大写的**I键进入insert模式,输入注释符“//”或“#”: 注意这里一定要按大写的I键,小写的是不行的。Step4:最后按ESC键(两次),选择......
  • 小程序上显示富文本
    功能:富文本内容格式化、拿到富文本里的所有图片点击放大图片util.tsexportfunctionformatRichText(html:any){//富文本内容格式化letarrText=html;//正则匹配不含style=""或style=''的img标签varregex1=newRegExp("(i?)(\<img)(?!(.*?sty......
  • WPF 在后台代码中选中DataGrid的多行
    1///<summary>2///设置datagrid选中多行3///</summary>4///<paramname="listIndex"></param>5privatevoidSetSelectMessageIndex(List<int>listIndex)6{7......
  • LayUI弹窗确定后获取子页面的值(如获取UEditor富文本的内容,或input标签内容)
    LayUI弹窗确定后获取子页面的值(如获取UEditor富文本的内容,或input标签内容)子窗体JS代码<scriptsrc="~/lib/ueditor-1.4.3.3/ueditor.config.js"></script><scriptsrc="~/lib/ueditor-1.4.3.3/ueditor.all.js"></script><script>varue=UE.......