ページがロードされた後に JavaScript を使用して padding-right の値を変更しようとすると、何らかの理由でドキュメント本文の右のパディングが表示上で正しく更新されません。問題を示すこのフィドルをチェックしてください。
HTML
<html><body><div></div></body></html>
JavaScript
// Workaround #1: changing right padding without timeout
//$(document.body).css('padding-right', '100px');
setTimeout(function () {
// This doesn't work properly (at least for me) in Chrome on Ubuntu 12.04
$(document.body).css('padding-right', '100px');
// Write info in body that function was executed
$(document.body).append('timeout function executed');
// Workaround #2: write content into div
//$('div').append('timeout function executed');
// Workaround #3: set document body display to none and back to block via zero ms timeout
/*$(document.body).css('display', 'none');
setTimeout(function () {
$(document.body).css('display', 'block');
}, 0);*/
}, 1000);
右パディングの変更を有効にする方法がいくつかありました
- ブラウザ ウィンドウのサイズを変更する
- ドキュメント本文の表示をなしに切り替え、ゼロミリ秒のタイムアウト機能を介してブロックに戻ります
- いくつかの HTML コンテンツを div に書き込みます (フィドルの例)
Windows Chrome ではまだテストしていませんが、Ubuntu 12.04 Chrome バージョン 24 ではこの問題を再現できます。Firefox では、この問題は発生しません。この同じ問題に直面している他の誰かが、これが他のオペレーティング システムや Chrome バージョンでも発生するかどうかを確認できますか?
アップデート
達成したかった元のアイデアに近づいた新しいフィドルを更新しました。「何か」が完了すると(この場合はdivがクリックされます)、文書本文の右パディングを多かれ少なかれ滑らかなアニメーションで変更したいと思いました。これは Firefox では完全に機能しますが、最新の Chrome では機能しません。
$('div').click(function () {
var jqBody = $(document.body);
if (jqBody.css('padding-right') !== '200px') {
jqBody.animate({
'padding-right': '200px'
}, 500);
} else {
jqBody.animate({
'padding-right': '0'
}, 500);
}
});
ドキュメント本文の右パディングを変更することが理にかなっているのかどうかは別の問題です。私の目標は、すべてのページ コンテンツを右端から 200 ピクセル離して、そこに絶対配置されたサイドバー div 要素用のスペースを確保することでした。ページのコンテンツを div 要素にラップすることでこれを達成しました。body padding-right の代わりに、ラッパーの div 要素の右マージンを変更しています。このアプローチは、Chrome でもスムーズに機能します。