TinyMCE3から4に移行中です。
ただし、TinyMCEを100%の高さのコンテナに充填することに行き詰まっています(TinyMCE 3では機能します)。
このフィドルに注意してください: http://jsfiddle.net/MLJaN/
以下のCSSを使用して、iframeとそのすべての親を100%の高さに設定しようとしました。私はそれが理想的に見えないことに同意します、しかし私はそれがこのように働くべきであると思ったでしょう。
body, html, .mce-tinymce, .mce-edit-area.mce-container, iframe, .mce-container-body.mce-stack-layout
{
height: 100% !important;
}
ライブフィドルでわかるように、これはツールバーの「高すぎる」ピクセル数です。つまり、34px高すぎます(ツールバーの高さ)。
これは機能しますが、ブラウザで自動的にサイズ変更されることはなく、現在サポートされているのは約79%のみであるcalc()を使用します: http://jsfiddle.net/MLJaN/2/
今、私はエディター全体をコンテナーに入れて流動的にサイズ変更できるようにする純粋なCSS(calc()関数なし)ソリューションを探しています。
どんなポインタでも大歓迎です。
あなたがハンマーであるとき、すべての問題は釘のように見えます。タグが機能するため、これにはjavascriptやjqueryは必要ありません。必要なのは、#mcu_31のマージンを調整して、ツールバーとフッターの高さを調整することだけです。以下は、tinymceをその包含要素で応答するように設定します。
/*Container, container body, iframe*/
.mce-tinymce, .mce-container-body, #code_ifr {
min-height: 100% !important;
}
/*Container body*/
.mce-container-body {
position: absolute;
bottom: 0;
left: 0;
right: 0;
}
/*Editing area*/
.mce-container-body .mce-edit-area {
position: absolute;
top: 69px;
bottom: 37px;
left: 0;
right: 0;
}
/*Footer*/
.mce-tinymce .mce-statusbar {
position: absolute;
bottom: 0;
left: 0;
right: 0;
}
TinyMCEがメニュー/ツールバーの追加または削除でIDを変更するため、改訂されました。これは、何をしても機能します。
flex-boxesを使用して、純粋な[〜#〜] css [〜#〜]でこの問題を解決しました。
<style>
#article, .mce-tinymce,.mce-stack-layout, .mce-edit-area{
display: flex;
flex-direction: column;
flex: 1;
}
.mce-tinymce iframe{
flex: 1;
}
</style>
これにより、メニューバーやその他の要素のサイズを気にする必要がなくなります。
CSSで計算を行う代わりに、JSに移動しました。これは、メニューバーの高さが自動的に計算されるため、計算する必要がないことを意味します。手動で調整。また、css calc()をサポートしていなくても、このソリューションを任意のブラウザーと互換性があります。
function resize() {
setTimeout(function () {
// Main container
var max = $('.mce-tinymce')
.css('border', 'none')
.parent().outerHeight();
// Menubar
max += -$('.mce-menubar.mce-toolbar').outerHeight();
// Toolbar
max -= $('.mce-toolbar-grp').outerHeight();
// Random fix lawl - why 1px? no one knows
max -= 1;
// Set the new height
$('.mce-edit-area').height(max);
}, 200);
}
$(window).on('resize', function () { resize(); });
しかし、私の言葉だけを信じてはいけません。
参考までに、 要点 も作成しました。
JQueryを使用していない方のために、動作する純粋なjavascriptコードを次に示します。
function doresize(){
var ht = window.innerHeight;
console.log("ht = " + ht);
if (document.getElementsByClassName('mce-toolbar-grp')){
ht += -document.getElementsByClassName('mce-toolbar-grp')[0].offsetHeight;
ht += -document.getElementsByClassName('mce-toolbar-grp')[0].offsetTop;
console.log("ht = " + ht);
}
if (document.getElementsByClassName('mce-statusbar')){
ht += -document.getElementsByClassName('mce-statusbar')[0].offsetHeight;
console.log("ht = " + ht);
}
ht += -3; // magic value that changes depending on your html and body margins
if (document.getElementsByClassName('mce-edit-area')){
document.getElementsByClassName('mce-edit-area')[0].style.height = ht + "px";
console.log("ht = " + ht);
}
}
window.onresize=doresize;
window.onload=doresize;
angularこれだけで修正、
@Component({
selector: 'serta-tinymce',
template: `<textarea **style="min-height:500px"** id="store-description"></textarea>`,
styles: []
})
#editor-wrapper {
height: 100%;
}
#editor-wrapper .mce-tinymce.mce-container.mce-panel,
#editor-wrapper .mce-container-body.mce-stack-layout {
height: 100%;
}
#editor-wrapper .mce-edit-area.mce-container.mce-panel.mce-stack-layout-item {
height: calc(100% - 75px); /* 75 is tinymce header and footer height*/
}
#editor-wrapper iframe {
height: 100% !important;
}
私の問題をこれほどうまく修正したものはありませんでした。上からのカップルの答えの組み合わせです。
$(window).on('resize', function () {
setTimeout(function () {
var max = $('.mce-tinymce').css('border', 'none').parent().height();
max -= $('.mce-menubar.mce-toolbar').outerHeight();
max -= $('.mce-toolbar-grp').outerHeight();
max -= $('.mce-edit-area').outerHeight() - $('.mce-edit-area').height();
$('.mce-edit-area').height(max);
}, 100);
});
そして、サイズ変更トリガーをinitに追加します。
tinymce.init({
selector: '#tinymce',
height: "100%",
branding: false,
statusbar: false,
setup: function (ed) {
ed.on('init', function(args) {
$(window).trigger('resize');
});
}
});