【element-tiptap】如何引进系统中的字体?

源码地址:
https://github.com/Leecason/element-tiptap
源码中给出的字体如下
在这里插入图片描述
可以看到,咱们日常需要的黑体、微软雅黑等都没有,所以这篇文章来探索一下怎么加字体。
另外呢,肯定有小伙伴发现,这个按钮点击的时候,没有下拉框。我们先看一下这个组件的代码,对应的扩展地址为:
src/extensions/font-family.ts
组件是这个 src/components/MenuCommands/FontFamilyDropdown.vue
我摘录一下最关键的代码

<template><el-dropdown placement="bottom" trigger="click" @command="toggleFontType"><command-button:enable-tooltip="enableTooltip":tooltip="t('editor.extensions.FontType.tooltip')":readonly="isCodeViewMode"icon="font-family"/>[添加链接描述](https://element-plus.org/zh-CN/component/dropdown.html)<template #dropdown><el-dropdown-menu class="el-tiptap-dropdown-menu"></el-dropdown-menu></template></el-dropdown>
</template>

可以看到,下拉框使用的是 element-plusdropdown 组件
我们去到官网看一看这个组件是怎么用的
dropdown

可以看到,.el-dropdown 里面要套一个 .el-dropdown-link 才行
在这里插入图片描述
command-button 是自定义的组件,并且是多个地方公用的组件,所以我们直接在这个组件里面增加一个父元素 div.el-dropdown-link
src/components/MenuCommands/CommandButton.vue

<template><div class="el-dropdown-link"><el-tooltip:content="tooltip":show-after="350":disabled="!enableTooltip || readonly"effect="dark"placement="top"><div :class="commandButtonClass" @mousedown.prevent @click="onClick"><v-icon :name="icon"/></div></el-tooltip></div>
</template>

酱紫下拉框就阔以正常使用啦!!
下面这几个扩展其实都有这个问题,咱们在公共组件中修改,就可以一次性一网打尽!
在这里插入图片描述
你肯定会发现咱俩的菜单项怎么不一样,其实是因为我把所有的扩展都放到 Simple.vue 页面中了,并且有的不需要的也稍微删了一下,这个也不重要啦。

我们还是看一下字体列表的数据是怎么来的
还是在 src/components/MenuCommands/FontFamilyDropdown.vue 中的计算属性

fontFamilies() {const fontFamilyOptions = this.editor.extensionManager.extensions.find((e) => e.name === 'fontFamily')!.options;console.log("fontFamilyOptions")console.log(fontFamilyOptions)return fontFamilyOptions.fontFamilyMap;
},

看一下输出是什么样子的
在这里插入图片描述

我们回到 fontFamily 这个扩展的定义 src/extensions/font-family.ts

可以看到 fontFamilyMap 是引用的 src/utils/font-type.ts 文件中定义的数据

const DEFAULT_FONT_FAMILY_NAMES = ['Arial','Arial Black','Georgia','Impact','Tahoma','Times New Roman','Verdana','Courier New','Lucida Console','Monaco','monospace',
];export const DEFAULT_FONT_FAMILY_MAP = DEFAULT_FONT_FAMILY_NAMES.reduce((obj: { [key: string]: string }, type: string) => {obj[type] = type;return obj;},{}
);

那么,是不是在这里加上我们想要的字体名称就可以呢…
经过我的实验呢,发现加 宋体、黑体 这样的汉字是木有用的,但是但是,我们使用中文字体的英文表示法就好啦!
Mac OS的一些:
华文细黑:STHeiti Light [STXihei]
华文黑体:STHeiti
华文楷体:STKaiti
华文宋体:STSong
华文仿宋:STFangsong
儷黑 Pro:LiHei Pro Medium
儷宋 Pro:LiSong Pro Light
標楷體:BiauKai
蘋果儷中黑:Apple LiGothic Medium
蘋果儷細宋:Apple LiSung Light
Windows的一些:
新細明體:PMingLiU
細明體:MingLiU
標楷體:DFKai-SB
黑体:SimHei
宋体:SimSun
新宋体:NSimSun
仿宋:FangSong
楷体:KaiTi
仿宋_GB2312:FangSong_GB2312
楷体_GB2312:KaiTi_GB2312
微軟正黑體:Microsoft JhengHei
微软雅黑体:Microsoft YaHei
装Office会生出来的一些:
隶书:LiSu
幼圆:YouYuan
华文细黑:STXihei
华文楷体:STKaiti
华文宋体:STSong
华文中宋:STZhongsong
华文仿宋:STFangsong
方正舒体:FZShuTi
方正姚体:FZYaoti
华文彩云:STCaiyun
华文琥珀:STHupo
华文隶书:STLiti
华文行楷:STXingkai
华文新魏:STXinwei

由于我的电脑是mac,我就先实验一下 STFangsong 这个字体,直接加到数组中
在这里插入图片描述
确实,这样子是好使的,但是呢,能不能显示成中文呢?
改造一下 src/utils/font-type.ts 这个文件的代码,把中文的字体的中文名和英文名的对应关系定义好,然后也加到 默认字体 中

const DEFAULT_FONT_FAMILY_NAMES = ['Arial','Arial Black','Georgia','Impact','Tahoma','Times New Roman','Verdana','Courier New','Lucida Console','Monaco','monospace',
];const ZH_FONT_FAMILY_MAPS = {华文细黑: 'STHeiti Light',华文黑体: 'STHeiti',华文楷体: 'STKaiti',华文宋体: 'STSong',华文仿宋: 'STFangsong','丽黑 Pro': 'LiHei Pro Medium','丽宋 Pro': 'LiSong Pro Light',標楷体: 'BiauKai',苹果丽中黑: 'Apple LiGothic Medium',苹果丽细宋: 'Apple LiSung Light'
};const DEFAULT_FONT_FAMILY_MAP = DEFAULT_FONT_FAMILY_NAMES.reduce((obj: { [key: string]: string }, type: string) => {obj[type] = type;return obj;},{}
);
// 将ZH_FONT_FAMILY_MAPS 加入到默认字体中
Object.assign(DEFAULT_FONT_FAMILY_MAP, ZH_FONT_FAMILY_MAPS);
export default DEFAULT_FONT_FAMILY_MAP;

📢📢📢 此时会报错
在这里插入图片描述
原因是咱们导出的方式由之前的命名导出改为了默认导出,那么咱们在导入的时候,就不能再使用花括号进行导入
src/extensions/font-family.ts

import DEFAULT_FONT_FAMILY_MAP from '@/utils/font-type';

输出一下此时的字体数据
在这里插入图片描述
但是列表中还是都是英文,原因是模版中遍历的时候并没有使用数据 fontFamilies 中的 key ,咱们修改一下模版就可以了
v-for在遍历对象的时候,顺序是 value, key
src/components/MenuCommands/FontFamilyDropdown.vue
在这里插入图片描述

这样就成功了!!
在这里插入图片描述
此时可以看到这个菜单太长了,可以加个样式限制一下最大高度
可以在这里加一个文件,写自定义的样式
在这里插入图片描述

.el-tiptap-dropdown-menu {max-height: 400px;overflow-y: auto;
}

然后我们需要看一下其他的样式文件是怎么被引入的
在这里插入图片描述
原来是在这里,模仿!

@import '../styles/custom.scss';

成功!
在这里插入图片描述
但是其中有几个是没效果的,可能是因为我电脑上没有这种字体,有需要的同学可以搜一下怎么下载。
我是mac电脑,其实是可以通过字体册查看所有支持的字体
在这里插入图片描述

然后我们可以加一些比较好看的字体,比如下面这个卡哇伊的娃娃体
在这里插入图片描述
标出来的地方,就是该字体对应的英文标识符,有的字体没有,就写汉字就行。然后从这里我发现,上面的字体不起作用,是因为英文标识符不正确!所以大家以自己电脑上给出的标识符为准。
在这里插入图片描述

const ZH_FONT_FAMILY_MAPS = {华文黑体: 'STHeiti',华文楷体: 'STKaiti',华文宋体: 'STSong',华文仿宋: 'STFangsong',标楷体: 'BiauKai','娃娃体-繁': 'DFWaWaTC-W5','娃娃体-简': 'DFWaWaSC-W5','行楷-简': '行楷-简','翩翩体-简': '翩翩体-简',蘋果儷中黑: 'LiGothicMed'
};

参考文章:css设置中文字体后样式无效解决方法

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

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

相关文章

NVM下载、安装、配置

一、下载 nvm在win系统下载链接 https://github.com/coreybutler/nvm-windows/releases zip版本已上传到资源文件中&#xff0c;链接 https://download.csdn.net/download/m0_46613429/89870864 二、安装 1、双击exe文件 2、选择 accept 3、选择nvm安装位置 4、选择nodejs安…

无线费控智能水表:智能生活的守护者

在当今智能化日益普及的时代&#xff0c;无线费控智能水表作为一项重要的技术创新&#xff0c;正在逐步改变我们的生活方式。它不仅能够实现远程抄表&#xff0c;自动计费&#xff0c;还能有效监控用水情况&#xff0c;促进水资源的合理利用&#xff0c;是现代城市智慧化管理不…

骨传导耳机哪个牌子最好?五大爆品骨传导耳机全维度拆解推荐!

随着科技的不断进步&#xff0c;消费者对电子产品的需求也在日益增长&#xff0c;特别是在音频领域&#xff0c;骨传导耳机作为一项革新性的技术&#xff0c;正逐渐成为市场的新宠。不同于传统的空气传导耳机&#xff0c;骨传导耳机通过振动颅骨直接将声音传递至内耳&#xff0…

LINUX 系统管理操作

基础编辑 Tab 单击一次补全 双击列举候选 CTRL U 删除光标前 K 删除光标后 L 清屏&#xff08;只剩新命令行&#xff09; C 取消当前操作 反斜杠“\” 在需要转行的时候输入反斜杠 “\”回车 在>后继续输入 帮助命令 help 命令 大部分内建命令 格式&#xff1a;h…

目标检测中的损失函数

损失函数是用来衡量模型与数据的匹配程度的&#xff0c;也是模型权重更新的基础。计算损失产生模型权重的梯度&#xff0c;随后通过反向传播算法&#xff0c;模型权重得以更新进而更好地适应数据。一般情况下&#xff0c;目标损失函数包含两部分损失&#xff0c;一个是目标框分…

一个月学会Java 第9天 构造器与访问修饰符

Day9 构造器与访问修饰符 本来其实是想在Day8里面把这个构造器给讲掉的&#xff0c;但是发现篇幅有点长的&#xff0c;后面的内容也是稍微有一点点超纲了&#xff0c;所以就先把这个留着&#xff0c;现在再讲。 第一章 构造器 构造器&#xff0c;我们之前在讲类的时候其实是说过…

代码随想录 (三)—— 哈希表部分刷题

当我们想使用哈希法来解决问题的时候&#xff0c;我们一般会选择如下三种数据结构。 数组set &#xff08;集合&#xff09;map(映射) 在java中有就是&#xff0c;hashmap, LinkedHashMap, TreeMap &#xff0c;HashTable 等 总结一下&#xff0c;当我们遇到了要快速判断一个…

系统开发基础错题解析二【软考】

目录 前言1.人机界面设计2.架构设计2.1管道过滤器体系2.2仓库风格 3.软件测试相关概念4.白盒测试用例4.14.2 5.测试分类与阶段任务划分6.软件维护类型7.软件质量保证8.软件过程改进 前言 本文专门用来记录本人在做软考中有关系统开发基础的错题&#xff0c;我始终认为教学相长…

利用特征点采样一致性改进icp算法点云配准方法

1、index、vector 2、kdtree和kdtreeflann 3、if kdtree.radiusSearch(。。。) > 0)

平板外壳高精度标签粘贴应用

电子平板、手机等产品的外壳的上常会贴有各式各样的标签&#xff0c;这是电子设备制造业中不可或缺的环节&#xff0c;它不仅关乎产品信息的准确传达&#xff0c;还承载着品牌宣传、防伪追溯等多重功能。通过贴标&#xff0c;设备制造商能够清晰地标注设备的型号、序列号、生产…

通过AI技术克服自动化测试难点(上)

本文我们一起分析一下AI技术如何解决现有的自动化测试工具的不足和我们衍生出来的新的测试需求。 首先我们一起看一下计算机视觉的发展历史&#xff0c;在上世纪70年代&#xff0c;处于技术萌芽期&#xff0c;由字符的识别技术慢慢进行演化&#xff0c;发展到现在&#xff0c;人…

Microbiome | 嫁接植物微生态大揭秘:抗病研究的新思路

在现代农业中&#xff0c;嫁接技术作为一种有效的植物改良方法&#xff0c;已被广泛应用于瓜果种植。然而&#xff0c;嫁接技术背后的微生物学奥秘却鲜为人知。今天&#xff0c;我们将通过一篇《Microbiome》的文章带您深入探讨嫁接西瓜的根际微生物群&#xff0c;了解它们如何…

DMA 详解

目录 一、简介二、STM32 中的 DMA1、DMA 框图1.1 传输方式1.2 仲裁器1.3 数据流1.4 指针递增模式1.5 存储器到存储器模式1.6 DMA 中断 2、DMA 配置 一、简介 DMA&#xff08;Direct Memory Access&#xff0c;直接存储器访问&#xff09;顾名思义&#xff0c;就是绕开 CPU 直接…

美国1米DEM地形瓦片数据免费分享(4)-新泽西州

一、简要介绍 新泽西州(英语:State of New Jersey)位于美国中大西洋地区&#xff0c;其命名源自位于英吉利海峡中的泽西岛&#xff0c;昵称为“花园州”。新泽西州亦为美国东部的一个州&#xff0c;北接纽约州&#xff0c;东面大西洋&#xff0c;南向特拉华州&#xff0c;西临…

OpenEBS 实现 PV 动态持久化存储安装

什么是 OpenEBS OpenEBS 将 Kubernetes 工作节点可用的任何存储转换为本地或复制的 Kubernetes 持久卷。OpenEBS 可帮助应用程序和平台团队轻松部署需要快速、高持久性、可靠且可扩展的容器原生存储的Kubernetes 有状态工作负载。 安装OpenEBS 1.所有节点安装iSCSI启动器 yu…

生成式专题的第二节课--DCGAN

一、DCGAN基础概念 DCGAN&#xff08;Deep Convolutional Generative Adversarial Network&#xff0c;即深度卷积生成对抗网络&#xff09;&#xff0c;于2016年提出&#xff0c;是一种深度学习模型&#xff0c;是生成对抗网络&#xff08;GAN&#xff09;的一种变体&#xf…

HarmonyOS NEXT应用元服务开发按钮标注场景

对于用户可点击等操作的任何按钮&#xff0c;如果不是文本类控件&#xff0c;则须通过给出标注信息&#xff0c;包括用户自定义的控件中的虚拟按钮区域&#xff0c;否则可能会导致屏幕朗读用户无法完成对应的功能。 此类控件在进行标注时&#xff0c;标注文本不要包含控件类型、…

干部管理系统:全面提升干部管理效能

数字化浪潮下&#xff0c;干部管理系统作为管理利器&#xff0c;日益凸显其核心价值。该系统全面实现干部信息的数据化&#xff0c;涵盖从基础档案到教育、工作、培训及考核等全方位细节&#xff0c;信息详尽且条理清晰。这不仅极大提升了干部信息查询与更新的效率&#xff0c;…

商标恶意维权形式及应对策略

在商业领域&#xff0c;商标恶意维权的现象时有出现&#xff0c;给正常的市场秩序和企业经营带来了不良影响。以下将介绍其常见形式及应对方法。 一、商标恶意维权的形式1、囤积商标后恶意诉讼。一些人或企业大量注册与知名品牌相似或具有一定通用性的商标&#xff0c;并非用于…

【STL】二叉搜索树模拟实现

BinarySearchTree模拟实现 1 什么是二叉搜索树2 二叉搜索树的插入2.1 插入的流程2.2 插入的代码 3 二叉搜索树的查找3.1 查找的流程3.2 查找的代码 4 二叉搜索树的中序遍历4.1 中序遍历流程4.2 中序遍历代码 5 二叉搜索树的删除5.1 没有孩子 | 有右孩子5.2 没有右孩子5.3 有两个…