Quill富文本编辑器中增加文本样式

文章介绍了如何在Quill编辑器中添加三种文本样式:标题、副标题和图片说明。通过修改CSS和注册自定义字体选择器,实现了样式功能。遇到的居中问题通过将span转换为块级元素解决,学习了块级元素和行内元素的区别。提供了两种其他场景下的解决方案:添加DOM节点和通过事件处理选中文本添加标签。
摘要由CSDN通过智能技术生成


在编辑器中增加文本样式选择器,支持3种样式:

1. 标题:18px,加粗,line-height:3em;

2. 副标题:16px,加粗,line-height:3em;

3. 图片说明:14px, 正常,居中; (小问题难了好久,也想到了很多解决的方法)


效果图:

解决选择器 <script>

	
//font-style  
var fonts = ['Title', 'Subtitle', 'Annotation'];
var Font = Quill.import('formats/font');
Font.whitelist = fonts; 
Quill.register(Font, true);

const toolbarOptions = [
 [{ 'font': fonts }],//增加样式到工具栏
]

<style>.css


.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Title]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Title]::before {
  content: "标题";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Subtitle]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Subtitle]::before {
  content: "副标题";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Annotation]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Annotation]::before {
  content: "图片标注";
}
.ql-font-Title {
  font-size: 18px;
  font-weight: bold;
  line-height: 3em;
}
.ql-font-Subtitle {
  font-size: 16px;
  font-weight: bold;
  line-height: 3em;
}
.ql-font-Annotation {
  font-size: 14px;
  display: block;
  text-align: center;
}

以上就完美解决需求了;

但是坑就是那个居中的要求,一开始只加text-align:center是不能生效的,因为它的内容是在span标签中的。 

所以问题就是span是行内元素,要想居中就必须将其转化为块级元素,所以要还要添加上display:block 才能解决

1、每一个元素都有默认的display属性值,比如div元素,它的默认display属性值为“block”,成为“块级”元素(block-level);而span元素的默认display属性值为“inline”,称为“行内”元素。

2、块级元素:占据一定矩形空间,可以通过设置高度、宽度、内外边距等属性,来调整的这个矩形;


     行内元素 :自己的独立空间,它是依附于其他块级元素存在的,因此,对行内元素设置高度、宽度、内外边距等属性,都是无效的。


3、例子:链接 a 元素,在默认情况下是是“行内元素”,因此对a元素设置高度、宽度等属性,都是无效的。而比如div,p,li,img等默认情况下的display属性值就是“block”。所以对于链接a来说只能这样:display:block;强制将它改成块元素。

详解文章可以参考display:block详解_yura.的博客-CSDN博客_display: block;

里面讲解了行内元素和块元素的差异和用处;必须牢记里边的元素标签!!!


想法:

如果不是我这种情况下,该如何解决呢?

通过踩这个坑我学习了以下方法

方法一:quill的方法给其添加dom节点

通过quill的方法给其添加dom节点,然后通过quill的文档介绍给添加外来样式,比如添加引用vuetify中的各种自带的样式,应该Element或者其他的都一样吧

类似代码如下,可以借鉴:

// 添加vuetify中的font-weight-bold
let Parchment = Quill.import('parchment')
class BoldClassAttributor extends Parchment.Attributor.Class {
  add(domNode) {
    domNode.setAttribute('class', 'font-weight-bold')
    return true
  }
  remove(domNode) {
    domNode.removeAttribute('class', 'font-weight-bold')
  }
}
let boldClass = new BoldClassAttributor('bold', 'font-weight', {
  scope: Parchment.Scope.INLINE,
})
Quill.register(boldClass, true)

方法二 在其选中的文字添加一个<p>标签

方法二的想法就是给这个包裹这个文本域的外层框添加一个事件,这个事件就是用来获取鼠标选中的文字,当这个文字拿到以后,用js创建一个标签放到那种独占一行的标签里,然后用js给个标签添加样式水平居中

可以参考的文章如下:

获取网页中鼠标获得的文字:前端|获取网页中鼠标选中文字_51CTO博客_html鼠标悬停显示文字

为文本框选中的文字添加标签:JavaScript为文本框内选中文字添加标签 - 杨圣青 - 博客园

因为和我做的需求不一样,且看着很麻烦,我只尝试了一半,按道理是绝对行得通的,在一些特定的场景下;

我这个菜鸡还是老老实实啃css吧,绕的弯路太大了,哎┭┮﹏┭┮

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值