symfony 焦点上的CKEditor CSS更改

e4eetjau  于 2022-11-16  发布在  其他
关注(0)|答案(3)|浏览(132)

我在一个symfony项目中使用了CKEditor和FOS\CKEditor-bundle 1.2。我希望包含CKEditor的整个元素都有一个焦点边框,就像你在Stackoverflow上写或回答问题一样。使用一个旧的question和一个JSFiddle,我已经做到了这一点:

我的天

// Set focus and blur listeners for all editors to be created.
CKEDITOR.on( 'instanceReady', function( evt ) {
    var editor = evt.editor,
        body = CKEDITOR.document.getBody();

    editor.on( 'focus', function() {
        // Use jQuery if you want.
        body.addClass( 'fix' );
    } );

    editor.on( 'blur', function() {
        // Use jQuery if you want.
        body.removeClass( 'fix' );
    } );    
} );

CKEDITOR.replace( 'editor', {
    plugins: 'wysiwygarea,sourcearea,basicstyles,toolbar',
    on: {
        // Focus and blur listeners can be set per-instance,
        // if needed.
        // focus: function() {},
        // blur: function() {}
    }
} );

或者作为一个demo of JSFiddle。一切看起来都很好的小提琴,但与我的版本的CKEditor的边界实际上是设置在body的主页和nog的CKEditor。
我不明白为什么它不起作用,也不知道该怎么改变。有什么想法?

agyaoht7

agyaoht71#

CKEDITOR.document等价于window.document(不相同,因为)。如果要向特定编辑器示例的body元素添加类,请使用editor.document.getBody();
另一个问题是编辑器示例的body被保存在内部文档中,所以如果你想让fix类产生效果,你需要把它添加到ckeditor/contents.css或一个分配给www.example.com的文件https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-contentsCss。
我还建议将body规则中的默认margin:20px;替换为padding: 20px; margin : 0;

编辑:

根据您的意见,我认为更好的方法是:

<style>
            .fix {
                border: 5px solid black !important;
            }
        </style>
        ...
        var editor = CKEDITOR.replace( 'editor1', {/*instance configuration goes here*/});
        CKEDITOR.on( 'instanceReady', function( evt ) {

            var main_container = document.getElementById( 'cke_' + evt.editor.name ),
                content_container = main_container.getElementsByClassName( 'cke_contents' )[0];

                editor.on( 'focus', function() {
                    content_container.classList.add( "fix" );
                } );

                editor.on( 'blur', function() {
                    content_container.classList.remove( "fix" );
                } ); 
        } );

备注:

  • 样式规则可以放在CSS文件中,但在这种情况下,这需要是主页面CSS文件,而不是contents.css
  • 有必要将!important添加到fix类的边框中,因为编辑器的cke_reset将其设置为0。您也可以将其添加为内联样式。

下面是一个工作示例:https://codepen.io/j_swiderski/pen/XyMyme

von4xj4u

von4xj4u2#

在CKEditor中,当你聚焦在文本区域时,它会得到一个添加的类cke_focus。使用这个类和第二个div元素(id为cke_1_contents),你可以创建一些css来创建内容(文本区域)的边框。如下所示:

.cke_focus #cke_1_contents {
            border: 5px solid black !important;
}

就像Swiderski说的:有必要在修复类中添加!important to border,因为编辑器的cke_reset将其设置为0。您也可以将其添加为内联样式。

mqxuamgl

mqxuamgl3#

对于任何在2022年偶然发现这一点的人来说...
我需要为React中的CKEditor 4示例自定义常规边框和焦点边框。我从一个使用CKEditor周围的 Package 器组件的父组件完成此操作。我不想直接修改 Package 器或CKEditor示例,也不想创建一个contents.css文件,因为 Package 器在应用程序的其他部分使用,而我想要最轻的操作。(注意,我使用的是material-ui和JSS语法,但原理是相同的):

.parent-container {
  .cke {
    border: 2px solid #111111 !important;
    border-radius: 2px !important;
  }

  .cke.cke_focus {
    border-color: #222222 !important
  }
}

相关问题