2013-04-12 7 views
6

jQueryの.width()メソッドは、スクロールバーを考慮していないようです。私が問題になるのは、子供の幅を親の幅と同じにしたいからです。 #contentDivは私がサイズしたい要素であり、この例ではスクロールバーとjqueryの処理.width()メソッド

$('#contentDiv').width($('#containerDiv').width()) 

、と私はその親要素である#containerDivの幅を有するようにそれを設定したい:私は、次のようにjQueryを使用していました。私の問題は、私の実際のコードではthis fiddle.

に見られるように、これは、#contentDivの側面を遮断することで、私はすべてがスクロールのdivに収まる必要があり、私はjQueryを使ってサイズだいくつかの要素を、持っているので、ちょうど設定します#contentDiv〜100%のCSSはオプションではありません。 jQueryのdivのスクロールバーの幅を処理する最善の方法は何ですか?

+0

異なるブラウザーがスクロールバーを異なる方法で実装しているため、問題があります。IEはdivの領域の外にスクロールバーを置きます(これは実際には標準のドキュメントに従って正しい)が、他のすべてのブラウザは実際にその領域のスクロールバーを持つ。この分野を研究するときに覚えておいてください。 [?jqueryの - スクロールバーなしに画面幅を取得する方法]の – krillgar

+1

可能複製(http://stackoverflow.com/questions/8339377/jquery-how-to-get-screen-width-without-scrollbar)(( 'はinnerWidthを使用) ')? – fcalderan

+0

これはすべてのブラウザで一貫していないため、面倒なものです。いくつかは内部幅を与え、いくつかはスクロールバーを使って幅を与えます。私はあなたがサポートしようとしている各ブラウザに固有の解決策を考え出す必要があるかもしれないと思います –

答えて

1

このソリューションを中心に仕事をしながら私が見つけた最良の解決策はこれです:

http://chris-spittles.co.uk/?p=531

jQueryがすべて強力で、すべてのものが、時にはネイティブJSの小さなダッシュを使用すると、ピクセル完璧なページをレンダリングするために必要なすべてのです。このソリューションが役立つことを願っています!

0

更新日:jQueryの幅見つける方法の

なし、スクロールバーを占めていません。私の元の例では、.innerWidth(true) LOOKSを使用すると動作しますが、戻ってオブジェクトを返すだけで、widthが失敗し、内部コンテンツのサイズ自体が利用可能なスペースに収まるためです。しかし、スクロールバーを使ってdivの空き領域を計算する関数を書くことができます。このスクロールバーを使用して、必要に応じてコンテンツを配置することができます。

divをスクロールバーでdivに追加すると、利用可能な幅(すなわち、親の内幅から幅を差し引いたもの)が使用されるという事実を利用しました。スクロールバーの)。

関数は次のようになります。

function noScrollWidth(div){ 
    var measureDiv = $('<div id="measureDiv">'); 

    div.append(measureDiv); 

    var width = measureDiv.outerWidth(); 

    measureDiv.remove(); 

    return width 
}; 

私はその後、私のコンテンツのdivのサイズにこれを使用します。

$('#contentDiv').width(noScrollWidth($('#containerDiv'))); 

Working fiddle.

+0

パラメータをinnerWidth *に渡すと、要素の内部幅が設定されます。 'true'は有効な引数ではありませんが、それはwidthの代わりに要素を返すことを意味します。 –

+0

良いキャッチは、私の例が 'innerWidth(true)'を使用したときに実際に黙って失敗しているようです。代わりに別のソリューションを追加しました。それがあなたのために働くかどうか私に教えてください! – ckersch

+0

編集していただきありがとうございます - 私は私のdownvoteを削除しました。私が解決しようとしていた問題は、スクロールバーを除いた要素の幅を見つけることでした。そして '$(myElementSpec)[0] .clientWidth'が最適な解決策でした。この回答は私に役立ちました:http://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively –

0

はこれを試してみてください:については

$('#contentDiv').width($('#containerDiv')[0].clientWidth) 

をモーそのソリューションに関する情報は、this StackOverflow answerを参照してください。

0

もう1つのアプローチは、両方の要素 'box-sizing property'を 'border-box'に設定して、contentDivの幅を100%に設定して、必要な方法で動作するかどうかを確認することです。

これで、古いブラウザのことを心配するプロジェクトが少なくなったため、「border-box」を使うと作業が楽になります。ただし、複数のプラットフォームで複数のブラウザをテストするようにしてください。なぜなら、すべて同じ方法でスクロールバーを処理するのかどうかわからないからです。

関連する問題