2016-05-29 8 views
0

この質問には簡単な答えがあるのか​​分かりません。ウィンドウサイズに基づいてプロパティの負の値を増やす

状況は、私は、負のマージンとページ上の要素を持っているということです。

.element { 
margin-left: -195px; 
} 

それは画面サイズ1440x532でうまく動作(Chromeのインスペクタ要素に確認してください)。

私が欲しいのは、説明するのは簡単です。

私は窓を1つの画素だけ大きいのmargin-left要素のいつで(例えば)1つのピクセルの増加たい:ウィンドウサイズは1441、のマージン左であれば、そう

を要素は-194ピクセルです。ウィンドウサイズが1451の場合、要素の余白は-184pxになります。

同じように、私はこれを1440px以上から動作させたいと思います。

重要な点:画面サイズに基づいて増加するメディアのクエリではなく、画面サイズの間隔の間に常に値が同じになるようにする余白の動的値です。私が望むのは、膨大な数のメディアクエリーを追加することになります。

これはjavaScriptまたはjQueryで可能ですか? (?あるいはCSS)

答えて

1

jQueryのソリューション。

それはあなたがこの方法であなたのCSSを実装することができ、良好なsupport among browsers

を持っている:

#element{ 
     margin-left: -195px; 
    } 
    @media screen and (min-width: 1440px){ 
     #element{ 
      margin-left: calc(-195px + 100vw - 1440px); //100vw is the width of the screen 

     } 
    } 

それは1440以上の各ピクセルのピクセルを追加 これはあなたが

何を意味するかである場合を教えてください
+0

ありがとう:)これは完全にCSSなのでほぼ完璧です。それはほぼそこにあります。ちょうど2つのこと:私は、メディアのクエリで最大幅を最小幅に変更しなければならなかったと奇妙なことが起こります:画面サイズが1440pxに達すると、マージン左は-195pxから-235pxになりますが、そこから画面が1ピクセル大きくなるたびにサイズが1ピクセルずつ増加します。私は何が起こるかを見るために数字を微調整します。たぶん私は特異性などに何か問題があるかもしれません。それから、私はあなたにフィードバックを与えます。 – viery365

+1

私がしたことは、最小幅も1440に変更することでした。 -195pxと-235px(40px)の差はそれに関係していました。私はあなたの答えをわずかに編集し、それを正解としてマークします。どうもありがとうございます!!! – viery365

+0

Ops、私はそれを逃した。編集していただきありがとうございます。あなたを助けてくれてありがとう –

0

はい、それはresize()

$(window).resize(function() { 
    if (($(window).width() <= 1441)) { 
    $('.element').css('margin-left', "-194px") 
    }else if($(window).width() <= 1451){ 
    $('.element').css('margin-left', "-184px") 
    } 

}); 

でjQueryを使っても可能ですが、私はCSSでメディアクエリを使用するためにあなたにお勧め:

@media screen and (max-width: 1441px) { 
    .element { 
    margin-left: -194px; 
    } 
} 

@media screen and (max-width: 1451px) { 
    .element { 
    margin-left: -184px; 
    } 
} 
+0

すぐにお返事いただきありがとうございます。私は試してみるつもりですあなたにフィードバックを与えます – viery365

+0

この場合のCSSの問題は、別の画面サイズで別の値が必要だった場合、私は '無限の'メディアクエリを作成しなければならないということです。その画面サイズから、margin-leftの値は同じままです。しかし、私はあなたのことを理解しています。 – viery365

+0

問題は解決しましたか?か否か ? – Gintoki

1

これはCSSでは不可能ですウィンドウサイズを取得するプロパティやメソッドがないためです。存在する場合は、calc()を使用してこれを行うことができます。

ただし、これはJavaScriptでも可能です。他のユーザーがあなたはこの使用のために完璧に動作しましたが、あなたはまた、CSSのみの選択肢を使用することができますprefere場合(これは、ユーザがスクリプトを無効にしている場合でも動作します!)

function resizeScreen() { 
    var windowWidth = $(window).width(); 
    var $element = $('.element'); 

    if (windowWidth > 1440) { 
     // Calculate the new (negative) margin by subtracting the windows width by 1440 (e.g. 1500-1440 = 60). The new margin would be: -195 + 60 = -135. 
     var newMargin = $element.css('margin-left') + (windowWidth - 1440); 

     $('.element').css('margin-left', newMargin) 
    } 
} 

$(window).resize('resizeScreen'); 
+0

あなたの答えをありがとう。私はそれを試してみる:) – viery365

+0

これは完全に動作します。私はCSSだけの問題のためにもう1つの答えを選んだが、これもうまくいく。しかし、私はあなたのコメントを考慮し、私は別のブラウザでそれを試してみます。とにかく、これからもう一つの疑問が生じました。テストの後、マージン値の増分を1pxだけ増やすことは、必要なものに対してはあまりにも多くなります。私のレイアウトが必要とするものは、ウィンドウ画面のピクセル単位で0.1ピクセルのように、少しずつ増加します。ここに別の質問を追加してお知らせします。とにかく助けてくれてありがとう! – viery365

+0

他の質問はここにあります:http://stackoverflow.com/q/37510459/4551792 – viery365

関連する問題