html2canvas 行内元素边框样式生成问题解决(根据文字生成图片)

news2025/1/15 17:46:18

项目场景:

实现一个基于一段文字生成一张图片的需求,其中,有一段文字需要下划线,但是不是text-decoration:underline;的样式,因为下划线要距离字一段距离,接到这个方案时,第一时间想到的就是html2canvas,但是做的过程中出现了一个小问题。


问题描述

因为这一段文字不是单独存在的,所以我这边的样式最开始给的是行内元素,然后给了一个下边框,但是如果这段文字多行的时候,生成canvas的时候,会导致出现整个文字块下面出现下划线,而不是文字本身下面出现下划线的情况。

代码:

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
  <meta charset="UTF-8">
  <title>html2canvas</title>
  <style>
    span{
        line-height: 26px;
        border-bottom: 3px solid #000;
    }
  </style>
</head>
<body>
  文字部分:
  <div class="container">
    总共有以下学校:<span>小学初中高中大学小学初中高中大学小学初中高中大学小学初中高中大学小学初中高中大学小学初中高中大学小学初中高中大学小学初中高中大学小学初中高中大学</span>
  </div>
  <button onclick="capture()">Capture</button>
  <div style="margin-top: 60px;">生成的图片:</div>
  <script src="http://html2canvas.hertzen.com/dist/html2canvas.js"></script>
  <script>
  function capture () {
    console.log('capture')
    html2canvas(document.querySelector('.container')).then(canvas => {
      document.body.appendChild(canvas)
    })
  }
  </script>
</body>
</html>

具体效果:
在这里插入图片描述


原因分析:

我也没有去看具体的源码,个人认为有可能html2canvas这里去生成图片的时候,把这个行内元素当做块级元素识别了。(PS:个人理解,如果有大佬知道具体原因的可以指导一下)


解决方案:

这里我想的是把每个字单独的塞到一个元素中去,给每个元素一个下边框,再去基于这个结构去生成,这样不管html2canvas怎么识别,每一个字都有一条单独的下划线,视觉上面有一个连在一起的效果,不就成了。

代码:

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
  <meta charset="UTF-8">
  <title>html2canvas</title>
  <style>
    .font{
        margin: 0;
        padding: 0;
        display: inline-block;
        border-bottom: 3px solid #000;
        font-size: 16px;
        line-height: 26px;
    }
  </style>
</head>
<body>
  文字部分:
  <div class="container">
    总共有以下学校:
    <!-- font-size:0;很关键,这样里面的行内块元素就没有间隙了 -->
    <div id="textBox" style="font-size:0;">
        <div class="font">5555</div>
    </div>
    
  </div>
  <button onclick="capture()">Capture</button>
  <div style="margin-top: 60px;">生成的图片:</div>
  <script src="http://html2canvas.hertzen.com/dist/html2canvas.js"></script>
  <script>
    var text = "小学初中高中大学小学初中高中大学小学初中高中大学小学初中高中大学小学初中高中大学小学初中高中大学小学初中高中大学小学初中高中大学小学初中高中大学"
    var node = ''
    for (let index = 0; index < text.length; index++) {
      console.log(text[index])
      node += `<div class="font">${text[index]}</div>`
    }
    console.log(document.getElementById('textBox'))
    document.getElementById('textBox').innerHTML = node
    
  
    function capture () {
      console.log('capture')
      html2canvas(document.querySelector('.container')).then(canvas => {
        document.body.appendChild(canvas)
      })
    }
  </script>
</body>
</html>

具体效果:
在这里插入图片描述
注意点: 要给所有文字的父元素加上一个font-size:0;,去掉各盒子之间的间隙。

个人水平有限,有问题欢迎大家留言指导,仅供学习和参考。

学海无涯!努力二字,共勉!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在x86的Docker中构建TVM的ARM环境

文章目录前言1. 加载arm-ubuntu镜像2. 安装acl库3. 编译arm运行时4. 编译在x86运行在arm4.1 在x86的环境中构建arm的编译环境4.2 测试x86-ubuntu与arm-ubuntu能否ping通4.3 调用RPC4.4 ACL的使用5. arm版的tvm编译和运行时环境5.1 构建arm版的tvm编译和运行时环境5.2 关于ubunt…

卷积版wav to image 训练实例

🍿*★,*:.☆欢迎您/$:*.★* 🍿 目录 背景 正文 总结 背景描述

Java语言知识大盘点(期末总复习)二

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

2022年珠海市第三届半导体行业集成电路测试工竞赛成功举办

11月19日&#xff0c;2022年珠海市第三届职业技能大赛暨香洲区第七届“香洲工匠”职业技能竞赛半导体行业集成电路测试工竞赛在珠海这片创新热土上成功举办&#xff0c;48支集成电路高素质技能人才队伍齐聚香江&#xff0c;同台竞技&#xff0c;碰撞出绚烂的“芯”火花。 香洲区…

Spring之Gateway网关

前言 什么是网关&#xff1f;简单理解就是我们所有服务的入口&#xff0c;当我们使用了微服务以后&#xff0c;每个服务都会有一个对应的接口&#xff0c;比如我们有用户服务&#xff0c;订单服务等等&#xff0c;如果没有网关的话&#xff0c;那么前端是这样调用的 很明显app和…

Design a TinyURL

title: Notes of System Design No.02 — Design a TinyURL date: 2022-05-05 13:23:57 tags: 系统设计 categories: 系统设计 description: " Design a TinyURL" 1.Functional Requirements 1.长链接->短链接(写) 2.短链接->长链接(读) 3.可以设置超时时间…

unittest框架

unittest框架1.通过unittest框架创建测试2.通过unittest框架添加断言3.自动化用例管理TestLoader类的用法4.unittest智能封装等待1.通过unittest框架创建测试 1.必须继承于unittest.TestCase类 2.可以定义setUp和tearDown方法进行初始化&#xff0c;每条测试用例开始或结束会执…

谷歌浏览器-chrome浏览器占用电脑CPU过高、容易崩溃的解决办法

一、问题背景 最近特别难受的一点——谷歌浏览器总是莫名其妙崩溃&#xff0c;而且明明是只开了两三个标签页的情况下。 不管是谷歌自己的任务管理器&#xff0c;还是win10自带的任务管理器&#xff1b;在崩溃情况下&#xff0c;谷歌浏览器的电脑cpu占用率高达80以上。 网上…

Java01-JDK1.8下载安装教程(win11版)

文章导航JDK 1.8 官网下载&#xff08;下载慢&#xff09;百度网盘下载&#xff08;下载快&#xff09;安装过程JDK环境配置教程验证JDK是否安装成功使用JDK1.8的原因当下互联网行情以及个人建议JDK 1.8 官网下载&#xff08;下载慢&#xff09; 点击跳转至JDK1.8官方网址 32…

暴雪和网易分手百万玩家何去何从

暴雪和网易分手百万玩家何去何从 这两天看到很多报道说网易与暴雪分手的消息&#xff0c;作为一个游戏玩家我甚是感到很意外。 看了不少相关的报道消息才有了今天的这篇文章 暴雪和其旗下《魔兽世界》等游戏陪伴了我们这一代人成长&#xff0c;或许终究不属于这个时代。看到暴…

智慧路灯解决方案-最新全套文件

智慧路灯解决方案-最新全套文件一、建设背景二、思路架构三、建设方案四、获取 - 智慧路灯全套最新解决方案合集一、建设背景 智慧城市是利用信息通信技术感知、分析、整合城市运行核心系统的各种关键信息&#xff0c;从而改善民生、环保、公共安全、城市服务、智能响应包括工…

【Java八股文总结】之反射

文章目录Java反射一、泛型1、何为泛型&#xff1f;2、泛型通配符Q&#xff1a;泛型擦除是什么&#xff1f;3、泛型上限和下限二、反射1、何为反射&#xff1f;2、反射有什么用&#xff1f;3、反射应用场景有哪些&#xff1f;Q&#xff1a;反射的优缺点&#xff1f;4、反射获取C…

三极管集电极电阻的作用

放大状态&#xff1a;电流信号转变为电压信号 饱和状态 ;发射极正偏&#xff0c;集电极反偏 当有无电阻的作用。当集电极有电阻时&#xff0c;可以得到随IC电流变化的电压信号&#xff0c;当工作在饱和状态。集电阻电阻越大。越容易进入饱和状态.当Ib有个小电流,Ic会出现大的…

Dubbo的SPI机制

目录 什么是 SPI Java SPI 示例 Java SPI 源码分析 想一下 Java SPI 哪里不好 Dubbo SPI Dubbo SPI 简单实例 Dubbo 源码分析 getExtensionClasses Adaptive 注解 - 自适应扩展 Adaptive 注解在类上 Adaptive 注解在方法上 WrapperClass - AOP injectExtension - …

webpack 官方文档解读一(详细使用教程) 起步

什么是webpack 就是个打包工具。通过一系列插件帮你优化项目&#xff0c;压缩&#xff0c;混淆等。总之什么脏活累活都能干。 入门案例 创建一个目录&#xff0c;并安装webpack和webpack-cli这两个包。webpack包是webpack本体&#xff0c;webpack-cli是他提供的工具包。 mk…

RTL8380M/RTL8382M管理型交换机系统软件操作指南二:转发表

前面介绍了端口配置,这次对转发表进行详细的描述&#xff0c;主要包括以下三方面内容&#xff1a;基础配置、转发表、删除1.1 基础配置 1.1.1 老化时间 老化时间是一个影响交换机学习进程的参数。从一个地址记录加入地址表以后开始计时&#xff0c;如果在老化时间内各端口未收…

ResNet网络详解

ResNet ResNet在2015年由微软实验室提出&#xff0c;斩获当年lmageNet竞赛中分类任务第一名&#xff0c;目标检测第一名。获得coco数据集中目标检测第一名&#xff0c;图像分割第一名。 ResNet亮点 1.超深的网络结构(突破1000层) 2.提出residual模块 3.使用Batch Normalizat…

java项目-第147期ssm社区生活超市管理系统_(spring+springmvc+mybatis+jsp)_java毕业设计_计算机毕业设计

java项目-第147期ssm社区生活超市管理系统_(springspringmvcmybatisjsp)_java毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm社区生活超市管理系统》 该项目分为3个角色&#xff0c;管理员、用户、供应商角色。 用户可以浏览前台商品&#xff0c;进行…

[附源码]java毕业设计软件项目过程管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

牛客小白月赛 61 E 排队

题目大意&#xff1a; n个数&#xff0c;共有n&#xff01;种排列方式&#xff0c;记Pi(a)表示序列a的第i种排队方式&#xff0c;cnt(Pi(a))表示P(i)的逆序对个数&#xff0c;PLMM想知道这n&#xff01;种排列方式共有多少对逆序对 给定一个 nnn 个数&#xff0c;在所有排列顺序…