2017-11-07 3 views
0

各行の各列の左の位置を取得してから、負のマージンとして列のdivに適用する必要があります。ハードコードされたJavaScriptで作業していますが、もっと洗練されたソリューションがあることはわかっています。行の各列の位置を負のマージンとして適用する

HTML:

<div class="row"> 
    <div class="column column_1"><!-- Content --></div> 
    <div class="column column_2"><!-- Content --></div> 
    <div class="column column_3"><!-- Content --></div> 
    <div class="column column_4"><!-- Content --></div> 
</div> 

私の醜いJS:

var adjustMargin1 = jQuery(".column_1").position().left; 
var adjustMargin2 = jQuery(".column_2").position().left; 

ETC... 

jQuery(".column_1 .adjusted-div").css("margin-left", -adjustMargin1); 
jQuery(".column_2 .adjusted-div").css("margin-left", -adjustMargin2); 
+0

各列の左の位置が異なるかどうか尋ねることができますか?私はちょうどこれが最適な解決策を思い付くように見えるかもしれないものを描写しようとしています – Enjayy

+0

それはそれぞれのために異なっています、はい。 – Bryce

答えて

1

あなたはこのようにそれを行うことができます:adjusted-を見つけ、各.column要素の上にループ

$('.column').each(function(s, el) { 
    $(el).find('.adjusted-div').eq(0).css('margin-left',-($(el).position().left)); 
}); 

その中でdiv要素を作成し、親から左に残った位置を余白として子に適用します。

+0

これは完璧に動作します、ありがとう!関数定義で "s"は何をしているのですか?eq(0)はなぜ必要ですか? – Bryce

+1

sは単なる数値索引ですが、実際にはそれを必要としません(あるいはel、代わりに$(this)を使うこともできます)。 eq(0)は必要ではないかもしれません。HTML構造に依存します(例えば、クラスに合った複数のdivがあるかどうか、クラスを適用するかどうかなど)あなたのケースでは適用されません:) – delinear

+0

Gotcha。明確化のおかげで:) – Bryce

関連する問題